• 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";  
    }
  • 相关阅读:
    手写DAO框架(六)-框架使用示例
    手写DAO框架(五)-DAO层实现
    堵车时如何快速行车
    win10如何安装mariadb
    工程开发中的“事务”
    通过网页或者移动设备链接跳转qq(tim)添加好友(群)
    通过网页或者移动设备链接跳转qq(tim)添加好友(群)
    蓝桥杯历届真题,算法学习讨论群(互相学习,多交流才能进步)
    项目的登录注册如何用邮箱发送验证码
    项目的登录注册如何用邮箱发送验证码
  • 原文地址:https://www.cnblogs.com/x-jingxin/p/8448618.html
Copyright © 2020-2023  润新知