zoukankan      html  css  js  c++  java
  • 【学习】Struts 2 : 实现 Action

    Struts 2 开发流程:

      1、在web.xml 文件中定义核心 Filter 来拦截用户请求。 

      <filter>
          <filter-name>struts2</filter-name>
          <filter-class>
              org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
          </filter-class>
      </filter>
      <filter-mapping>
          <filter-name>struts2</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>

      2、如果需要以POST方式提交请求,则定义包含表单数据的JSP页面。如果仅仅以GET方式发送请求,则无须经过这一步。

      3、定义处理用户请求的 Action类。

      4、配置Action。配置Action 就是指定哪个请求对应哪个Action进行处理,从而让核心控制器根据配置来创建合适的Action 实例。 

            <action name="login" class = "LoginAction">
                ...
            </action>

      5、配置处理结果和物理视图资源之间的对应关系(配置Result)。 

            <action name="login" class = "LoginAction">
                <result name = "success">login_success.jsp</result>
            </action>

      6、编写视图资源。

    实现 Action

      Action 类包含了对用户请求的处理逻辑,Action 类也被称为业务控制器。

      Struts 2 通常直接使用 Action 来封装 HTTP 请求参数,因此,Action 类里还应该包含与请求参数对应的属性,并且为这些属性提供对应的setter 和 getter方法。

       

    package Action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class LoginAction extends ActionSupport
    {
        private String username ;
        private String password ;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String execute() throws Exception {
            // TODO Auto-generated method stub
            return SUCCESS;
        } 
        
    } 

      上面代码继承了 ActionSupport 类,其目的是为了让用户开发Action 类 更规范。

      Action 访问 Servlet API :

      Struts 2 提供了一个 ActionContext 类 ,Action 可以通过 该类来访问 Servlet API 。 ActionContext 类中包含的几个常用的方法。

        > Object get(Object key) : 类似调用 HttpServletRequest 的 getAttribute(String name) 方法 。 

        > Map getApplication()  : 返回一个Map 对象, 模拟了该应用的 ServletContext 实例。

        > static ActionContext getContext() : 获取 ActionContext 实例。  

        > Map getParameters() : 获取所有请求参数。类似调用 HttpServletRequest 的 getParameterMap() ; 

        > Map getSession() : 返回一个 Map  对象,该对象模拟了 HttpSession 实例。 

        > void setApplication ( Map application) : 直接传入一个Map实例,将该Map实例里的key-value 对转换成 application 的属性名、属性值。

        > void setSession (Map session) : 和 setApplication(Map application) 相似。

    配置 Action

      实现了 Action 类之后,剩下的便是在 struts.xml 文件中配置该 Action 了。所谓配置 Action 就是让 应用知道哪个 Action 该处理哪个请求,也就是完成用户请求和Action 的对应关系。如下: 

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
        <include file = "struts-default.xml" />
        <package name="default" extends = "struts-default">
            <action name="login" class = "LoginAction">
                <result name = "success">login_success.jsp</result>
            </action>
        </package>
    </struts>    

      Struts 2 使用包来阻止Action ,因此,将Action 定义放在包定义下完成,定义Action 通过使用 <package .../> 下的 子元素<action .../> 来完成。

      <package ../> 元素 中的几个属性:

        > name : 该属性指定 该包的名字,该名字是该包被其他包引用的key  。 

        > extends : 该属性指定该包继承其他包。继承其他包,可以继承其他包中的Action定义、拦截器定义等。

        > namespace : 定义该包的命名空间。为了处理同一个Web应用中包含同盟Action的情形。

        > abstract : 定义该包是否为一个抽象包,抽象包中不能包含 Action 定义 。 

         Struts 2 框架中核心组件就是Action 、 拦截器 等, Struts 2 框架使用包来管理 Action 和拦截器等。每一个包就是多个Action、多个拦截器、多个拦截器应用的集合。

      下面介绍<action ../> 元素 中的几个属性:

        > name : 该Action 的名字,也指定了该Action所处理的请求URL 。 

        > class  : 指定了 该Action的实现类。

        > method : 指定 Action 调用某一个方法,而不是execute 方法来处理用户请求。  

    <package name = "default" extends = "struts-default">
            <!-- 添加action -->
            <action name="register" class = "userAction" method = "register">
                <result name = "success">/register_success.jsp</result>
            </action>
            <action name="login" class = "userAction">
                <result name = "success">/login_success.jsp</result>
                <result name = "error">/login.jsp</result>
            </action>
            <action name="logout" class = "userAction" method = "logout">
                <result name = "success">/index.jsp</result>
            </action>
        </package>

        如上,虽然定义了三个Action, 但每一个Action 的 Class  属性值是一样的。通过指定method属性,让Action 调用指定的方法来处理用户请求。

      Action 只是一个逻辑控制器,它并不是直接对浏览者生成任何响应。因此,Action 处理完用户请求后,Action需要将指定的视图资源呈现给用户。所以在配置Action时应该配置逻辑视图和物理视图资源之间的一次映射(上面代码中的 result 子元素)。

  • 相关阅读:
    mysql获取给定时间段内的所有日期列表
    mysql中的年,月,日统计以及日历表的实现
    MySQL5.7安装配置
    获取ip地址
    Intellij热部署插件JRebel
    IntelliJ IDEA2018版热部署jrebel插件安装使用教程
    idea插件篇之java内存分析工具(JProfiler)
    mysql中的整除,取余
    SIMD.mul (SIMD) – JavaScript 中文开发手册
    Java面试题 : 如何确保N个线程访问N个资源的同时又不导致死锁
  • 原文地址:https://www.cnblogs.com/jbelial/p/2584738.html
Copyright © 2011-2022 走看看