struts2之action
struts2在配置web.xml时,会指定filter拦截路径,如*.action。当浏览器请求一个action时,默认调用的是该action中的execute()方法。想要调用其他方法,需要为action指定method属性。
例如以下的struts.xml的配置
<struts> <package name="musicManager" namespace="/" extends="struts-default"> <action name="queryMusic" class="com.pxy.struts.action.MusicManagerAction" method="queryMusic"> <result name="queryMusic">/musicList.jsp</result> </action> </package> </struts>
当一个action中有多个方法需要被调用时,struts.xml文件中的action配置将显得非常臃肿,为解决这一问题,Struts2提供了动态方法调用。
形如:
<form action="DemoAction!methodName.action">
DemoAction 为struts.xml文件中<action name="">中的值,methodName为action中需要调用的方法。中间用!隔开
相应的struts.xml配置将需要增加动态调用常量,根据配置的<result>信息定向跳转路径。
<!--定义常量,以下信息表示Struts2允许动态方法调用--> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!--MusicmanagerAction配置信息--> <action name="musicManager" class="com.pxy.struts.action.MusicManagerAction"> <result name="queryMusic">/musicList.jsp</result> <result name="deleteMusic">/musicList.jsp</result> </action>
另一种动态调用:通配符
struts.xml中,<action> 中的name属性支持通配符,表达一个action定义多个逻辑action
相关的struts.xml配置如下:
<action name="userManager_*" class="包名.UserManagerAction" method="{1}"> <result name="{1}">{1}.jsp</result> </action>
访问路径:
http://localhost/struts2/userManager_update.action
userManager_update.action,指定了*中的内容为update,通过{1}表示*中的第一个内容,定向到update.jsp页面
Struts2之管理结果集:
dispatcher 结果集、redirectAction 结果集
最典型的<result> 配置如下:
<!--为success的逻辑视图配置result,type属性指定结果类型--> <result name=“success” type=“dispatcher”> <!--指定该逻辑视图对应的实际的视图资源--> <param name=“location”>/index.jsp</param> <param name=“parse”>true</param> </result>
其中,location属性指定了该逻辑对应的实际视图资源
parse属性指定了是否允许在实际视图中使用ognl表达式,默认为true。
该配置的简化形式如下:
<action name=“login” class=“com.pxy.struts.action.LoginAction”> <!--为success的逻辑视图配置result,type属性指定结果类型--> <result name=“success”type=“dispatcher”>/main.jsp </result> </action>
其中,结果类型也可以省略,<result>name属性默认为success,type属性默认为dispatcher
dispatcher结果类型:
实际会转换为如下的代码
RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
rd.forward(request,response);
redirectAction结果类型:
当一个Action处理完成后,需要让另一个Action进行下一步处理,这时就可以使用redirectAction结果类型。
形式如下
<action name="musicManager" class="包名称.MusicManagerAction"> <result name="queryMusic">/musicList.jsp</result> <result name="addMusic" type="redirectAction"> <param name="actionName">musicManager</param> <param name="method">queryMusic</param> </result> </action>
当执行addMusic后,需要让歌曲信息重新显示在页面上,这里就需要重定向到musicManager这个action,执行里面的queryMusic方法
在Action中访问Servlet API
Struts2提供了一个ServletActionContext类访问Servlet API。
public String showServletApi(){ HttpServletRequest request= ServletActionContext.getRequest(); //获取request request.setAttribute("requestKey", "requestValue"); HttpSession session=request.getSession(); //获取session session.setAttribute("sessionKey", "sessionValue"); ServletContext context=ServletActionContext.getServletContext(); //获取context context.setAttribute("servletContextKey", "servletContextValue"); HttpServletResponse response=ServletActionContext.getResponse(); //获取response request.setAttribute("encoding", response.getCharacterEncoding()); return "success"; }