- 浏览: 654278 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (609)
- java (139)
- 数据库 (107)
- 微信 (23)
- IT生活 (5)
- web前端 (74)
- SSH (11)
- 设计模式 (12)
- 重要资料 (11)
- 其他 (15)
- java技巧 (23)
- 服务器 (9)
- 2D/GUI (3)
- JAVA3D (2)
- ANT (5)
- Apache项目 (19)
- 数据类型 (10)
- 报表 (3)
- Collections (6)
- SQL/JDBC (15)
- 开发类 (6)
- EJB (6)
- Email (6)
- 文件读写 (2)
- 游戏 (0)
- Flex (2)
- Generic (2)
- HIbernate (12)
- I18N (5)
- Java EE (9)
- java ME (4)
- JDK 6 (8)
- JNDI/LDAP (5)
- JSP (7)
- JSTL (2)
- 正则表达式 (2)
- 安全 (2)
- Struts2 (12)
- Spring (4)
- Web服务 (10)
- Xml (1)
- JavaScript (30)
- AJAX (7)
- 验证 (4)
- 上传下载 (1)
- office办公软件 (1)
- Android (2)
- IOS (0)
- Dubbo (3)
- memcached/redis (1)
- 小程序 (1)
- 微信公众号 (0)
最新评论
-
wf_wangfeng:
怎么我用第一种方法不行呢 alert(document.rea ...
当jsp页面完全加载完成后执行一个js函数 -
Lori_Liu:
有帮助,至少可以解决了目前所遇到的问题!谢谢..
当jsp页面完全加载完成后执行一个js函数 -
starbhhc:
String actionMessage = new Stri ...
Java读取txt文件乱码 -
starbhhc:
Sev7en_jun 写道GOOD
客气,互相交流。。
javaeye论坛规则小测验(答案)--star -
Sev7en_jun:
GOOD
javaeye论坛规则小测验(答案)--star
包含配置
默认的情况下,Struts2将自动加载放在WEB-INF/classes路径下的struts.xml文件。大部分应用里,随着应用的规模的增加,系统的Action数量大量增加,导致了struts.xml配置文件变得非常臃肿。
为了避免这种情况,可以将一个struts.xml文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。比如说:在struts.xml文件中使用以下配置方式
<include file=”struts-mod1.xml” />
通过这种方式提供了一种模块化的方式来管理struts.xml文件。
另外,在core的根目录下有一个struts-default.xml文件,注意,这个文件是自动加载的,不需要在我们的struts.xml文件中用include导入。
Bean的配置
一般这个元素不需要我们进行配置,只是需要重新定义struts2的核心组件的时候才需要使用到这个元素。
Struts2框架是一个可以高度扩展的框架,框架的大部分核心组件,都是通过IOC容器来进行管理的。因此,允许开发者可以很方便的提供自己的组件实现类,并将组件类部署到struts2就OK了。
不过这里举个例子:
<bean type=”com.opensymphony.xwork2.ObjectFactory” name=”caFactory” class=”cc.dynasoft.MyObject” />
以上代码的作用是使用一个自己定义的ObjectFactory来替换了struts2内置的object。
常量配置
Struts有一个属性文件,struts.properties,实际上这个配置文件是指定struts2的属性。而常量配置就是指定struts2属性的一种方式。例子:
<constant name=”struts.custom.i18n.resources” value=”message” />
以上用于指定国际化资源文件的前缀名是message,当然也可以在struts.properties中配置,如下:
struts.custom.i18n.resources=message
也可以在web.xml中进行配置:
作为FilterDispatcher的init-param
<param-name> struts.custom.i18n.resources</param-name>
<param-value>message</param-value>
以下是加载struts2常量的搜索顺序:
1、 struts-default.xml中
2、 struts-plugin.xml中
3、 struts.xml中
4、 struts.properties
5、 web.xml中
包配置
Struts2使用package来管理Action和拦截器等。配置该包时,必须指定一个name属性,用于指定包名,可以指定一个可选的extends属性,是另一个包的名字,子包可以继承父包的拦截器,拦截器栈、action等配置。除此之外,struts还提供了一个抽象包,抽象包的含义是该包不能有action的定义。设置abstract=”true”说明这是一个抽象包。
以下是一个例子:
<package name=”mod1” extends=”struts-default” /> 其中struts-default是struts-default.xml提供的包。
另一个比较重要的概念就是命名空间:
考虑在一个web应用中需要同名的action,struits2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action,不同的命名空间可以有同名的Action。如果不指定命名空间,则默认的命名空间是””,指定了命名空间之后,Action的URL应该是命名空间+Action名。
比如说:
<action name=”register” extends=”struts-default” namespace=”/user” >……</action>
则对应的Action应该是/user/register.action。
如果namespace=”/”,说明这是一个根命名空间。
如果指定了命名空间,但是在该命名空间中找不到该Action,struts2将会在默认的命名空间中继续查找,如果还找不到,则出现系统错误。
比如说:
请求/order/save.action,系统首先在命名空间/order中查找,如果找到,使用该action进行处理,否则,系统将到默认的命名空间中查找,如果两个命名空间都找不到,出现系统错误。
拦截器配置
拦截器实际上思想就是AOP,我们可以使用拦截器跟踪日志、跟踪系统性能瓶颈等。
拦截器的配置无非就是声明拦截器、引用拦截器以及声明拦截器栈。可以认为拦截器栈是由多个拦截器组成的一个大的拦截器。
定义拦截器和拦截器栈都在<interceptors />这个标记内
以下是一个例子:
<interceptors>
<interceptor name=”log” class=”cc.dynasoft.LogInterceptor” />
<interceptor name=”authority” class=”cc.dynasoft. Authority Interceptor” />
<interceptor name=”timer” class=”cc.dynasoft.TimerInterceptor” />
<interceptor-stack name=”default”>
<interceptor-ref name=” authority” />
<interceptor-ref name=” timer” />
</interceptor>
引用拦截器是在action中引用的:例子:
<action name=”login” class=”cc.dynasoft.LoginAction”>
……
<interceptor-ref name=”log” />
</action>
配置Action
实际上配置Action很简单,就使用action标签就OK了,action标签有两个重要属性:name和class,name是必须指定的,他既是action的名字,也是该action需要处理的URL的前半部分。如果class没有指定,默认是ActionSupport。而ActionSupport默认处理就是返回一个SUCCESS字符串。
struts的全局配置文件中有一个属性:struts.enable.SlashesInActionNames如果设置为true,允许struts2框架中使用斜线。
Action中直接访问servlet API有以下两种方法:
1、 如果需要访问ServletContext,Action类需要实现接口ServletContextAware
如果需要访问 HttpServletRequest,Action类需要实现接口ServletRequestAware
如果需要访问 HttpServletResponse,Action类需要实现接口ServletResponseAware
以下是例子代码,主要用于访问Reponse对象:
public class LoginAction implements Action,ServletResponseAware
{
private HttpServletResponse response;
//实现ServletResponseAware接口必须实现的方法
public String execute() throw Exception
{
Cookie c = new Cookie(“user”,getUsername());
c.setMaxAge(60*60);//最大生存时间
response.addCookie(c);
return SUCCESS;
}
}
2、 struts2提供了一个ServletActionContext,这个类包含了访问request,response等静态方法。
注意:即使我们在struts2的Action中获得了HttpServletResponse对象,也不要尝试直接在Action中生成对客户端的输出。比如:下面代码是没有实际意义的,即
response.getWriter().println(“hello world!”);
动态方法调用(类似struts1的DispatchAction)
其实没有什么特别的地方,只是提交表单的时候需要使用如下的格式:
action=”ActionName!MethodName.action”
举个例子:action=”Login!regist.action”,这句话的实质就是交给Login Action的regist方法进行处理
使用动态方法调用前必须设置struts2允许动态方法调用。开启系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation常量完成的,设置该常量的值为true,将开启动态方法调用;否则将关闭动态方法调用。
为action元素指定method属性
对action进行如下的配置:
<action name=”Login” class=”cc.dynasoft.LoginAction” method=”login” />
……
</action>
<action name=”Regist” class=”cc.dynasoft.LoginAction” />
……
</action>
查看以上两个action,默认的情况是Regist,而当Login的时候,将提交到LoginAction的login中。查看上面的两个action,class都是一样的,于是就出现了下面的使用通配符的概念。
使用通配符
在配置action的时候,action的三个属性name、class和method都可以使用通配符。
以下举例说明:
例1:<action name=”*Action” class=”cc.dynasoft.LoginAction” method=”{1}”>
……
</action>
解释一下上面代码的含义:上面定义的不是一个普通的action,而是定义了一系列的action,只要URL是*Action.action的模式,都可以通过该Action进行处理。但该Action定义了一个表达式{1},该表达式的值就是name属性值中的第一个*的值。
例如,如果用户请求的URL是loginAction.action,则调用该action的login方法;如果用户请求的URL是registAction.action,则调用该action的regist方法。
例2:<action name=”*Action” class=”cc.dynasoft.{1}Action”>
……
</action>
比如说:如果URL为RegistAction.action,可以匹配上面的action,该action的处理类是cc.dynasoft.RegistAction
例3:<action name=”*_*” class=”cc.dynasoft.{1}Action” method=”{2}”>
当一个action为Book_save.action的时候将调用BookAction的save方法来处理用户请求。
注意这个时候指定校验文件需要注意,比如说Book_save.action的校验文件应该是
Book_save-validation.xml。
例4:<action name=”*”>
<result>/{1}.jsp</result>
</action>
这个应该不难理解,呵呵。
以下需要注意的问题:
如果有URL为abcAction.action的请求,如果struts.xml文件有名为abcAction的Action,则一定由该Action来处理用户请求;如果struts.xml文件没有名为abcAction的Action,则搜索name属性值匹配abcAction的Action,例如name为*Action或*,*Action并不会比*更优先匹配abcAction的请求,而是先找到哪个Action,就先由哪个Action来处理用户的请求。因此,我们应该将名为*的Action配置在最后,否则struts2将使用该Action来处理所有希望使用模式匹配的请求。
处理结果
struts2通过在struts.xml文件中使用<result>元素来配置结果,根据<result>元素所在位置的不同,struts2提供了两种结果。
局部结果:将<result>作为<action>元素的子元素配置
全局结果:将<result>作为<global-result>元素的子元素配置。
以下列出比较标准的配置:
<result name=”success” type=”dispatcher”>
<param name=”location” >/thank_you.jsp</param>
<param name=”parse” >true</param>
</result>
location:用于指定实际视图资源
parse:该参数指定是否允许在实际视图名称中使用ONGL表达式,默认为true。如果设置为false则不允许使用,通常不需要修改。
一般我们比较常用的写法:
<result name=”success” type=”dispatcher”>
/thank_you.jsp
</result>
注意如果没有指定name属性:则默认是success;如果没有指定type,则默认就是dispatcher,即JSP。
下面列出struts2内建支持的结果类型如下:
chain:Action链式处理的结果类型,也就是将结果转发到这个action中。
chart:整合JFreeChart的结果类型
dispatcher:用于整合JSP的结果类型
freemarker:用于整合freemarker结果类型。
httpheader:用于控制特殊的HTTP行为的结果类型。
jasper:用于JasperReports整合的结果类型
jsf:用于整合JSF后的结果类型
redirect:实际上dispatcher和redirect的区别就是在于转发和重定向的区别。
redirect-action:用于直接redirect action。
stream:用于向浏览器返回一个Inputstream(用于文件下载)
tiles:用于整合Tiles后的结果类型。
velocity:用于整合Velocity的结果类型。
xslt:用于整合XML/XSLT的结果类型。
plaintext:用于显示某个页面的源代码。
plaintext、redirect以及redirect-action的配置分别如下:
<result type=”plaintext”>
<param name=”location”>/welcome.jsp</param>
<!—设置字符集编码-->
<param name=”charset”>gb2312</param>
</result>
<result type=”redirect”>
/welcome.jsp
</result>
<result type=” redirect-action”>
<!—指定action的命名空间-->
<param name=”namespace”>/ss</param>
<!—指定action的名字-->
<param name=”actionName”>login </param>
</result>
在请求结果中使用ONGL表达式
例子:
<result type=”redirect”>edit.action?skillName=${currentSkill.name}</result>
对于上面的表达式语法,要求action中必须包含currentSkill属性,并且currentSkill属性必须包含name属性,否则${currentSkill.name}表达式值为null。
属性驱动和模型驱动
我不推荐使用模型驱动,属性驱动完全可以实现模型驱动的效果。
异常处理
异常处理在struts2中采用可配置的方式来处理,主要是为了防止异常代码和action代码耦合。我们比较希望的异常处理模式是这样的,如果出现了异常一,则系统跳转到视图1;如果出现了异常二,则系统转到视图2。
我们查看execute的声明:public String execute() throws Exception可以发现将异常抛出由struts2框架进行处理,为了处理异常,我们必须使用exception拦截器,由于在struts-default.xml的defaultStack中已经存在这个拦截器的定义,于是我们可以不用做任何事情。
struts2的异常处理机制是通过在struts.xml文件中配置<exception-mapping />元素完成的,配置该元素的时候,需要指定两个属性:
exception:此属性指定该异常映射所设置的异常类型。
result:出现这个异常的时候,转入result属性所指向的结果。
根据<exception-mapping />元素出现的位置的不同,异常映射又可分为两种:
局部异常映射:将<exception-mapping />作为action的子元素配置
全局异常映射:将<exception-mapping />元素作为<global-exception-mappings>元素的子元素配置。
实际上配置类似result,可以有局部,也可以是全局,局部优先。
举个例子:
<global-exception-mappings>
<exception-mapping exception=”java.sql.SQLException” result=”sql”/>
<exception-mapping exception=”java.lang.Exception” result=”root”/>
</ global-exception-mappings>
注意以上的sql和root是全局result。
输出异常信息:
<s:property value=”exception” />:输出异常对象本身,注意这个异常代表Exception的实例,因此可以调用message属性。
<s:property value=”exceptionStack” />:输出异常堆栈信息。
默认的情况下,Struts2将自动加载放在WEB-INF/classes路径下的struts.xml文件。大部分应用里,随着应用的规模的增加,系统的Action数量大量增加,导致了struts.xml配置文件变得非常臃肿。
为了避免这种情况,可以将一个struts.xml文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。比如说:在struts.xml文件中使用以下配置方式
<include file=”struts-mod1.xml” />
通过这种方式提供了一种模块化的方式来管理struts.xml文件。
另外,在core的根目录下有一个struts-default.xml文件,注意,这个文件是自动加载的,不需要在我们的struts.xml文件中用include导入。
Bean的配置
一般这个元素不需要我们进行配置,只是需要重新定义struts2的核心组件的时候才需要使用到这个元素。
Struts2框架是一个可以高度扩展的框架,框架的大部分核心组件,都是通过IOC容器来进行管理的。因此,允许开发者可以很方便的提供自己的组件实现类,并将组件类部署到struts2就OK了。
不过这里举个例子:
<bean type=”com.opensymphony.xwork2.ObjectFactory” name=”caFactory” class=”cc.dynasoft.MyObject” />
以上代码的作用是使用一个自己定义的ObjectFactory来替换了struts2内置的object。
常量配置
Struts有一个属性文件,struts.properties,实际上这个配置文件是指定struts2的属性。而常量配置就是指定struts2属性的一种方式。例子:
<constant name=”struts.custom.i18n.resources” value=”message” />
以上用于指定国际化资源文件的前缀名是message,当然也可以在struts.properties中配置,如下:
struts.custom.i18n.resources=message
也可以在web.xml中进行配置:
作为FilterDispatcher的init-param
<param-name> struts.custom.i18n.resources</param-name>
<param-value>message</param-value>
以下是加载struts2常量的搜索顺序:
1、 struts-default.xml中
2、 struts-plugin.xml中
3、 struts.xml中
4、 struts.properties
5、 web.xml中
包配置
Struts2使用package来管理Action和拦截器等。配置该包时,必须指定一个name属性,用于指定包名,可以指定一个可选的extends属性,是另一个包的名字,子包可以继承父包的拦截器,拦截器栈、action等配置。除此之外,struts还提供了一个抽象包,抽象包的含义是该包不能有action的定义。设置abstract=”true”说明这是一个抽象包。
以下是一个例子:
<package name=”mod1” extends=”struts-default” /> 其中struts-default是struts-default.xml提供的包。
另一个比较重要的概念就是命名空间:
考虑在一个web应用中需要同名的action,struits2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action,不同的命名空间可以有同名的Action。如果不指定命名空间,则默认的命名空间是””,指定了命名空间之后,Action的URL应该是命名空间+Action名。
比如说:
<action name=”register” extends=”struts-default” namespace=”/user” >……</action>
则对应的Action应该是/user/register.action。
如果namespace=”/”,说明这是一个根命名空间。
如果指定了命名空间,但是在该命名空间中找不到该Action,struts2将会在默认的命名空间中继续查找,如果还找不到,则出现系统错误。
比如说:
请求/order/save.action,系统首先在命名空间/order中查找,如果找到,使用该action进行处理,否则,系统将到默认的命名空间中查找,如果两个命名空间都找不到,出现系统错误。
拦截器配置
拦截器实际上思想就是AOP,我们可以使用拦截器跟踪日志、跟踪系统性能瓶颈等。
拦截器的配置无非就是声明拦截器、引用拦截器以及声明拦截器栈。可以认为拦截器栈是由多个拦截器组成的一个大的拦截器。
定义拦截器和拦截器栈都在<interceptors />这个标记内
以下是一个例子:
<interceptors>
<interceptor name=”log” class=”cc.dynasoft.LogInterceptor” />
<interceptor name=”authority” class=”cc.dynasoft. Authority Interceptor” />
<interceptor name=”timer” class=”cc.dynasoft.TimerInterceptor” />
<interceptor-stack name=”default”>
<interceptor-ref name=” authority” />
<interceptor-ref name=” timer” />
</interceptor>
引用拦截器是在action中引用的:例子:
<action name=”login” class=”cc.dynasoft.LoginAction”>
……
<interceptor-ref name=”log” />
</action>
配置Action
实际上配置Action很简单,就使用action标签就OK了,action标签有两个重要属性:name和class,name是必须指定的,他既是action的名字,也是该action需要处理的URL的前半部分。如果class没有指定,默认是ActionSupport。而ActionSupport默认处理就是返回一个SUCCESS字符串。
struts的全局配置文件中有一个属性:struts.enable.SlashesInActionNames如果设置为true,允许struts2框架中使用斜线。
Action中直接访问servlet API有以下两种方法:
1、 如果需要访问ServletContext,Action类需要实现接口ServletContextAware
如果需要访问 HttpServletRequest,Action类需要实现接口ServletRequestAware
如果需要访问 HttpServletResponse,Action类需要实现接口ServletResponseAware
以下是例子代码,主要用于访问Reponse对象:
public class LoginAction implements Action,ServletResponseAware
{
private HttpServletResponse response;
//实现ServletResponseAware接口必须实现的方法
public String execute() throw Exception
{
Cookie c = new Cookie(“user”,getUsername());
c.setMaxAge(60*60);//最大生存时间
response.addCookie(c);
return SUCCESS;
}
}
2、 struts2提供了一个ServletActionContext,这个类包含了访问request,response等静态方法。
注意:即使我们在struts2的Action中获得了HttpServletResponse对象,也不要尝试直接在Action中生成对客户端的输出。比如:下面代码是没有实际意义的,即
response.getWriter().println(“hello world!”);
动态方法调用(类似struts1的DispatchAction)
其实没有什么特别的地方,只是提交表单的时候需要使用如下的格式:
action=”ActionName!MethodName.action”
举个例子:action=”Login!regist.action”,这句话的实质就是交给Login Action的regist方法进行处理
使用动态方法调用前必须设置struts2允许动态方法调用。开启系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation常量完成的,设置该常量的值为true,将开启动态方法调用;否则将关闭动态方法调用。
为action元素指定method属性
对action进行如下的配置:
<action name=”Login” class=”cc.dynasoft.LoginAction” method=”login” />
……
</action>
<action name=”Regist” class=”cc.dynasoft.LoginAction” />
……
</action>
查看以上两个action,默认的情况是Regist,而当Login的时候,将提交到LoginAction的login中。查看上面的两个action,class都是一样的,于是就出现了下面的使用通配符的概念。
使用通配符
在配置action的时候,action的三个属性name、class和method都可以使用通配符。
以下举例说明:
例1:<action name=”*Action” class=”cc.dynasoft.LoginAction” method=”{1}”>
……
</action>
解释一下上面代码的含义:上面定义的不是一个普通的action,而是定义了一系列的action,只要URL是*Action.action的模式,都可以通过该Action进行处理。但该Action定义了一个表达式{1},该表达式的值就是name属性值中的第一个*的值。
例如,如果用户请求的URL是loginAction.action,则调用该action的login方法;如果用户请求的URL是registAction.action,则调用该action的regist方法。
例2:<action name=”*Action” class=”cc.dynasoft.{1}Action”>
……
</action>
比如说:如果URL为RegistAction.action,可以匹配上面的action,该action的处理类是cc.dynasoft.RegistAction
例3:<action name=”*_*” class=”cc.dynasoft.{1}Action” method=”{2}”>
当一个action为Book_save.action的时候将调用BookAction的save方法来处理用户请求。
注意这个时候指定校验文件需要注意,比如说Book_save.action的校验文件应该是
Book_save-validation.xml。
例4:<action name=”*”>
<result>/{1}.jsp</result>
</action>
这个应该不难理解,呵呵。
以下需要注意的问题:
如果有URL为abcAction.action的请求,如果struts.xml文件有名为abcAction的Action,则一定由该Action来处理用户请求;如果struts.xml文件没有名为abcAction的Action,则搜索name属性值匹配abcAction的Action,例如name为*Action或*,*Action并不会比*更优先匹配abcAction的请求,而是先找到哪个Action,就先由哪个Action来处理用户的请求。因此,我们应该将名为*的Action配置在最后,否则struts2将使用该Action来处理所有希望使用模式匹配的请求。
处理结果
struts2通过在struts.xml文件中使用<result>元素来配置结果,根据<result>元素所在位置的不同,struts2提供了两种结果。
局部结果:将<result>作为<action>元素的子元素配置
全局结果:将<result>作为<global-result>元素的子元素配置。
以下列出比较标准的配置:
<result name=”success” type=”dispatcher”>
<param name=”location” >/thank_you.jsp</param>
<param name=”parse” >true</param>
</result>
location:用于指定实际视图资源
parse:该参数指定是否允许在实际视图名称中使用ONGL表达式,默认为true。如果设置为false则不允许使用,通常不需要修改。
一般我们比较常用的写法:
<result name=”success” type=”dispatcher”>
/thank_you.jsp
</result>
注意如果没有指定name属性:则默认是success;如果没有指定type,则默认就是dispatcher,即JSP。
下面列出struts2内建支持的结果类型如下:
chain:Action链式处理的结果类型,也就是将结果转发到这个action中。
chart:整合JFreeChart的结果类型
dispatcher:用于整合JSP的结果类型
freemarker:用于整合freemarker结果类型。
httpheader:用于控制特殊的HTTP行为的结果类型。
jasper:用于JasperReports整合的结果类型
jsf:用于整合JSF后的结果类型
redirect:实际上dispatcher和redirect的区别就是在于转发和重定向的区别。
redirect-action:用于直接redirect action。
stream:用于向浏览器返回一个Inputstream(用于文件下载)
tiles:用于整合Tiles后的结果类型。
velocity:用于整合Velocity的结果类型。
xslt:用于整合XML/XSLT的结果类型。
plaintext:用于显示某个页面的源代码。
plaintext、redirect以及redirect-action的配置分别如下:
<result type=”plaintext”>
<param name=”location”>/welcome.jsp</param>
<!—设置字符集编码-->
<param name=”charset”>gb2312</param>
</result>
<result type=”redirect”>
/welcome.jsp
</result>
<result type=” redirect-action”>
<!—指定action的命名空间-->
<param name=”namespace”>/ss</param>
<!—指定action的名字-->
<param name=”actionName”>login </param>
</result>
在请求结果中使用ONGL表达式
例子:
<result type=”redirect”>edit.action?skillName=${currentSkill.name}</result>
对于上面的表达式语法,要求action中必须包含currentSkill属性,并且currentSkill属性必须包含name属性,否则${currentSkill.name}表达式值为null。
属性驱动和模型驱动
我不推荐使用模型驱动,属性驱动完全可以实现模型驱动的效果。
异常处理
异常处理在struts2中采用可配置的方式来处理,主要是为了防止异常代码和action代码耦合。我们比较希望的异常处理模式是这样的,如果出现了异常一,则系统跳转到视图1;如果出现了异常二,则系统转到视图2。
我们查看execute的声明:public String execute() throws Exception可以发现将异常抛出由struts2框架进行处理,为了处理异常,我们必须使用exception拦截器,由于在struts-default.xml的defaultStack中已经存在这个拦截器的定义,于是我们可以不用做任何事情。
struts2的异常处理机制是通过在struts.xml文件中配置<exception-mapping />元素完成的,配置该元素的时候,需要指定两个属性:
exception:此属性指定该异常映射所设置的异常类型。
result:出现这个异常的时候,转入result属性所指向的结果。
根据<exception-mapping />元素出现的位置的不同,异常映射又可分为两种:
局部异常映射:将<exception-mapping />作为action的子元素配置
全局异常映射:将<exception-mapping />元素作为<global-exception-mappings>元素的子元素配置。
实际上配置类似result,可以有局部,也可以是全局,局部优先。
举个例子:
<global-exception-mappings>
<exception-mapping exception=”java.sql.SQLException” result=”sql”/>
<exception-mapping exception=”java.lang.Exception” result=”root”/>
</ global-exception-mappings>
注意以上的sql和root是全局result。
输出异常信息:
<s:property value=”exception” />:输出异常对象本身,注意这个异常代表Exception的实例,因此可以调用message属性。
<s:property value=”exceptionStack” />:输出异常堆栈信息。
发表评论
-
struts2文件上传的采用的三种方式解析
2012-02-06 14:00 841文件上传几乎是每个项目实现的一个必须的模块。 上传就是将 ... -
struts2拦截器使用(用户session失效后的统一页面指向)
2012-01-12 14:59 979用户登录之后session我们设置一定的时间失效,失效后 ... -
struts2防页面刷新重复提交
2012-01-12 14:41 892struts2防页面刷新重复提 ... -
Struts 2 Actions介绍
2010-07-22 17:11 980当客户端请求与action的name相匹配时,框架会使用str ... -
Struts2中struts.xml的Action配置详解
2010-07-22 17:00 788使用package可以将逻辑上相关的一组Action,Re ... -
Struts2中struts.xml的Action配置详解
2010-07-22 16:58 1228使用package可以将逻辑上相关的一组Action,Resu ... -
Struts2:处理一个form多个submit
2010-07-22 16:57 845了完成不同的工作,一个 HTML form 标签中可能有两个或 ... -
struts2 action 配置 action应用原理
2010-07-22 16:55 997Action 的配置是 Struts2 框架的一个基础工作单元 ... -
struts2动态action的实现
2010-07-22 16:45 992是管理者的用户登录的时候,执行完了认证需要的loginacti ... -
struts2的验证
2010-07-21 11:42 757struts2的验证和struts1的验证相对来说简单很多,注 ... -
Struts2教程4:使用validate方法验证数据
2010-07-21 11:40 1393在《Struts2教程4:使用validate方法验证数据》中 ...
相关推荐
在Struts中,`struts.xml`和`struts.properties`文件是两个核心的配置文件,它们分别负责定义应用的行为和设置全局属性。 **`struts.xml`配置详解** `struts.xml`是Struts 2框架的核心配置文件,用于定义动作映射...
Struts.xml文件是Apache Struts 2框架的核心配置文件,它用于定义应用程序的行为、Action映射、结果页面、拦截器等关键组件。在深入讲解struts.xml之前,我们先来了解与之相关的struts.properties文件。 struts....
本文将对`struts-config.xml`中的关键元素进行详细解析,并结合实际示例来帮助读者更好地理解和应用这些配置。 #### 二、`struts-config.xml`文件结构概览 `struts-config.xml`文件遵循一定的DTD(Document Type ...
`struts.xml`是Struts2框架的核心配置文件,用于定义应用程序的行为、控制器、动作映射、结果类型和其他关键组件。下面我们将深入探讨`struts.xml`的各个方面。 1. **配置文件结构** `struts.xml`文件通常位于项目...
下面将详细介绍Struts.xml文件中的关键元素和它们的作用。 1. **<struts>根元素**: - `<struts>` 是整个配置文件的起始标签,包含了所有其他配置元素。 2. **元素**: - `<package>` 定义了一个包,可以看作是...
`struts.xml`是Struts2框架的核心配置文件,它定义了动作、结果、拦截器等关键组件,确保应用的正常运行。 错误提示"Referenced file contains error (http://struts.apache.org/dtds/struts-2.0.dtd)"表明系统无法...
下面我们将详细介绍如何利用Dom4j解析`struts.xml`文件中的关键元素。 首先,导入必要的库,包括Dom4j库和其他Struts2依赖。在你的项目中,确保添加了以下Maven依赖: ```xml <groupId>dom4j <artifactId>dom4j...
在阅读和理解提供的`struts.xml`详细配置文档时,应关注这些关键点,确保每个元素、属性都符合你的应用需求。同时,结合文档中的图片,可以更直观地理解配置结构和逻辑。通过熟练掌握Struts.xml的配置,开发者能够...
在Struts2中,配置文件`struts.xml`扮演着核心角色,它定义了动作(Action)、包(Package)和结果(Result)等关键组件的行为。为了方便地解析和处理这些配置,开发者常常会创建自定义的包装类(Wrapper Class),...
在使用Struts框架时,`struts.xml`配置文件起着至关重要的作用,它是整个应用的配置中心,定义了动作映射、拦截器、结果类型等核心组件。为了正确运行Struts2框架,我们需要准备一系列的JAR文件,这些库文件提供了...
#### 四、深入解析关键配置项 ##### 1. 包(Package) - **name**:包的名称,必须唯一。 - **extends**:继承自其他包,可以继承其默认配置。 - **abstract**:表示是否为抽象包,如果设置为true,则该包不能直接...
下面将详细介绍`struts.xml`中的关键常量及其用途。 #### 常量详解 ##### 1. **struts.configurationProvider** - **功能**:定义Struts2使用的配置提供者,默认值为`org.apache.struts2.config.Default...
`struts.xml`是Struts 2框架的核心配置文件,它定义了Action、结果类型、拦截器等关键元素,用于控制应用程序的行为。以下是`struts.xml`中的一些主要组成部分: - **Action配置**:定义了Action类与URL之间的映射...
在Struts 2中,`struts.xml`是核心配置文件,它是应用程序的行为定义中心,用于设置Action、结果、拦截器以及其他关键组件。这篇博客"Struts 2 自学之路: 3.1 struts.xml 核心配置实例说明"将引导我们深入了解如何...
本文将深入解析`struts.xml`中的Action配置,帮助开发者更好地理解和运用这一关键组件。 首先,Action配置是Struts2中定义业务逻辑入口的关键,它将HTTP请求映射到特定的Java类方法上。在`struts.xml`中,一个...
5. 元素:该元素是struts-config.xml中非常关键的一部分,用于定义请求与业务逻辑处理类之间的映射关系。通过,开发者可以指定一个请求的路径和对应的动作类。动作类通常是继承自org.apache.struts.action.Action类...
#### 三、关键配置详解 ##### 1. Data Sources 配置 - **数据源配置**:这部分配置主要用于定义Web应用所需的数据源。通过`<data-sources>`元素,可以指定一个或多个数据源。 - `<data-source>`元素:每个数据源的...
Struts.xml配置文件是Struts框架的核心配置文件,用于定义应用程序的行为、数据源、表单bean、异常处理、动作映射等关键元素。这个文件基于特定的DTD(文档类型定义),规定了配置元素的结构和顺序。理解并熟练掌握...
Struts.xml配置文件是Struts2框架的核心配置文件,它定义了应用的行为和组件的配置。以下是关于Struts.xml配置文件各个元素的详细说明: **Bean配置** 在Struts.xml中,`<bean>`标签用于定义Java Bean实例。以下是...