Struts1.X 工作流程
初始化应用服务器(init Application Server)
步骤一:Request——>服务器接收请求后交给ActionServlet处理
步骤二:ActionServlet——>去配置文件(已加载到内存)找相应的FromBean和Action
步骤三:FromBean——>ActionServlet将请求数据填入FromBean(如果没FromBean实例将创建一个,没配置则返回错误)
步骤四:Action——>ActionServlet将请求动作和FromBean对象一起塞进来,要求干活
步骤五:Service——>Action接收动作后进行验证、检查数据等初步工作,然后交给Service处理业务逻辑
步骤六:DAO——>Service处理业务逻辑过程中需要数据库操作则调用DAO
步骤七:Action——>Service将业务逻辑处理完毕,将整理好的数据或者异常提交Action进行转发控制
步骤八:ActionServlet——>Action将处理结果与数据交给ActionServlet,根据配置文件查找跳转目标页面并实际操作
步骤九:Response——>ActionServlet将页面数据响应给请求发送者
弄一个测试示例包含以下东东
四个页面:index.jsp logon.jsp show.jsp error.jsp
两个Form:RootForm.java LogonForm.java
两个Action:RootAction.java LogonForm.java
index.jsp——>logon.jsp
纯粹跳转,示例用配置实现公共跳转
logon.jsp——>show.jsp
通过提交表单到Action,然后设置conf中的Action配置进行跳转
首先的确定环境是否完整齐全:(用MyEclipse弄了,懒得自己配置,用的是JDK1.5和Struts1.2.6)
1.构建Web Project
New——>Web Project——>示例名称为“Template_Struts_1_2”
项目名最好别用1.2,因为package包以“.”区分,改Base package名的时候不好弄
2.为项目添加Struts 1.2支持
MyEclipse——>Project Capabilities——>Add Struts Capabilities
配置文件路径不改 = /WEB-INF/struts-config.xml
Struts版本不改 = 1.2
ActionServlet名不改 = action
URL后缀样式不改 = *.do
改Base package名 = com.Template_Struts_1_2.struts
记得选上安装Struts TLD
3.将项目编码设置为UTF-8,省得中文乱码
4.配置一个应用服务器,我用的是自己配置到MyEclipse去的Tomcat6.0
PS:用Project Capabilities构建的项目包含无用包挺多的,如果实际用还是自己选包到lib再引入吧。
弄好环境,开始编码:
1.改写index.jsp
将WEB-INF下的‘struts-html.tld’引入,改引用名为‘html’
在<BODY>里面加入<html:link forward="logonpage"></html:link>
也就是加入一个跳转链接
好了?好了!
PS:要看全代码后面有;
2.添加logon.jsp
在WebRoot目录下创建一个专门放页面的目录‘page’,然后在里面创建一个新JSP页面
然后?不动。先完成index.jsp的跳转再写其它。
3.修改struts-config.xml文件
找到<global-forwards />,这个是全局跳转选项,登录入口有可能多个页面都有,那就把它设为全局跳转
修改为
<global-forwards>
<forward name="logonpage" path="/page/logon.jsp"></forward>
</global-forwards>
记得<forward>标签的name值得跟index.jsp里<html:link>标签的forward值一致
4.部署、测试!
OK,我是成功的,这次....其实写这个之前失败过好几次的,哈哈
大多都失败在配置不对应,少个‘/’,写错字母之类,细心点就应该没问题的。
5.改写logon.jsp
同样引入‘struts-html.tld’并改引用名为‘html’
在<BODY>中加上以下四个标签
<html:text property="username" />
<html:password property="password" />
<html:submit value="提交" />
<html:reset value="重置" />
这四个是什么不用说了吧?然后在这四个标签外面再包一个<html:form>
<html:form action="logon.do" method="post" focus="logonForm">
OK,logon.jsp也搞定。
6.添加Form
在添加LogonForm之前习惯性加一个RootForm,要知道自定义Form是要继承org.apache.struts.action.ActionForm才能用的,我们用RootForm去继承org.apache.struts.action.ActionForm,然后自定义Form继承RootForm,在ActionForm与自定义Form中间加一层通用缓冲,万一当有某些需求要Form大量修改的时候或者一些常用帮助方法(例如:编码转换、数据检查)需要添加的时候,RootForm就很有用了。
RootForm继承org.apache.struts.action.ActionForm,然后暂时什么都不做。
LogonForm继承RootForm
LogonForm添加两个String类型参数:username和password,并为这两个参数添加set and get方法
7.添加Action
同样添加RootAction
RootAction继承org.apache.struts.action.Action
LogonAction继承RootAction
LogonAction添加execute方法,里面有两个Forward,SUCCESS和ERROR,
并在execute方法里面虚拟一个用户,用户名为aaa,密码为bbb,如果是该用户登录则跳转SUCCESS,否则跳转ERROR
8.添加show.jsp和error.jsp
其实就是两个空的JSP,用于测试是否登录成功。
9.修改struts-config.xml配置文件
在全局跳转添加ERROR跳转<forward name="error" path="/page/error.jsp"></forward>
在<form-beans>里添加LogonForm
<form-bean name="logonForm" type="com.Template_Struts_1_2.struts.form.LogonForm"></form-bean>
在<action-mappings>里添加LogonAction
<action path="/logon"
name="logonForm"
type="com.Template_Struts_1_2.struts.action.LogonAction"
scope="request"
validate="true">
<forward name="success" path="/page/show.jsp"></forward>
</action>
配置解释:
//配置FormBean,type = 包名.类名,指向FormBean的路径
<form-beans>
<form-bean name="logonForm" type="com.Template_Struts_1_2.struts.form.LogonForm"></form-bean>
</form-beans>
//配置Action映射,type = 包名.类名,指向Action的路径,
<action-mappings>
<action path="/logon"
name="logonForm"
type="com.Template_Struts_1_2.struts.action.LogonAction"
scope="request"
validate="true">
<forward name="success" path="/page/show.jsp"></forward>
</action>
</action-mappings>
1.FormBean必须是org.apache.struts.action.ActionForm或者DynaActionForm的子类
2.Action必须是org.apache.struts.action.Action的子类
3.在配置文件<form-bean>和<action>中type参数 = 包名.类名,指向Form或者Action的路径,千万别写错
4.配置文件<action>参数path必须与页面<html:form>参数action的值一致
5.页面<html:form>参数action值‘xxx.do’在配置文件<action>中则应写为‘/xxx’
6.配置文件<action>参数name必须与<form-bean>参数name值一致
7.配置文件<action>参数scope = 范围,有request和session两种
8.配置文件<action>参数validate = 是否验证数据
9.配置文件<action>参数input = 属性,表明校验方法返回Falsh时,将控制发生到哪里,不写也行,将根据<action>中<forward>跳转
index.jsp全代码如下:
logon.jsp代码如下:
show.jsp的BODY代码如下:
error.jsp的BODY代码如下:
LogonForm代码如下:
LogonAction代码如下:
struts-config.xml配置文件代码如下:
其它配置说明:
//单独异常处理配置
<global-exceptions>
<exception key="error.email.invalid" type="java.lang.Exception" handler="exceptions.EmailException"/>
</global-exceptions>
1.exceptions.EmailException必须继承org.apache.struts.action.ExceptionHandler而且要覆盖execute方法
//配置控制器
<controller maxFileSize="2M" contentType = “text/html” nocache = “false” />
maxFileSize = 上传文件限定大小,只能整数显示,不能有小数点
nocache = 是否缓存,默认为true不缓存
contentType = 发送内容默认格式
//信息资源文件使用
<message-resources parameter="struts.application" key="global" />
parameter = 文件路径 = 包名.文件名
key = 文件标识,不设key属性则为默认资源文件,已设置文件标识的资源文件调用时需要注明标识
样例:<bean:message key="key.msg.submit" bundle=”global”/>
//配置插件
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validator.xml" />
</plug-in>
class = 插件类路径
property = 参数名
value = 参数值
请问各位高手大大,Struts1.X中Action里的execute()和perform()方法啥关系?
什么时候该用execute?什么时候该用perform?
而且我看了一下Struts1.2.6的源代码,在Action类里面只有execute()却并没有perform()方法的存在,不知道是不是版本问题,有知道的朋友请告诉我,谢谢!