前言

 

    SSH已经成为了Java的主流框架,struts作为Web层的框架,主要负责页面的流转配置。说到页面流转的配置,也就意味着struts的配置文件比较强大一些。至于页面流转,那当然是ActionServlet类来控制了。但是实质做处理的却要靠RequestProcessor来进行。Action则负责调用相应的业务实现。

 

ActionServlet

 

    ActionServlet是struts的内置核心控制器组件,它继承了javax.servlet.http.HttpServlet类。struts的启动是从ActionServlet开始的,它在struts中扮演着MVC中核心控制器的角色,它是一个标准的Servlet。一般情况下,ActionServlet会获取用户的请求,根据配置文件查询相应的Action,然后将请求传递给这个Action。在这个过程中,struts首先判断Action对象是否存在,如果不存在则先创建。然后将这个对象交给一个Action实例,同样也会判断是否存在,如果不存在,则会执行execute方法进行创建。

 

    ActionServlet在配置文件中的配置和一般的Servlet没什么区别,因为ActionServlet在struts中起着控制器的作用,所以一般设置load-on-startup属性,让它在初始化时就启动。ActionServlet在执行过程中,会拦截所有的HTTP请求,获取到其中的request请求,然后根据struts-config.xml配置文件,创建和相应response的请求页面对应的map文件,这样就实现了路由的功能。

 

    一般情况下,ActionServlet处于待命状态,当容器收到请求时,ActionServlet的doPost和doGet方法将会处理相应的post和get请求。ActionServlet在收到请求之后,它会调用RequestProcessor对象来处理HttpRequest请求的消息,然后它会根据浏览器请求的路径,在struts-config.xml文件中请求路径和Action的对应关系找到相应的Action,接着调用相应的Model层的对象进行处理,处理完成之后,返回一个带有下一个返回页面信息的ActionForward对象,由ActionServlet处理后返回下一个页面给浏览器。

 

    所以说,在这个过程中,ActionServlet并没有做实质性的工作,而是由RequestProcessor来处理。

 

RequestProcessor

 

    RequestProcess类是struts中的一个核心类,这个类在struts的控制过程中做了很多工作。它里面有很多方法,不同的方法做了不同的事情,下面是RequestProcessor类在处理t请求时的主要方法。

 

    1、processPath:首先通过processPath方法来截取URL;

 

    2、processMapping:然后processMapping方法会根据截取的URL获得相应的ActionMapping;

 

    3、processActionForm:这个方法是根据ActionMapping中的name来获取相应的ActionForm。如果配置文件中配置了ActionForm,则在request或者session中查找;如果request或者session中已存在,则返回这个ActionForm;如果没有,则根据配置文件中配置的ActionForm的路径,通过反射进行创建,然后将创建好的ActionForm放入request或session中;

 

    4、processPopulate:首先执行ActionForm中的reset方法进行重置,然后获得表单各输入域的name,再调用request.getParameterValues()方法获得相应name输入域中的值,接着将表单数据放到一个map中,key是输入域的name,value是输入域的输入内容,最后调用BeanUtils类,将map中的值和ActionForm进行对应,通过ActionForm的setter方法给各属性赋值;

 

    5、processActionCreate:根据完整的Action名称在map中查找Action对象是否存在,如果存在则返回;如果不存在则通过反射来创建Action,再将创建好的Action放到map中;

 

    6、processActionPerform:执行用户自定义的execute方法,并将ActionMapping、ActionForm、request、response对象传递过去,将ActionForward返回;

 

    7、processForwardConfig:根据返回的ActionForward完成转向,这一步分为两种方式,转发和重定向。

 

Action

 

    Action组件就是具体来调用业务逻辑了,通过调用Model层的类,完成业务逻辑实现,然后将数据返回给ActionServlet进行转向。

 

总结

 

    struts是基于MVC模式,但是struts的配置文件要比spring MVC麻烦的多,spring MVC现在几乎可以实现零配置。另外,struts属于model2模式,采用拦截器拦截请求,并作出相应的转向处理。这也就要求程序员的能力比较高,比较适用于大型项目的开发。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐