您的位置:首页 > 编程语言 > Java开发

struts 入门基础知识学习总结(转)

2009-03-31 22:42 936 查看
一.struts工作流程
1.客户端所有特定(在web.xml中url-pattern中设置)的请求都由ActionServlet处理。
2.ActionServlet根据struct-config.xml的配置信息,将请求转发给相应Action对象。
3.当客户端提交表单的时候,会自动创建ActionForm对象,并将数据保存在对象里。
4.Action对象可以获取ActionForm对象里的数据。
5.Action对象调用业务逻辑组件,来完成业务处理。

二.struts 控制器的功能
1.接收用户特定请求
2.根据用户的不同请求,调用对应的模型组件完成相应的业务逻辑。
3.获取业务逻辑结果。
4.根据当前的处理结果,选择合适的视图组件返回给客户。

三.struts 控制器中重要的类
struts 框架中控制器的基础时ActionServlet。它负责从struts-config.xml中读取数据并初始化struts应用程序,并接收所有的用户请求。然后将请求的处理指派给RequestProcessor类。RequestProcessor首先选择与请求关联的Action Form Bean,然后把表单中提交的数据存储在Action Form Bean 里,在验证Action Form Bean.最后选择在配置文件中对应的action类来调用模型组件,来执行请求。并把处理结果,通过视图组件响应给客户。

ActionServlet —> RequestProcessor —> Action
RequestProcessor作为接收请求和执行请求的桥梁。

四. ActionServlet类
org.apache.struts.action.ActionServlet 类是继承HttpServlet类。既然继承HttServlet类,也就有
init(),doGet(),doPost(),destroy()方法。所有特定的用户请求(在web.xml文件url-pattern元素中配置)都由ActionServlet接收,然户交给RequestProcessor类处理,在根据struts-config.xml配置文件,把请求交给相应的Action来执行。

ActionServlet 使用process(request,response)自身方法来接收请求。在process方法中调用RequestPrcessor类的process方法。通过RequestProcessor类的process方法从struts-config.xml配置文件读取请求的URI,然后根据URI查找匹配的<action>元素。并根据<action>元素的name属性,查找相关联的<form-bean>元素,确定要用到的Action Form.获得Form Bean 的名称后,process方法创建由<form-bean>属性type命名Action Form的一个实例,然后用提交的数据填充,并调用Action Form的validata()方法验证提交的值。
此后才真正的开始处理请求,它首先从<action>元素的type属性获得Action类的一个实例,然后调用execute()方法返回一个Action Forward对象,最后确定应用程序下一个视图。
struts-config.xml文件默认位置在WEB-INF下,它也可用任何名称放在放置WEB-INF或子目录任何位置。
只要在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>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

而Action Servlet 将根据URL的模式截取HTTP请求。
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
只要提交.do的请求,都由ActionServlet接收。

五. RequestProcessor类
RequestProcessor类处理ActionServlet类接收到所有用户的特定(根据web.xml中url-pattern截取特定的请求)请求。将请求分解成多个任务,分别用不同的方法执行。
RequestProcessor类的部分方法
processPath() 获取客户端的请求路径
processMapping() 根据请求路径获取映射信息
processRoles() 检查用户角色是否允许访问资源
processForward() 处理<action-mapping>元素的forward以匹配当前请求的路径
processValidata() 调用Form Bean 的Validata()方法
processLocale() 位请求选择一个语言环境
processActionCreate() 实例化当前<action>元素type属性指定类的实例
processActionPerform() 调用action的perform()或execute()方法
processPreprocess() 告诉控制器调用此方法后,是否继续处理请求

如果开发人员要扩展ActionServlet类 ,一般是从RequestProcessor类着手。
要开发自己RequestProcessor类应遵循以下几步。
1.创建一个继承自org.apache.struts.action.RequestProcessor的类,在该类中显示定义一个无参,方法体为空的构造函数。
2.重写所需的方法。
3.修改struts-config.xml文件,在<action-mapping>元素后面加上一个<controller>的元素,用以指定自定义的RequestProcessor类。
<controller>元素的属性
processorClass 属性指定处理请求java类的完整类名。默认值是org.apache.struts.action.RequestProcessor。也可以设置成自定义的类,该类必须继承RequestProcessor。
contentType 指定http响应的内容内类和编码方式
local 是否把local对象保存到当前用户session中

六.Action类
Action类是用户请求和业务逻辑之间的桥梁。开发者可以创建Action的一个或多个子类,在子类中加入所需的业务逻辑代码,准备处理不同的页面请求。Action类调用execute()方法处理请求,并返回ActionForward对象,已确定控制权转交到何处提供响应。
execute()方法的各种参数含义
ActionMapping 是对struts-config.xml文件的映射
ActionForm 与当前请求相关联Action Form Bean
HttpServletRequest 指http请求对象
HttpServletResponse 指http响应对象

七.ActionForward 类
ActionForward对象映射是配置文件struts-config.xml中<forward>元素,封装了响应页面的URI
<forward>元素的属性
name 指定ActionForward的逻辑名,ActionForward根据findForward()方法查找相应的ActionForward对象
path 指定ActionForward的URI
redirect 指定页面的跳转方式。默认值为false(forward),如果位true(redirect)
而ActionForward类的对象是由ActionMapping类的findForward()方法产生的。在服务器启动初始化,会对struts-config.xml的配置信息初始化,服务器会针对每个<action>元素创建一个与之对应的ActionMapping实例,该实例作为参数传递给Action的execute()方法。ActionMapping的映射信息存储在<ation-mapping>元素中

九.struts-config.xml的DTD
<!ELEMENT struts-config(data-source?,form-bean?,global-exceptions?,global-forwards?,action-mapping?controller?,message-resource?,plug-in?)>
在struts配置文件中,必须按照DTD指定的顺序来配置,元素不能颠倒顺序。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: