程序员CS

2. Struts2 基础

2016-11-28  本文已影响238人  MPPC

1. Struts2简介

2. Struts2-HelloWorld

<dependencies>
     <dependency>
      <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
     </dependency>
     <!-- javax JSTL的API-->
     <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>servlet-api</artifactId>
         <version>2.5</version>
         <scope>provided</scope>
     </dependency>
     <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>jstl</artifactId>
         <version>1.2</version>
     </dependency>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.5.5</version>
    </dependency>
</dependencies>
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
public String hello (){
   System.out.println("UserAction-hello...........");
   return "success";
}
<struts>
    <constant name="struts.devMode" value="true"/>
    <package name="default" namespace="/" extends="struts-default">
     <action name="hello" class="org.pan.struts2.Helloworld">
            <result name="success">/WEB-INF/views/success.jsp</result>
        </action>
</package>
  • action VS Action
    • action: 应用程序可以完成的每一个操作. 例如: 我们请求 hello
    • Action类: 普通的 Java 类, 可以有属性和方法, 同时必须遵守下面这些规则:
      • 属性的名字必须遵守与 JavaBeans 属性名相同的命名规则. 属性的类型可以是任意类型. 从字符串到非字符串(基本数据库类型)之间的数据转换可以自动发生
      • 必须有一个不带参的构造器
      • 至少有一个供 struts 在执行这个 action 时调用的方法
      • 同一个 Action 类可以包含多个 action 方法.
      • Struts2 会为每一个 HTTP 请求创建一个新的 Action 实例

3. 在Action 中获取Web 资源- Servlet 相关API

/**
* 方式二: 实现 XxxxAware 的接口的方式来 Set 各种解耦的ServletAPI
*/
public class UserAction extends ActionSupport implements ApplicationAware, SessionAware, RequestAware, HttpParametersAware {
    /**
    * 方式二可以在多个方法中公用这些 ServletAPI
    */
    private Map<String, Object> application;
    public void setApplication(Map<String, Object> application) {
        this.application = application;
    }
    private HttpParameters parameters;
    public void setParameters(HttpParameters parameters) {
        this.parameters = parameters;
    }
    private Map<String, Object> request;
    public void setRequest(Map<String, Object> request) {
        this.request = request;
    }
    private Map<String, Object> session;
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }
    /**
    * 方式一: 通过 ActionContext 的方式获取解耦的 ServletAPI
    *
    * @return
    */
    public String getServletAPI_ActionContext() {
        //与Servlet 解耦的方式获取 Struts2 封装的 API
        ActionContext actionContext = ActionContext.getContext();
        Map<String, Object> session = actionContext.getSession();
        //注意session的真实类型是SessionMap,它的内部保存一个Session对象
        //可以通过该对象invalidate方法来使session失效
        SessionMap sessionMap = (SessionMap) session;
        sessionMap.invalidate();
        Map<String, Object> application = actionContext.getApplication();
        // requestMap 获取比较特殊,使用get 方法获取
        Map<String, Object> request = (Map<String, Object>) actionContext.get("request");
        HttpParameters parameters = actionContext.getParameters();
        Map<String, String[]> parametersMap = parameters.toMap();
        session.put("seeesionKey", "sessionValue");
        application.put("applicationKey", "applicationValue");
        request.put("applicationKey", "applicationValue");
        parametersMap.put("parametersMapKey", new String[]{"parametersMapValue"});
        return SUCCESS;
    }
}
/**
 * 方式二: 实现 ServletXxxxAware 接口的方式
 */
public class ServletAPITest extends ActionSupport implements ServletRequestAware, ServletContextAware, ServletResponseAware{
    private HttpServletRequest request;
    private ServletContext context;
    private HttpServletResponse response;
    private HttpSession session;
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    public void setServletContext(ServletContext context) {
        this.context = context;
    }
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }
    /**
     * Session 比较特殊,我们可以在用的时候通过 request 来获取
     */
    private void testGetSession(){
        if (request != null){
            session = request.getSession();
        }
    }
    /**
     * 方式一: 通过 org.apache.struts2.ServletActionContext 的静态方法来获取这些原生的 ServletAPI
     * @return
     */
    public String testServletAPI_ServletActionContext(){
        ActionContext context = ServletActionContext.getContext();
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        //Session 可以通过 request 来获取
        HttpSession session = request.getSession();
        return SUCCESS;
    }
}
上一篇下一篇

猜你喜欢

热点阅读