Struts 学习随笔
Struts 是基于 MVC 设计模式的框架技术,现在的流行使用是 struts1.1 and struts1.2, 使用开发框架可以更好地提高开发效率。
Struts 的工作流程
1. 检索和用户请求匹配的 ActionMapping 实例,如果不存在,就返回用户请求中路径无效的信息。
2. 如果 ActionForm 实例不存在,就创建一个 ActionForm 对象,把客户提交的表单数据保存到 ActionForm 对象中。
3. 根据配置信息决定是否需要表单验证。如果需要验证,就调用 ActionForm 的 validate() 方法。
4. 如果 ActionForm 的 validate() 方法返回 null 或返回一个不包含 ActionMessage 的 ActionErrors 对象,就表示表单验证成功。如果返回一个或多个 ActionMessage 的 ActionErrors 对象,就表示表单验证失败,此时 ActionServlet 将直接把请求转发给包含用户提交表单的 jsp 组件。在这种情况下,不会创建 Action 对象和调用 Action 的 execute() 方法。
5. ActionServlet 根据 ActionMapping 实例包含的映射信息决定将请求转发给哪个 Action 。如果相应的 Action 实例不存在,就先创建这个实例,然后调用 Action 的 execute() 方法。
6. Action 的 execute() 方法返回一个 ActionForward 对象 ,ActionServlet 再把客户请求转发给 ActionForward 对象指向的 jsp 组件 .
7. ActionForward 对象指向的 jsp 组件生成动态网页,返回给客户。
如何用好 struts 框架技术呢?我们应该掌握如下的知识点:
Ø MVC 的两种规范
Ø 配置文件 (struts-config.xml,web.xml)
Ø ActionForm 类及其子类。
Ø ActionForward 类
Ø ActionServlet 类
Ø Action 类
Ø ActionMessages 类
Ø 国际化的问题
Ø struts 验证技术
Ø struts 标签
Ø struts 扩展(略)
Ø struts 与 hibernate 结合使用
逐个击破
MVC 的两种规范
两种 MVC 规范是 JSP Model1 and JSP Model2.
假设访问我们分这么几部分:浏览器, WEB 服务器,应用服务器和数据库,两者不同的是 JSP Model1 WEB 服务器里面只有 JSP 页面和 JavaBean , JSP 既充当 V ,又充当 C 的角色。而 JSP Model2 的 WEB 服务器里有 JSP 、 JavaBean 和 Servlet 。
配置文件 (struts-config.xml,web.xml)
web.xml 文件。
配置 ActionServlet(<servlet>,<servlet-mapping>)
初始化 ActionServlet 的初始化参数 (<init-param> 也就是加载 struts-config.xml)
配置欢迎文件 (<welcome-file-list>)
配置错误处理
<error-page>
<error-code>404</error-code>
<location>/common/404.jsp</location>
</error-page>
配置 struts 标签库 (<tablib>)
struts-config.xml
配置数据库连接 (<data-sources>)
配置实体 (<form-beans>)
配置全局的异常处理 (<globel-exceptions>)
配置全局的转发关系 (<globel-forwards>)
配置映射 (<action-mapping>)
配置本地化文件 (<message-resources>) 实际是为了完成国际化。
配置插件 (<plug-in>)( 略 )
ActionForm 类及其子类。
DTO 数据传输对象,生命周期有两种 request and session,ActionForm 有 validate() 和 reset() 方法,主要说 reset() 方法,针对于 request 级的 ActionForm 类是没有很大含义地,因为它只会被调用一次,里面封装的数据也只是一次使用。主要是对于 session 级的作用是很大的,因为它涉及到多次用到。
DynaActionForm 是 ActionForm 子类 , 有 initialize() 方法 , 实现 DynaActionForm 的方法 :
<form-bean name=”loginForm” type=”org.apache.struts.action.DynaActionForm”>
<form-property initial=”alex” name=”userName” type=”java.lang.String”/>
</form-bean>
两种 ActionForm 做比较 .
初始化: DynaActionForm 是通过实现化,然后覆盖其父类的方法 reset() 在这个方法中
调用 initilize() 进行初始化。
验证: DynaActionForm 采用动态的验证方法,在( struts 验证技术中会说到)
使用: DynaActionForm 的所有属性保存在一个 Map 类中 , 通过 get() , set() 方法调用,
如: String email=(String)form.get(“email”);
form.set(“email”,”[email protected]”);
ActionForward 类
( 略 )
ActionServlet 类
属于 struts 控制器组件,包括: ActionServlet,RequestProcessor and Action.
组件完成的任务:
接收用户请求、根据用户请求,调用合适的模型组件来执行相应的业务逻辑、获取业务逻辑执行结果、根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户。
Struts 采用 ActionServlet 和 RequestProcessor 组件进行集中控制,并采用 Action 组件来处理单项业务。
ActionServlet 类在应用生命周期中只创建实例一次。
Action 类
Action 类是用户请求和业务逻辑之间的桥梁。在 RequestProcessor 类预处理请求时,在创建了 Action 的实例后,就调用自身的 processActionPerform() 方法,该方法再调用 Action 类的 execute() 方法。
ActionMessages 类
ActionError 类是 ActionMessage 的子类, struts1.2 放弃 ActionError.
国际化的问题
application_zh.properties 保存一些信息。
如 :error.loginFail=” 登录失败,请输入正确的用户名和密码 ”
ActionMessages errors=new ActionMessages();
Errors.add(“loginfail”,new ActionMessage(“error.loginFail”));
关于乱码的问题:
1. 如果一些网站服务器例如 Tomcat 如果遇到中文乱码问题,可以修改conf目录下的server.xml
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100" debug="0"connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
URIENcoding 设成GBK或GB2312
2. 表单中或传递字符串:本来输入的汉字是正常的,但是提交后再显示出来是乱码,因为提交的一般是 ISO8859编码,所以显示的时候要转成GB2312编码: String S=new String(rs.getString("news").getBytes("gb2312"),"ISO8859_1");
//rs为待转换的字符串
然后使用S字符串的值就可以了
3. 有的服务器端的语言环境如果设成简体中文的也可以解决此类问题
4. 插入数据库中的字符是乱码
看看数据库中支持的是何种编码方式,用类似2中的方式作一下转换即可。
5. 总之,用jsp开发,碰到乱码,你得分析是读的时候发生乱码,还是写的时候发生乱码,用2中的转换,基本就能解决问题,有些时候写的时候做一次转换,例如:
String S=new String(rs.getString("news").getBytes("gb2312"),"ISO8859_1");
//读的时候在转换回来
String S=new String(rs.getString("news").getBytes("ISO8859_1"),"GB2312");
或者把ISO8859-1和GB2312 的位置换一下,自己多试试,就能找到解决问题的办法。
struts 验证技术
前面已讲在 ActionForm 中 validate() 验证。这里主要说在配置中验证技术。所需文件 validation.xml validator-rules.xml 优点:当相同的验证逻辑时,可提高代码的可重用性
struts 标签
struts-bean.tld struts-form.tld struts-html.tld struts-logic.tld struts-nested.tld struts-template.tld struts-tiles.tld 七个标签文件。
struts HTML 标签
基本的标记
struts Bean 标签
用于定义输入输出 javaBean
struts Login 标签
逻辑运算、循环遍历
struts Nested 标签
定义 javaBean 嵌套关系。
曹水生
2005 . 11 . 11 随笔