Struts2框架学习 Day1

来源:互联网 发布:js 数组元素 函数 编辑:程序博客网 时间:2024/05/20 05:10

一、Struts概述

1.Struts背景

  • 由出色稳定的框架Struts1和WebWork框架整合而来
    • Struts1框架: 它是apache公司的开源子项目,是基于mvc逻辑分层的web层框架实现。是出现最早的web层框架,应用最广泛。它重点关注的是控制层(C),对于视图层(V)只是提供了大量的标签;对于Model(M)层的影响微乎其微.
    • WebWork框架: 它也是一个mvc的框架,这个框架的设计思路是采用拦截链将用户的请求的数据转发到Action中,并负责将Action的处理结果转换成对用户的响应。这种设计思路能够和ServletAPI分离。
  • 吸取两大框架的优点
  • 提高开发效率和规范性
  • 更好的实现了MVC架构
  • 解除了与Servlet的强耦合性

2.Struts2框架的意义

  • 更加便捷的进行开发
    • 自动封装表单提交数据:属性驱动(表单中提交的数据不需要使用request.getParamater获取,而自动放到属性当中可以直接使用)、模型驱动(提交的表单数据可以自动封装到对应的实体类对象中,直接调用实体类中的EO方法即可持久化到数据库中)
    • 便捷的实现上传文件:FileUpload(以前的文件上传方法需要手动引入smartupload.jar文件)
    • 使网站通用于国内外(国际化),国际化通用标准
    • 通过配置完成表单验证:校验器,表单验证一般分为两块,首先通过JS完成第一次表单校验,然后传到后台进行二次校验。
    • 强大的标签库:Struts2标签库、OGNL标签库
  • 更科学的管理

    • 使用xml文件管理大量的程序文件对应映射关系,维护方便、简洁、安全、迅速。
  • 更安全的操作

    • 安全的线程机制:每个action都是独立的(Servlet是单例模式,线程不是安全的)
    • 防止数据重复提交:token令牌机制,该机制可以防止用户因为电脑卡、网速慢引起的数据重复提交问题。
    • 异常处理机制:通过配置来完成,更便于管理
  • 先进的编程思路
    • 面向切面的编程(AOP):拦截器

3.Struts核心处理机制

  • 使用Filter作为控制器的MVC应用实战
    • 流程概念分析
    • 简单业务实现

传统的开发模式和Struts2开发模式的区别,首先看传统模式如下图所示:

这里写图片描述

图中拿一个注册页面进行举例,首先提交一个register.action的注册页面,程序会将action请求发送给Servlet,Servlet会处理请求跳转到一个注册页面,填写完信息后,点击注册按钮提交请求,此时会将请求提交给另外一个Servlet,这个Servlet验证用户的请求信息并保存到数据库中,最后跳转到注册结果页面。而应用了Filter的Struts2开发模式的处理方式是不同的,如图所示:

这里写图片描述

当提交一个注册action或者点击注册按钮提交注册信息时,可以直接将请求都提交到Filter中,Filter会通过判断来确定跳转到哪一个页面,极大的提高了开发效率。

下面是这个注册的Demo实例,代码如下:

首先创建一个实体类Users:

package cn.wikey.pojo;public class Users {    private String username;    private int id;    private String password;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

然后创建一过滤器的包,并创建一个Filter过滤器ControlFilter.java,在web.xml中对它进行配置:

    <?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"     xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">    <display-name></display-name>       <welcome-file-list>    <welcome-file>index.jsp</welcome-file>    </welcome-file-list>    <filter>        <filter-name>ControlFilter</filter-name>        <filter-class>cn.wikey.Filter.ControlFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>ControlFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping></web-app>

编写初始页面、注册、结果页面三个JSP文件,很简单的代码,省略不贴,然后我们对过滤器ControlFilter.java进行编写,代码如下:

package cn.wikey.Filter;public class ControlFilter implements Filter {    public void destroy() {        // TODO Auto-generated method stub    }    public void doFilter(ServletRequest arg0, ServletResponse arg1,            FilterChain arg2) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) arg0;        //1.接收用户请求的地址        String url = request.getServletPath();        //2.判断用户请求的地址,并执行相应的程序        if(url.equals("/register.action")){            request.getRequestDispatcher("/register.jsp").forward(arg0, arg1);            return;        }else if (url.equals("/savaUser.action")) {            String username = request.getParameter("username");            String password = request.getParameter("password");            String password1 = request.getParameter("password1");            if(password.equals(password1)){                Users users = new Users();                users.setUsername(username);                users.setPassword(password);                //执行相关的DAO持久化操作                request.getRequestDispatcher("end.jsp").forward(arg0, arg1);                return;            }else {                request.getRequestDispatcher("register.jsp").forward(arg0, arg1);                return;            }        }        arg2.doFilter(arg0, arg1);    }    public void init(FilterConfig arg0) throws ServletException {        // TODO Auto-generated method stub    }}

最终实现简单的页面及结果如下:

0 0
原创粉丝点击