action返回值配置和异常配置
每个Action的方法都应该有返回值,并且类型为String。如果返回"success"而struts.xml中没有配置,在运行时找不到汇报404错误
<action name="user">
<!--exception-mapping用于为异常指定视图,exception是对应抛出的异常类型,result是视图-->
<exception-mapping result="error" exception="java.lang.Exception"/>
<result name="error">/jsp/error.jsp</result>
<result type="dispatcher" name="success">/jsp/success.jsp</result>
</action>
result的name匹配action的返回值,type是类型,如UserAction的login方法返回值为“success”,就会匹配name为“success”的result,去到/jsp/success.jsp。
struts支持的返回类型很多,在struts核心包xml中可以找到,struts提供了很好的扩展性,插件可以自定义返回类型。常用的返回类型↓
dispatcher:默认返回类型,转发到一个servlet或jsp
redirect:重定向到一个URL
chain:传递到下一部构成一个动作链
redirectAction :重定向到另一个动作
stream :把一个InputStream流发送给浏览器
velocity
:用于与Velocity技术集成
xslt: 用于XML/XSLT技术的集成
plainText :发送普通文本,通常用来显示Jsp源代码
也可以在package中定义独立于其他action的,全局的返回类型和异常处理
<package name="mypackage">
<global-results>
<result name="main">/jsp/main.jsp</result> //定义全局返回类型
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"/>
<!--全局异常必须指向一个全局的result-->
</global-exception-mapping>
</package>
- 全局返回类型和action中具体定义的返回值name相同,将使用action定义的操作,与外部css样式和行内css样式同名,行内样式会起作用类似。
- 指定了异常后,在action中直接抛出异常就行,当然也可以选择在action直接处理掉
action的方法配置:
动态方法调用,老师建议最好不要使用这种方式,有安全性缺陷,而且在javascript校验是struts生成的时候可能执行不了(主要是后者的问题)
通配符形式:useradd.action Action的name="user*",method="{1}"。
*表示匹配0-n个任意字符,{1}表示前一个*匹配的内容。在这里请求匹配该action,{1}的内容是add,于是就成功调用了user Action中的add方法。
为action的每个method在xml中配置一个Action:这种方式没问题,但是比较繁琐。