现在的位置: 首页 > 综合 > 正文

Struts学习随笔

2018年04月27日 ⁄ 综合 ⁄ 共 4236字 ⁄ 字号 评论关闭
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”,”cssseek@163.com”);

 

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嵌套关系

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

抱歉!评论已关闭.