Struts
Struts=Struts核心类+Struts配置文件+Struts标签库
Struts核心类:
ActionServlet 中央控制器
ActionForm 显示模块数据
ActionMapping 帮助控制器将请求映射到操作
ActionForward 用来指示操作转移的对象
ActionError 用来存储和回收错误
Structs配置文件:
ApplicationResources.properties 存放本地化信息和标签
Struts-config.xml 存放控制器所需的配置文件
Structs标签库:
Struts-html.tld 扩展HTML Form的jsp标签
Struts-bean.tld 扩展处理JavaBean的jsp标签
Struts-logic.tld 扩展测试属性值的jsp标签
//在struts-config.xml中,每一个Action的映射信息都通过一个<Action>元素来配置,这些配置信息在系统启动时被读入内存,
//在内存中,每一个<Action>元素都对应一个org.acache.struts.action.ActionMapping类的实例
//一个用户的请求是通过ActionServlet来处理的转发的。
Struts工作流程:
对于采用Struts框架的Web应用,在WEB应用启动时就会加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放在各种配置对象中,例如:Action的映射信息存放在ActionMapping对象中。
(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。
(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
(3)根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。
(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。如果ActionForward的validate()方法返回一个包含一个或多个ActionMessage的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含用户提交表单的JSP组件。在这种情况下,不会在创建Action对象并调用Action的execute()方法。
(5)ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action.如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。
(6)Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件
(7)AcitonForward对象指向的JSP组件生成动态网页,返回给客户。
-------------------------------web.xml配置文件-----------------------------------
配置一个servlet,名字为action,类为org.apache.struts.action.ActionServlet
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
定义servlet的初始参数config,用来设置struts配置文件的路径
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
设置该servlet在web应用启动时被加载次序,数值越小越先加载,如果为负或没有设置,就在首次访问该servlet时被加载
<load-on-startup>0</load-on-startup>
配置一个servlet映射, *do表示ActionServlet只负责处理.do结尾的URL
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
----------------------------Struts-config.xml配置文件------------------------------
<struts-config>
<data-sources>
<data-source type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="driverClassName" value="com.mysql.jdbc.Driver" />
<set-property property="url" value="jdbc:mysql://localhost:3306/member?characterEncoding=gb2312" />
<set-property property="username" value="root" />
<set-property property="password" value="root" />
<set-property property="minActive" value="2" />
<set-property property="maxActive" value="20" />
<set-property property="defaultAutoCommit" value="true" />
</data-source>
</data-sources>
配置数据源,<data-sources>内可设置多个<data-source>。每个<data-source>用来配置一个数据源,type属性指定该数据源的实现类,在该标签体内通过<set-property>来配置数据源的各种属性。
<form-beans>
<form-bean name="addMemberForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="name" type="java.lang.String" />
<form-property name="password" type="java.lang.String" />
</form-bean>
<form-bean name="loginForm" type="com.struts.form.LoginForm"/>
</form-beans>
配置ActionForm Bean,在<form-beans>中可以有多个<form-bean>。<form-bean>用来设置ActionForm Bean。<form-bean>共有两个属性:name(为当前的ActionForm Bean指定一个供访问的名字),type(指出当前的ActionForm Bean的完整类)。如果要配置动态ActionForm 的话,可以使用<form-property>来设置表单的属性,<form-property>共有3个属性:name(表单属性的名称),type(表单属性的值的类型),initial(该属性的初始值)
<global-exceptions>
<exception key="global.error" path="/err.jsp" scope="request" type="java.sql.SQLException"/>
</global-exceptions>
配置全局异常处理,key(消息资源文件中定义的消息key),path(异常发生时的转发路径),scope(指定ActionMessage实例存放的范围),type(所需处理的异常类名)
<global-forwards>
<forward name="index" path="/index.jsp" />
<forward name="add" path="/addMember.jsp" />
</global-forwards>
配置全局转发,name(转发路径的逻辑名),path(转发或重定向的URI,以"/"开头),redirect(请求转发:true,重定向:false)
<action-mappings>
<action attribute="loginForm" input="/login.jsp" name="loginForm" path="/login" scope="request" type="com.struts.action.LoginAction">
<forward name="success" path="/index.jsp"/>
</action>
</action-mappings>
<action>用于配置一个Action,在<action>中可使用<forward>来为该Action设置一个请求转发。<action>的属性包括:
attribute(设置与当前Action相关联的ActionForm Bean的名称),input(指定包含输入表单的URL路径,表单验证失败时,请求会被转发到该URL中),name(指定一个在<form-bean>中定义过的该Action关联的名字),path(指定访问Action的路径,以"/"开头),scope(指定ActionForm Bean的存在范围),type(指定Action类的完整类名),vaildate(指定是否要先调用ActionForm Bean的vaildate()方法,默认为true)
<message-resources parameter="com.struts.ApplicationResources" />
为struts框架设置一个消息资源绑定
</struts-config>