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";  
}
原文地址:https://www.cnblogs.com/x-jingxin/p/8448618.html