###########################################
## Date: 2007-11-12
## Description: Struts FrameWork day2
## Author: yejf
############################################
如何开发一个Struts 的 ActionForm?
1. 继承于org.apache.struts.action.ActionForm 类
2. 依据请求页面中的form的表单项来写对应的属性
3. 提供默认构造方法和 setter/getter 方法.
如何在 struts-config.xml 文件当中来配置自定义ActionForm?
<form-beans>
<form-bean name="loginForm"
type="com.tarena.struts.form.LoginForm"/>
</form-beans>
注:ActionForm Bean 又叫值对像: VO [Value Object]
它只负责封装请求参数,不做任何的业务相关的动作
POJO: 又叫业务对像: BO [Bussiness Object]
它对应数据库. 后台处理
所以,中间会有一个: BO <==> VO 的互相转换
public class Converter {
public static BO converter(VO vo) {
BO bo = new BO();
bo.setUname(vo.getUname());
bo.setPwd(vo.getPwd));
}
}
----------------------------------------------------
开发一个 完整 Struts 基本应用的步骤:
1. 建立一个WEB应用的目录层次结构
2. 拷贝 $STRUTS-HOME/lib/*.jar 到你的应用的 /WEB-INF/lib 目录下, 并把 *.tld 也拷贝到 /WEB-INF 目录中
如果要使用 struts 标签和EL, 请拷贝 $STRUTS-HOME/contrib/struts-el/lib/*.jar 到你的应用的 /WEB-INF/lib 目录下
*.tld 文件也要拷贝到 /WEB-INF 目录下.
3. 修改 web.xml 文件, 配置一下 Struts的 ActionServlet
4. 再写一个文件 struts-config.xml
// 可选 操作
5. 写一个属性文件, 用来实现国际化,
类似与 JSTL中的 fmt 操作
6. 在struts-config.xml 中配置
<message-resources parameter=""/>
指向属性文件所在路径
7. 创建 ActionForm, 并在 struts-config.xml 文件中配置 form-bean
在 ActionForm 中,可以指定验证逻辑. 重写 validate 方法
如果验证成功, 把ActionForm 传到Action中的 execute() 方法中
如果失败,则直接跳转到在<action input="xxx.jsp"...>标签中 input属性值.
方法调用顺序: 查找或创建 Form, (如果有的话,就不再创建了)
[首先在当前的session范围查找name所指定 attribute, 如找到,就直接返回。
否则,创建一个ActionForm Bean对像,并且把它绑定到scope所指定的范围
再调用 reset 方法
再调用相应的 set 属性方法
最后调用 validate 方法进行验证
=============================================
For each ActionForm bean defined in struts-config.xml file, Controller (ActionServlet)will
Check session scope for an instance of ActionForm bean if the form bean saved as a session scope attribute
If not exists, controller creates one and save it as a corresponds scope attribute
Call corresponding setter method of ActionForm bean for every request parameter whose name corresponds to the name of a property of the bean
If validation required, controller call validate
If validation is correct, controller pass the updated ActionForm bean as a parameter to execute() method of Action class
If validation failed, controller dispatch request to the input jsp
8. 创建自定义的 Action 类, 并在它的 execute 方法中
调用业务逻辑方法. 并catch 业务异常, 做出相应的回应
9. 在struts-config.xml文件中配置 action
10. 重启服务,进行测试
注意事项:
===============================================================================================
如何保持多线程安全?
Struts Action 同Servlet一样,也存在着线程安全问题.
在内部,Struts会维护并重用ACTION 实例去服务于请求.
Action's execute( )方法极可能是同时被多个并发请求线程共享,
你也许想尝试去同步execute() 方法,但是应该避免这种尝试,
因为同步execute() 方法 将大大降低执行效率. (因为有很多业务方法是没有同步问题的.)
所以说:在你的应用中,你需要同步的行为,但最好在服务层(业务层[biz/service] 来执行同步.
=====================================================================================
=================================
chapter 04: Struts Tag Library
struts 中有五大类的标签:
bean 标签
1.访问HTTP请求信息或JSP隐藏对象的Bean标签
<bean:cookie/> cookie
id: 定义一个javax.servlet.http.Cookie类型的变量,存放在page范围
name:指定Cookie的名字
value:指定Cookie的默认值,如果指定的Cookie不存在,就使用此默认值
<bean:header/> header,
id: String 类型,存放在 page 范围
name: 指定要检索的 Header 信息,如; Accept-Language
<bean:parameter/> --- param, paramValues
id: String 类型,存放在 page 范围
name: 指定请求参数名.
value: 请求参数的默认值
multiple: 任意字符, 表示可以接收一个字符数组
<bean:page/> pageContext
id:定义一个引用隐含对象的变量,存放在 page 范围
property: 指定隐含对象的名字,从 application,config,request,response,session中选一个
2.用于访问Web应用资源的Bean标签
<bean:message/>
key: 指定在 资源文件中的key
bundle: 可选
name: 可选
property: 可选
<bean:resource/>
id:
name: 指定WEB资源的路径
input:任意字符.表示结果是字符还是 java.io.InputStream
<bean:struts/>
id:
formbean: <form-beans><form-bean></form-beans>
forward: <global-forwards><forward></global-forwards>
mapping: <action>
<bean:include/> 与 <jsp:include/>相似.
3. 用于定义或输出JavaBean的Bean标签
<bean:define id="" name="" value="" property=""/>
<bean:write/> 输出某个bean或它的属性的内容
<bean:size/> 获得Map 或 Collection 集合的长度
html 标签
<html:errors/> *
<html:messages/> *
<html:html/>
<html:form/>
<html:text/>
<html:password/>
<html:radio/>
<html:checkbox/>
<html:select>
<html:option/>
<html:options />
</html:select>
<html:file/>
<html:link/>
logic 标签
1. 进行比较运算的Logic标签
<logic:equal>
<logic:notEqual>
<logic:greaterEqual>
<logic:greaterThan>
<logic:lessEqual>
<logic:lessThan>
2. 进行字符串匹配的Logic标签
<logic:match>
<logic:notMatch>
3. 判断指定内容是否存在的Logic标签
<logic:empty>
<logic:notEmpty>
<logic:present> 判断指定的安全角色,用户,Cookie,HTTP请求Header
或JavaBean是否存在?
<logic:notPresent>
<logic:messagePresent>
注:当把 message=true,设为true时, name属性指定的值是无效的,
此时它的key=Globals.MESSAGE_KEY.
否则的话,在request中检索,并以name的值为KEY,如果没有指定name,
则默认的属性KEY为Globals.ERROR_KEY
<logic:messageNotPresent>
4. 进行循环遍历的Logic标签
<logic:iterate>
5. 进行请求转发或重定向的Logic标签
<logic:forward>
name指定的值与<global-forwards>中的指定一样
<logic:redirect>
同 <html:link>
tiles 标签
<tiles:insert />
nested 标签
struts Tag 与 JSTL
操作技巧: 请直接使用 uri 来绝对定位,不再使用如下的方式
为防止在 /WEB-INF 目录中存在过多的文件,可以把struts相关的*.tld
文件存放在一个子目录中,这样方便管理和维护
在 web.xml 文件中 加入以下的 配置
...
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts/struts-html.tld</taglib-location>
</taglib>
...
=================================================
chapter 05: Internationalization I18N 国际化支持
步骤:
1. 创建一个属性文件, ApplicationResources.properties
2. 然后为你要支持的各种语言提供一个 ApplicationResources_xx.properties
文件,注意,此文件要使用 native2ascii 命令转换成 unicode 编码格式.
xx 代表第一种语言的代号,如 zh 表示中文. en 表示英文.
3. 在 struts-config.xml 文件中进行配置:
<message-resources parameter="struts.conf.ApplicationResources"/>
4. 然后在 你的JSP页面中就可以使用: <html:errors/> 或 <html:messages id="" property=""/>, <bean:message/>
标签进行读取了.
=========================================
四,异常处理
业务逻辑的验证
1. 方式一 [编程式]
自已在 Action当中来做,生成 ActionMessages
并调用 saveErrors 方法来完成
2. 方式二 [申明式 异常处理]。
在Action当中,直接抛出异常
并在struts-config.xml当中来配置这个异常。
如下:
在<action> 标签中 配置一个 <exception key="" path="" type="" scope="" />
来表明如果 Action中的execute方法抛出异常,则由Struts提供的一
个默认的异常处理类: ExceptionHandler 来处理.
<exception 中的四个属性分别代表:
key: 在资源文件中配好的一个KEY,用来指定产生异常的字符串
type: 在execute 方法中抛出的异常类型
path: 需要跳转去的页面
scope: 产生的异常信息存放的范围
Struts异常处理的分析?
Struts提供了一个默认的异常处理类:
ExceptionHandler
它有一个 execute 方法,如下:
public ActionForward execute(
java.lang.Exception ex,
ExceptionConfig ae,
ActionMapping mapping,
ActionForm formInstance,
HttpServletRequest request,
HttpServletResponse response)
throws javax.servlet.ServletException
1. ActionServlet
| RequestProcessor
-----> .process(request,response)
| . . .
| processActionPerform
----------> Action
| .execute 方法
--------|
|抛出异常
|
<----------------------------------
\ RequestProcessor会使用Struts提供的
| 默认的异常处理类:ExceptionHandler
| 并且调用它的execute方法来处理异常
|--------
.processException
.getExceptionHandler
.execute
开发一个自定义的异常处理类:
1. 继承于Struts的默认的异常处理类:ExcpetionHandler
2. 重写execute 方法
3. 在配置异常时,使用 handler属性来指定自定义的
异常处理类
## Date: 2007-11-12
## Description: Struts FrameWork day2
## Author: yejf
############################################
如何开发一个Struts 的 ActionForm?
1. 继承于org.apache.struts.action.ActionForm 类
2. 依据请求页面中的form的表单项来写对应的属性
3. 提供默认构造方法和 setter/getter 方法.
如何在 struts-config.xml 文件当中来配置自定义ActionForm?
<form-beans>
<form-bean name="loginForm"
type="com.tarena.struts.form.LoginForm"/>
</form-beans>
注:ActionForm Bean 又叫值对像: VO [Value Object]
它只负责封装请求参数,不做任何的业务相关的动作
POJO: 又叫业务对像: BO [Bussiness Object]
它对应数据库. 后台处理
所以,中间会有一个: BO <==> VO 的互相转换
public class Converter {
public static BO converter(VO vo) {
BO bo = new BO();
bo.setUname(vo.getUname());
bo.setPwd(vo.getPwd));
}
}
----------------------------------------------------
开发一个 完整 Struts 基本应用的步骤:
1. 建立一个WEB应用的目录层次结构
2. 拷贝 $STRUTS-HOME/lib/*.jar 到你的应用的 /WEB-INF/lib 目录下, 并把 *.tld 也拷贝到 /WEB-INF 目录中
如果要使用 struts 标签和EL, 请拷贝 $STRUTS-HOME/contrib/struts-el/lib/*.jar 到你的应用的 /WEB-INF/lib 目录下
*.tld 文件也要拷贝到 /WEB-INF 目录下.
3. 修改 web.xml 文件, 配置一下 Struts的 ActionServlet
4. 再写一个文件 struts-config.xml
// 可选 操作
5. 写一个属性文件, 用来实现国际化,
类似与 JSTL中的 fmt 操作
6. 在struts-config.xml 中配置
<message-resources parameter=""/>
指向属性文件所在路径
7. 创建 ActionForm, 并在 struts-config.xml 文件中配置 form-bean
在 ActionForm 中,可以指定验证逻辑. 重写 validate 方法
如果验证成功, 把ActionForm 传到Action中的 execute() 方法中
如果失败,则直接跳转到在<action input="xxx.jsp"...>标签中 input属性值.
方法调用顺序: 查找或创建 Form, (如果有的话,就不再创建了)
[首先在当前的session范围查找name所指定 attribute, 如找到,就直接返回。
否则,创建一个ActionForm Bean对像,并且把它绑定到scope所指定的范围
再调用 reset 方法
再调用相应的 set 属性方法
最后调用 validate 方法进行验证
=============================================
For each ActionForm bean defined in struts-config.xml file, Controller (ActionServlet)will
Check session scope for an instance of ActionForm bean if the form bean saved as a session scope attribute
If not exists, controller creates one and save it as a corresponds scope attribute
Call corresponding setter method of ActionForm bean for every request parameter whose name corresponds to the name of a property of the bean
If validation required, controller call validate
If validation is correct, controller pass the updated ActionForm bean as a parameter to execute() method of Action class
If validation failed, controller dispatch request to the input jsp
8. 创建自定义的 Action 类, 并在它的 execute 方法中
调用业务逻辑方法. 并catch 业务异常, 做出相应的回应
9. 在struts-config.xml文件中配置 action
10. 重启服务,进行测试
注意事项:
===============================================================================================
如何保持多线程安全?
Struts Action 同Servlet一样,也存在着线程安全问题.
在内部,Struts会维护并重用ACTION 实例去服务于请求.
Action's execute( )方法极可能是同时被多个并发请求线程共享,
你也许想尝试去同步execute() 方法,但是应该避免这种尝试,
因为同步execute() 方法 将大大降低执行效率. (因为有很多业务方法是没有同步问题的.)
所以说:在你的应用中,你需要同步的行为,但最好在服务层(业务层[biz/service] 来执行同步.
=====================================================================================
=================================
chapter 04: Struts Tag Library
struts 中有五大类的标签:
bean 标签
1.访问HTTP请求信息或JSP隐藏对象的Bean标签
<bean:cookie/> cookie
id: 定义一个javax.servlet.http.Cookie类型的变量,存放在page范围
name:指定Cookie的名字
value:指定Cookie的默认值,如果指定的Cookie不存在,就使用此默认值
<bean:header/> header,
id: String 类型,存放在 page 范围
name: 指定要检索的 Header 信息,如; Accept-Language
<bean:parameter/> --- param, paramValues
id: String 类型,存放在 page 范围
name: 指定请求参数名.
value: 请求参数的默认值
multiple: 任意字符, 表示可以接收一个字符数组
<bean:page/> pageContext
id:定义一个引用隐含对象的变量,存放在 page 范围
property: 指定隐含对象的名字,从 application,config,request,response,session中选一个
2.用于访问Web应用资源的Bean标签
<bean:message/>
key: 指定在 资源文件中的key
bundle: 可选
name: 可选
property: 可选
<bean:resource/>
id:
name: 指定WEB资源的路径
input:任意字符.表示结果是字符还是 java.io.InputStream
<bean:struts/>
id:
formbean: <form-beans><form-bean></form-beans>
forward: <global-forwards><forward></global-forwards>
mapping: <action>
<bean:include/> 与 <jsp:include/>相似.
3. 用于定义或输出JavaBean的Bean标签
<bean:define id="" name="" value="" property=""/>
<bean:write/> 输出某个bean或它的属性的内容
<bean:size/> 获得Map 或 Collection 集合的长度
html 标签
<html:errors/> *
<html:messages/> *
<html:html/>
<html:form/>
<html:text/>
<html:password/>
<html:radio/>
<html:checkbox/>
<html:select>
<html:option/>
<html:options />
</html:select>
<html:file/>
<html:link/>
logic 标签
1. 进行比较运算的Logic标签
<logic:equal>
<logic:notEqual>
<logic:greaterEqual>
<logic:greaterThan>
<logic:lessEqual>
<logic:lessThan>
2. 进行字符串匹配的Logic标签
<logic:match>
<logic:notMatch>
3. 判断指定内容是否存在的Logic标签
<logic:empty>
<logic:notEmpty>
<logic:present> 判断指定的安全角色,用户,Cookie,HTTP请求Header
或JavaBean是否存在?
<logic:notPresent>
<logic:messagePresent>
注:当把 message=true,设为true时, name属性指定的值是无效的,
此时它的key=Globals.MESSAGE_KEY.
否则的话,在request中检索,并以name的值为KEY,如果没有指定name,
则默认的属性KEY为Globals.ERROR_KEY
<logic:messageNotPresent>
4. 进行循环遍历的Logic标签
<logic:iterate>
5. 进行请求转发或重定向的Logic标签
<logic:forward>
name指定的值与<global-forwards>中的指定一样
<logic:redirect>
同 <html:link>
tiles 标签
<tiles:insert />
nested 标签
struts Tag 与 JSTL
操作技巧: 请直接使用 uri 来绝对定位,不再使用如下的方式
为防止在 /WEB-INF 目录中存在过多的文件,可以把struts相关的*.tld
文件存放在一个子目录中,这样方便管理和维护
在 web.xml 文件中 加入以下的 配置
...
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts/struts-html.tld</taglib-location>
</taglib>
...
=================================================
chapter 05: Internationalization I18N 国际化支持
步骤:
1. 创建一个属性文件, ApplicationResources.properties
2. 然后为你要支持的各种语言提供一个 ApplicationResources_xx.properties
文件,注意,此文件要使用 native2ascii 命令转换成 unicode 编码格式.
xx 代表第一种语言的代号,如 zh 表示中文. en 表示英文.
3. 在 struts-config.xml 文件中进行配置:
<message-resources parameter="struts.conf.ApplicationResources"/>
4. 然后在 你的JSP页面中就可以使用: <html:errors/> 或 <html:messages id="" property=""/>, <bean:message/>
标签进行读取了.
=========================================
四,异常处理
业务逻辑的验证
1. 方式一 [编程式]
自已在 Action当中来做,生成 ActionMessages
并调用 saveErrors 方法来完成
2. 方式二 [申明式 异常处理]。
在Action当中,直接抛出异常
并在struts-config.xml当中来配置这个异常。
如下:
在<action> 标签中 配置一个 <exception key="" path="" type="" scope="" />
来表明如果 Action中的execute方法抛出异常,则由Struts提供的一
个默认的异常处理类: ExceptionHandler 来处理.
<exception 中的四个属性分别代表:
key: 在资源文件中配好的一个KEY,用来指定产生异常的字符串
type: 在execute 方法中抛出的异常类型
path: 需要跳转去的页面
scope: 产生的异常信息存放的范围
Struts异常处理的分析?
Struts提供了一个默认的异常处理类:
ExceptionHandler
它有一个 execute 方法,如下:
public ActionForward execute(
java.lang.Exception ex,
ExceptionConfig ae,
ActionMapping mapping,
ActionForm formInstance,
HttpServletRequest request,
HttpServletResponse response)
throws javax.servlet.ServletException
1. ActionServlet
| RequestProcessor
-----> .process(request,response)
| . . .
| processActionPerform
----------> Action
| .execute 方法
--------|
|抛出异常
|
<----------------------------------
\ RequestProcessor会使用Struts提供的
| 默认的异常处理类:ExceptionHandler
| 并且调用它的execute方法来处理异常
|--------
.processException
.getExceptionHandler
.execute
开发一个自定义的异常处理类:
1. 继承于Struts的默认的异常处理类:ExcpetionHandler
2. 重写execute 方法
3. 在配置异常时,使用 handler属性来指定自定义的
异常处理类
相关推荐
根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...
### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...
首先,Struts 1.3.8 是 Struts 1.x 系列中的一个稳定版本,它引入了许多改进和修复,以增强性能和稳定性。这个框架的核心设计目标是将业务逻辑与表现层分离,通过 Action 和 Form Beans 实现控制器功能,同时利用 ...
### Struts2.1学习笔记 #### Struts2的来源与优点 - **来源**:Struts2是在WebWork2的基础上发展起来的,它继承了WebWork2的优点,并且进行了改进,使其更适合现代Web应用程序的需求。与Struts1相比,Struts2的...
这个版本的学习笔记主要集中在 Struts 框架的核心概念、架构和实际应用上。在深入学习 Struts 1.3.8 时,我们需要了解以下几个关键知识点: 1. **MVC设计模式**:Struts 是 Model-View-Controller (MVC) 设计模式的...
### Struts2培训笔记 #### 一、Struts2简介 **MVC框架**:Struts2是一个基于Java的企业级Web应用开发框架,遵循MVC(Model-View-Controller)设计模式。 - **M(Model)**:业务逻辑处理部分,通常指与数据库交互...
"struts2学习笔记(一) ——struts2与spring2_0的集成 - 一嗑立扑死 - CSDN博客.mht"可能详细讨论了如何将Struts2与Spring 2.0版本集成,包括Action的配置和依赖注入的使用。而"Struts2与Spring的结合 - Naviler的...
### Java常用框架学习笔记 #### Hibernate ##### 1.1 Hibernate 实现数据库操作步骤 - **导入所需的Jar包**:为了使用Hibernate框架,首先需要在项目中导入Hibernate库。这通常意味着添加一系列与Hibernate相关的...
Struts1.x采用配置文件定义动作映射,而Struts2则提供了更灵活的注解配置和拦截器机制。 【Hibernate】:Hibernate是一个对象关系映射(ORM)框架,它允许Java开发者以面向对象的方式来操作数据库。通过XML或注解...
6. **学习笔记**:可能涵盖Spring的基本概念、配置、最佳实践、常见问题等,帮助学习者系统地掌握Spring知识。 在"新建文件夹"中,可以预期找到上述知识点的具体实现或解释。这些资料对于初学者或者希望深化Spring...
通过这份笔记,我们能够深入了解Java语言的基础特性、面向对象的设计原则以及一系列高级框架的应用。此外,还简要介绍了Linux/Unix系统的一些基本操作指令。 #### Java 核心知识点 1. **Core Java** - **基础...