struts1的工作原理

来源:互联网 发布:https 443端口 编辑:程序博客网 时间:2024/06/05 14:21

一、Struts 的体系结构

   

二、Struts 的流程

   

三、具体原理

1、 Struts的核心是ActionServlet,它本质上就是一个Servlet,在Web.xml中配置ActionServlet为自动启动,指明Struts的配置文件所在位置,并指明Struts中工作条件

   
<servlet>      <servlet-name>struts</servlet-name>      <servlet-class>          org.apache.struts.action.ActionServlet      </servlet-class>      <init-param>          <param-name>config</param-name>//如果有多个配置文件,以逗号分隔          <param-value>/WEB-INF/struts-config.xml</param-value>      </init-param>      <load-on-startup>0</load-on-startup>   </servlet>   <servlet-mapping>      <servlet-name>struts</servlet-name>      <url-pattern>*.do</url-pattern>   </servlet-mapping>

2、 当服务器容器(Tomcat)启动时,自动加载ActionServlet,并执行init()方法,init方法会用Sax解析Web.xml中指定的Struts配置文件(struts-config.xml),读取里面的actionform-beanforwardexception及资源文件和插件信息,并将其保存到Struts相应的MAP缓存中。

<struts-config><form-beans><form-bean name="OrderNoaudinGeneralInfoListForm" type="com.pcm.web.sfm.order.formbean.OrderNoaudinGeneralInfoListForm" /><form-bean name="OrderSearchPassGeneralInfoListForm" type="com.pcm.web.sfm.order.formbean.OrderSearchPassGeneralInfoListForm" /><form-bean name="OrderPaymentInfoForm" type="com.pcm.web.sfm.order.formbean.OrderPaymentInfoForm" /></form-beans><action-mappings>   <action name="OrderGeneralInfoForm" scope="request" type="com.pcm.web.sfm.order.action.OrderGeneralInfoAction" path="/OrderGeneralInfo" validate="false" parameter="formAction"><forward name="add" path="/sfm/order/AddOrderGeneralInfo.jsp"/><forward name="addItem" path="/sfm/order/AddOrderGeneralItemInfo.jsp"/><forward name="view" path="/sfm/order/ViewOrderGeneralInfo.jsp"/></action><!--领导审批、财务审批 --><action name="OrderNoaudinGeneralInfoForm" scope="request" type="com.pcm.web.sfm.order.action.OrderNoaudinGeneralInfoAction" path="/OrderNoaudinGeneralInfo" validate="false" parameter="formAction"><forward name="viewNoaudin_classic" path="/sfm/order/ViewNoaudinOrderGeneralInfo_classic.jsp" /><forward name="Noaudin_classic" path="/sfm/order/OrderNoaudinGeneralInfo_classic.jsp" /></action><action name="OrderNoaudinGeneralInfoListForm" scope="request" type="com.pcm.web.sfm.order.action.OrderNoaudinGeneralInfoListAction" path="/OrderNoaudinGeneralInfoList" validate="false" parameter="formAction"><forward name="listPass" path="/sfm/order/ListPassOrderGeneralInfos.jsp" /><forward name="searchNoaudinList_classic" path="/sfm/order/SearchNoaudinOrderGeneralInfo_classic.jsp" /></action></action-mappings></struts-config>

    ActionServlet是通过struts-config.xml配置文件来确定所要使用的Action的。

  •      Action类我们应该很熟悉,因为利用struts1框架进行项目开发时,我们大多数时候的工作就是重写
  •      Action类的execute方法(当然,在开发大型WEB应用时,多半不叫execute,但其返回值,参数类型和参数个数是一样的),下面对execute的返回值,参数做个说明:

  1.     返回值,ActionForward对象,(自:通过mapping对象的findForward(“add”)方法在xml中找到映射对应的jsp来表示Action的处理结果)表示Action处理请求结束后,需要转发的WEB资源(jsp页面等);
  2.     ActionMapping参数,这个参数实质上就是我们在struts-config.xml中配置的<action-mapping>可以通过打印                         mapping.getXXX来验证);
  3.     ActionForm,也就是在struts-config.xml中注册的ActionForm,用于封装页面表单数据;
  4.     HttpServletRequest,表示当前正在处理的HTTP请求,里面包含了要处理的请求信息,我们常用的request.getXXX;
  5.     HttpServletResponse,当前生成的返回给客户端的HTTP响应。


客户端发送请求(Http Request),被struts1的核心控件器ActionServlet接收(通过Web.xml中<servlet-mapping><url-pattern>映射的路径),ActionServlet根据struts-config.xml里的映射关系找到对就的Action,若找不到就返回500错误到JSP页面。若有就Action里的 excute()方法里执行相应的逻辑操作,比如调用Model层的方法,然后通过ActionForward,跳转到对应的输出页面

struts1的步骤:

1.导入struts1在lib文件下的所有架包;

2.把web-inf文件下的struts-config.xm文件复制到自己项目里面的web-inf下,把注释去掉只留下一对<struts-config>标签;

3.把web-inf文件下的web.xml文件里的servlet配置复制到自己项目里面的web.xml里面;

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
 </servlet>

4.创建有关的action类继承action重写他的execute方法;

5.根据所写的有关action类配置<struts-config>文件里的东西如:

<action-mappings>

<action path="/addUser"
  type="com.wangzhaohui.action.AddUserAction"
>

 <forward name="scuess" path="/ok.jsp"></forward> 
</action>

</action-mappings>

6.我们还可以写一个继承ActionForm的类,里面的写法和pojo类差不多,看需要接收哪些参数就写什么。配置好了就可来自动接收表单数据

<struts-config>

<form-beans>
<form-bean  name="userForm" type="com.wangzhaohui.actionForm.UserActionForm"></form-bean>
</form-beans>
<action-mappings>

<action path="/addUser"
  type="com.wangzhaohui.action.AddUserAction"
  name="userForm">
 <forward name="scuess" path="/ok.jsp"></forward> 
</action>

</action-mappings>

</struts-config>

然后在action里面接收数据的时候就可以用如form.getXX来自动接受表单数据了。

(view)视图层里面的.do请求都被actionservlet中央控制器(在web.xml里面配置好的)接收到,会读取配置文件(srtuts-config)找到相应的请求,分发给相应的action进行处理。进行处理的时候需要传几个参数:request,response,mapping(把配置拿出来封装成一个对象取出来), 还有一个actionForm(根据配置文件里配置的name=“”来自动接收表单数据,最终调用业逻辑,拿到一些数据返回回来,返回actionservlet的是一个actionForward的跳转信息,通过mapping.findForward找到然后servlet里面它会帮你自动的挑战到相应的页面

0 0
原创粉丝点击