以java平台为基础,专注项目管理、关注电子商务
揽住母亲的肩头,敬父亲一杯酒,对爱的女人说“我爱你”,和另外一个男人打架,不要打女人,有一个自己的孩子,年轻的时候去漂泊,有自己的一份事业.

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

 

 

 

 

 

 

                                                                                                         曹水生

                                                                                                  2005 . 11 . 11 随笔

posted on 2006-03-22 20:29 cssseek 阅读(591) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 

<2006年3月>
日一二三四五六
2627281234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(3)

随笔分类

随笔档案

友情链接

最新随笔

搜索

  •  

最新评论

阅读排行榜

评论排行榜