- 浏览: 517218 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
一。模型驱动
Struts2 可以把请求参数放在 action 中 , 也可以像 Struts1 一样 使用 form 和 action 对应。
模型驱动的含义:使用模型封装了所有的数据,贯穿整个 MVC 流程;模型的作用是封装用户的请求参数和处理结果 。
public class UserBean{ private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
public class LoginAction extends ActionSupport implements ModelDriven<UserBean>{ private UserBean model = new UserBean(); public String execute() throws Exception{ return SUCCESS; } public UserBean getModel(){ return model; } }
使用模型模式,Action 必须实现 ModelDriven 接口,和该接口中的 getModel()方法 ,该方法把 Action 和与之对应的 Model 实例关联起来。
模型驱动的 Action 和 属性驱动的 Action 没有任何区别, Struts2 不要求在 xml 配置 模型对象。( Struts-default.xml 中已经定义了模型驱动的拦截器 )
页面输出:
<!-- 使用表达式输出 Action 实例中 model 属性的 username 属性 --> <s:property value="model.username" />
如果 Action 实例中 没有 username 属性,并且采用了模型驱动模式,系统将自动输出该 Action 关联的 model 的 username 属性值。
以上代码可以改成:
<!-- 使用表达式输出 Action 实例中 model 属性的 username 属性 --> <s:property value="username" />
模型驱动 和 属性驱动 各有利弊。 模型驱动结构清晰,但编程繁琐(需要额外的 JavaBean 来作为模型);属性驱动则编程简洁,但结构不够清晰。
二。Struts2 异常机制 (Struts2 异常处理)
之前都是在 Action 中使用 try catch 捕获异常 , 如果改变异常处理方式就要改代码,这很糟糕。所以最好的办法是通过声明式的方式管理异常处理 。
1.声明式异常捕捉
Struts2 通过 struts.xml 文件中配置 <exception-mapping .../> 处理异常。该元素有2个属性 :
exception : 指定该异常映射所设置的异常类型
result : 指定 Action 出现该异常时,系统转入 result 属性所指向的结果。
根据<exception-mapping .../>位置不同,异常映射又分 2 种:
局部异常映射 :<exception-mapping .../>为 <action> 元素的子元素
全局异常映射 : <exception-mapping .../>为 <global-exception-mappings> 元素的子元素
Action
public class LoginAction extends ActionSupport { private String username; public String execute() throws Exception{ if(username.equals("1")){ throw new MyException("自定义异常!"); } if(username.equals("2")){ throw new java.sql.SQLException("用户名不能为 2 "); } return SUCCESS; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
struts.xml
<package name="lee" extends="struts-default"> <global-results> <result name="sql">/exception.jsp</result> <result name="root">/exception.jsp</result> </global-results> <!-- 定义所有的全局异常映射 --> <global-exception-mappings> <!-- 抛出 SQLException 异常时,转入名为 sql 的 result --> <exception-mapping exception="java.sql.SQLException" result="sql"/> <!-- 抛出 Exception 异常时,转入名为 root 的 result --> <exception-mapping exception="java.lang.Exception" result="root"/> </global-exception-mappings> <!-- 配置 action --> <action name="Login" class="lee.LoginAction"> <result name="success" type="redirectAction"> <!-- 下面配置了一个局部异常映射,当 Action 抛出 lee.MyException 时, 转入名为 my 的结果 --> <exception-mapping exception="lee.MyException" result="my"/> <param name="my">/exception.jsp</param> <param name="error">/error.jsp</param> <param name="success">/welcome.jsp</param> </result> </action> </package>
注意:
全局异常映射的 result 属性值通常不要使用局部结果,局部异常映射的 result 属性值既可以使用全局结果,也可以使用局部结果。
2.输出异常信息
<s:property value="exception" /> : 输出异常对象本身
<s:property value="exceptionStack" /> :输出异常堆栈信息
<s:property value="exception.message" /> : 输出异常对象的 message 属性值
Struts1 只能输出异常对象的 message 属性值,不能输出堆栈信息
三。未知处理器
从struts2.1 开始 ,struts2配置文件的DTD中增加了<unknown-handler-stack…/>和<unknown-handler-ref…/>
,这个元素用于配置Struts2的未知处理器。
当用请求未知Action、或指定action里的未知方法、或action 处理结束之后返回一个未知result ,struts2允许使用处理起来处理这些方法。
未知处理器需要实现 UnknownHandler 接口,该接口里包含来了3个方法:
1. HandleUnknownAction
:用户请求未知Action时,该方法见会被回调。
2. HandleUnknownActionMethod
: 用户请求指定Action的未知方法时,该方法将会被回调。
3. HandleUnKnownResult
: action处理结束之后返回一个位置Result时,该方法将会被回调。
代码如下:
import org.apache.struts2.dispatcher.ServletDispatcherResult; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.Result; import com.opensymphony.xwork2.UnknownHandler; import com.opensymphony.xwork2.XWorkException; import com.opensymphony.xwork2.config.entities.ActionConfig; public class MyUnKnownHandler implements UnknownHandler { /** * @param namespace 用户请求的action所在的命名空间 * @param actionName 用户请求的Action的名字 * @return 该Action最后生成的ActionConfig,可以返回null */ @Override public ActionConfig handleUnknownAction(String namespace, String actionName)throws XWorkException { return null; } /** * @param action 用户请求的Action对象 * @param methodName 用户请求的Action 的方法名 * @return 该Action 的该方法处理后返回的Result。 */ @Override public Object handleUnknownActionMethod(Object action, String methodName)throws NoSuchMethodException { return null; } /** * @param actionContext 该result所在ActionContext * @param actionName 该result所在的Action名 * @param actionCofig 该result所在ActionContext * @param resultCode 该result所对应的逻辑视图字符串 * @return 将要被处理的结果,可以返回null */ @Override public Result handleUnknownResult(ActionContext actionContext, String actionName,ActionConfig actionConfig, String resultCode) throws XWorkException { actionContext.put("action", actionName); actionContext.put("result", resultCode); return new ServletDispatcherResult("/unknownResult.jsp"); } }
相关的配置:
<!-- 使用bean 定义一个UnknownHandler --> <bean name="yeekuHandler" type="com.opensymphony.xwork2.UnknownHandler" class="com.struts2.action.MyUnKnownHandler"> </bean> <package name="unknown" extends="struts-default" namespace="/unknown"> <!-- 定义处理用户请求的Action --> <action name="myAction" /> </package> <!-- 定义本系统的 UnknownHandler 栈 --> <unknow-handler-stack> <unknow-handler-ref name="yeekuHandler" /> </unknow-handler-stack>
上面配置中配置了一个 myAction ,该 Action 没有 class 属性,表明该 Action 将使用 ActionSupport 作为处理类。并且该 Action 没有 <result> 子元素,这意味着当用户向该 Action 请求后将返回一个未知 Result。向该 myAction.action 发送请求后,总转入 unknownResult.jsp 页面
发表评论
文章已被作者锁定,不允许评论。
-
Struts1 与 Struts2 的12点区别
2011-11-16 11:14 7381) 在Action实现类方面 ... -
Struts 2 的 Ajax 支持(四)
2011-03-14 16:21 17375.4 tabbedpanel 标签 ... -
Struts 2 的 Ajax 支持(三)
2011-02-11 13:18 24265.2 submit 和 a 标签 ... -
Struts 2 的 Ajax 支持(二)
2011-01-27 14:08 2391四、 基于 Dojo 的 pub-sub 事件模型 ... -
Struts 2 的 Ajax 支持(一)
2011-01-20 14:55 2482一、 Ajax 概述 ... -
Struts 2 的拦截器(三)
2011-01-20 13:09 2905六、 拦截器示例 : 实现权限控制 权限检 ... -
Struts 2 的拦截器(二)
2011-01-12 16:38 1624四、 开发自己的拦截器 Struts 2 ... -
Struts 2 的拦截器(一)
2010-12-31 16:53 2016一、 理解拦截器 ... -
Struts 2 的标签库(五)
2010-12-29 11:35 11366.8 select 标签 以下代码 都是基 ... -
Struts 2 的标签库(四)
2010-12-24 16:21 1639六、 表单标签 表单标签,分为 2 种 : f ... -
Struts 2 的标签库(三)
2010-12-20 14:15 1967四、 数据标签 数据标签主要 ... -
Struts 2 的标签库(二)
2010-12-15 16:21 2026三、 控制标签 Str ... -
Struts 2 的标签库(一)
2010-12-13 13:47 1358一、 Struts 2 标签库概述 ... -
Struts 2 的国际化(二)
2010-12-09 13:25 2254二、 Struts 2 的国际化入门 ... -
Struts 2 的国际化(一)
2010-12-06 22:44 1302一、 程序国际化简 ... -
Struts2 上传和下载文件(三)
2010-12-03 14:58 1790三、 同时上传多个 ... -
Struts2 上传和下载文件(二)
2010-11-29 13:37 1977二、 Struts 2 的文件上传 ... -
Struts2 上传和下载文件(一)
2010-11-17 22:28 2076一、 文件上传的原理 1. 表单元 ... -
struts2 输入校验 (四)
2010-11-15 22:43 1210六、 手动完成输入校验 对于一些特殊的检验 ... -
struts2 输入校验 (三)
2010-11-08 13:25 1715五、 内建校验器 S ...
相关推荐
- **struts.xml**:这是Struts2框架的核心配置文件,定义了应用程序中的Action映射、结果类型以及拦截器等关键配置信息。它主要包含以下几个元素: - `package`:表示一个包,其中可以包含多个Action。 - `action`...
在"Struts 2使用注解配置Action"中,我们不再需要在struts.xml中为每个Action类手动添加配置。相反,我们可以在Action类或者方法上直接使用注解来声明它们的功能。这样不仅提高了代码的可读性,还使得配置更加灵活。...
Struts2可以与Spring框架无缝集成,通过`struts-plugin.xml`配置文件将Action实例交由Spring管理,实现依赖注入。 **五、Struts2配置的最佳实践** 1. 尽可能减少对DMI的使用,以提高安全性。 2. 使用包结构组织...
根据提供的文件信息,我们可以从《Struts 2实战 Struts2 in Action》这一书籍中提炼出与Struts 2框架相关的多个重要知识点。Struts 2是一个基于Java的开源Web应用框架,它继承了Struts 1的优点并进行了大量的改进和...
总结,Struts2配置涉及多个方面,包括核心库的引入、配置文件的编写、Action、Result、Interceptor的定义以及与Spring的整合等。通过合理配置,可以构建出高效、灵活的Web应用。在实际项目中,应根据需求调整和优化...
- **XML配置**:传统的Struts2配置通常在struts.xml文件中进行,定义Action、Result和Interceptor等元素。 - **注解配置**:Struts2也支持使用Java注解来简化配置,直接在Action类或方法上添加注解即可。 3. **...
在处理用户请求时,Struts2允许开发者通过Action类来接收和处理参数,包括中文参数。当我们需要通过POST方法提交包含中文字符的数据时,可能会遇到编码问题,因为HTTP请求默认使用的是ASCII编码,而中文字符需要UTF-...
- **Struts配置文件**:是Struts2的核心配置文件,通常位于`/WEB-INF/struts-config.xml`。 - 配置文件中定义了框架的主要行为,如Action映射、拦截器、结果类型等。 - 通过`struts-config.xml`文件,可以灵活地控制...
根据提供的信息,我们可以推断出这是一本关于Struts 2框架的书籍——《Struts 2实战 Struts 2 in action 的中文版》。本书主要介绍了Struts 2框架的相关概念、工作原理以及实际应用案例等内容。接下来,我们将根据...
配置文件在Struts2中起着至关重要的作用,它们定义了请求如何被映射到特定的Action,以及如何处理结果。了解Struts2配置文件的加载顺序对于优化应用性能和解决配置问题至关重要。 Struts2的配置主要分布在以下几个...
1. **使用通配符配置Action**: - 例子:`<action name="student*" method="{1}" class="com.example.StudentAction">` - 这里的`student*`是一个通配符模式,匹配所有以`student`开头的Action。 - `{1}`表示...
总之,`struts_xml`中的Action配置是Struts2应用的基石,通过它可以灵活地定义请求与业务逻辑的映射关系,以及后续的页面跳转和拦截器链,从而构建出高效、可维护的Web应用。深入了解和熟练掌握这部分知识对于提升...
在这个文件中可以配置Action、拦截器、结果类型等。 - **示例配置**: ```xml <struts> <package name="default" namespace="/" extends="struts-default"> <action name="hello" class=...
- 使用 `<servlet>` 标签配置ActionServlet。 - `servlet-name` 属性: 指定名称,如 `action`。 - `servlet-class` 属性: 指定 `org.apache.struts.action.ActionServlet` 类。 - `<servlet-mapping>` 标签: ...
配置文件在Struts2中起着至关重要的作用,它定义了框架的行为、动作映射、拦截器和其他关键设置。以下是Struts2配置文件的一些核心元素和属性的详细说明: 1. **配置文件结构**: Struts2的配置通常存储在一个名为...
`struts.xml` 文件是Struts2的核心配置文件之一,主要负责管理和定义应用程序中的Action映射以及相关的Result定义。具体来说,该文件包括以下几个关键部分: 1. **Action 映射**: - 指定每个Action的名称、执行的...
7. **配置文件**:Struts2的配置主要通过`struts.xml`进行,它定义了Action、结果类型、拦截器栈等。此外,Spring的配置文件(如`applicationContext.xml`)则负责Bean的管理和依赖注入。 8. **过滤器配置**:在`...
在 Struts2 框架中,Redirect 和 Redirect-action 是两个不同的 Result 配置类型。Redirect 配置用于重定向到一个新的 URL,而 Redirect-action 配置用于重定向到一个 Action。 Redirect-action 配置可以省略后缀名...
如果一个Action类中有多个方法,可以为每个方法单独配置Action,如: ```xml <action name="delete" class="example.CrudAction" method="delete"> ``` - **通配符配置**: 使用通配符可以简化配置,如: - *...