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),读取里面的action、form-bean、forward、exception及资源文件和插件信息,并将其保存到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的返回值,参数做个说明:
- 返回值,ActionForward对象,(自:通过mapping对象的findForward(“add”)方法在xml中找到映射对应的jsp来表示Action的处理结果)表示Action处理请求结束后,需要转发的WEB资源(jsp页面等);
- ActionMapping参数,这个参数实质上就是我们在struts-config.xml中配置的<action-mapping>可以通过打印 mapping.getXXX来验证);
- ActionForm,也就是在struts-config.xml中注册的ActionForm,用于封装页面表单数据;
- HttpServletRequest,表示当前正在处理的HTTP请求,里面包含了要处理的请求信息,我们常用的request.getXXX;
- 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里面它会帮你自动的挑战到相应的页面
- Struts1 的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- Struts1的工作原理分析
- Struts1学习笔记(Struts的工作原理)
- Jupyter
- final and static
- AOJ0118——Property Distribution(DFS)
- Swift3.0语言教程字符串与文件的数据转换
- VS2015下的OpenCV配置使用
- struts1的工作原理
- spring boot 默认启动图案
- Category中的属性和成员变量
- 97条架构建议-假设-分享-模式病
- 成为JavaGC专家Part I — 深入浅出Java垃圾回收机制
- Android:Activity启动模式
- IOS9获取设备唯一标识符
- 解除vmware虚拟机已挂起的状态
- Qt 读写 XML