Struts2框架学习 Day1

本文介绍了Struts2框架的发展背景及其相对于Struts1和WebWork框架的优势,详细阐述了Struts2框架的特点,包括自动封装表单数据、便捷的文件上传、国际化支持、表单验证等。并通过一个注册页面的案例演示了如何使用Filter机制简化开发过程。
摘要由CSDN通过智能技术生成

一、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

    }

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值