Struts2 4中取得Web对象的方式

1.通过ActionContext取Map

2.通过RequestAware,SessionAware,ApplicationAware接口,来注入  三个Map

3.通过ServletActionContext取HttpServletRequest对象

4.通过ServletRequestAware,(ServletResponseAware )来注入HttpServletRequest、(HttpServletResponse)对象

struts.xml 4种配置均在其中

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
 
<struts>
    <!-- 动态调用 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <!-- 开发者模式 -->
    <constant name="struts.devMode" value="true" />
    <!-- 默认包 -->
    <package name="default" namespace="/" extends="struts-default">
       <!-- 4种得到Web对象的方式 -->
       <!-- 1.通过ActionContext取Map-->
       <action name="user1" class="com.edusk.action.User1Action">
               <result>/WebObject.jsp</result>
       </action>
       <!-- 2.通过RequestAware,SessionAware,ApplicationAware接口,来注入  三个Map -->
        <action name="user2" class="com.edusk.action.User2Action">
               <result>/WebObject.jsp</result>
       </action>
          <!-- 3.通过ServletActionContext取HttpServletRequest对象 -->
        <action name="user3" class="com.edusk.action.User3Action">
               <result>/WebObject.jsp</result>
       </action>
       <!-- 4.通过ServletRequestAware,(ServletResponseAware )来注入HttpServletRequest、(HttpServletResponse)对象 -->
       <action name="user4" class="com.edusk.action.User4Action">
               <result>/WebObject.jsp</result>
       </action>
       
    </package>
</struts>

WebObject.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>第${num }种方式</h1>
    <h3>${message }</h3>
    <h1>Action 自己放置的信息可以直接用类型.key取得!!</h1><br/><br/>
    取得action自己放置的信息:<br/><br/>
    errors.name:<s:property value="errors.name"/><br/>
    errors.name[1]:<s:property value="errors.name[1]"/><br/>
    fieldErrors.name[1]:<s:property value="fieldErrors.name[1]"/><br/>
    actionErrors:<s:property value="actionErrors"/><br/>
    actionMessages:<s:property value="actionMessages"/><br/>
    <br/><br/>
    <h1>StrutsWeb对象中的信息, 需要#Web对象.key</h1><br/><br/>
    取得Struts2Web对象值得方式:<br/><br/>
    EL: ${requestScope.username }<br/>
    JSP: <%=request.getAttribute("username") %><br/>
    Struts标签: <s:property value="#request.username"/><br/>
    #session:<s:property value="#session.user"/><br/>
    #application:<s:property value="#application.username"/><br/>
    <s:debug></s:debug>
</body>
</html>

1.通过ActionContext取Map

User1Action.java

package com.edusk.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 1.通过ActionContext取Map
 * @author Maibeli
 *
 */
public class User1Action extends ActionSupport {
    private Map<String, Object> request;
    private Map<String, Object> session;
    private Map<String, Object> application;
    
    public User1Action() {
        request = (Map<String, Object>) ActionContext.getContext().get("request");
        session = ActionContext.getContext().getSession();
        application = ActionContext.getContext().getApplication();
    }
    
    @Override
    public String execute() throws Exception {
        this.addFieldError("name", "wrong");
        this.addFieldError("name", "222");
        this.addActionError("actionerror");
        this.addActionError("actionerror1");
        this.addActionMessage("actionmessage");
        this.addActionMessage("actionmessage2");
        
        request.put("message", "通过ActionContext取Map");
        request.put("num", 1);
        request.put("username", "admin");
        session.put("user", "admin 123");
        application.put("username", "this is true love!");
        return SUCCESS;
    }
}

2.通过RequestAware,SessionAware,ApplicationAware接口,来注入  三个Map

User2Action.java

package com.edusk.action;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 2.通过RequestAware,SessionAware,ApplicationAware接口,来注入  三个Map
 * @author Maibeli
 *
 */
public class User2Action extends ActionSupport implements RequestAware, SessionAware, ApplicationAware{
    private static final long serialVersionUID = 1L;

    private Map<String, Object> request;
    private Map<String, Object> session;
    private Map<String, Object> application;
    
    @Override
    public String execute() throws Exception {
        this.addFieldError("name", "wrong2");
        this.addFieldError("name", "222");
        this.addActionError("actionerror");
        this.addActionError("actionerror1");
        this.addActionMessage("actionmessage");
        this.addActionMessage("actionmessage2");
        
        request.put("num", 2);
        request.put("message", "通过RequestAware,SessionAware,ApplicationAware接口,来注入  三个Map");
        request.put("username", "admin");
        session.put("user", "admin 123");
        application.put("username", "this is true love!");
        return SUCCESS;
    }
    
    @Override
    public void setApplication(Map<String, Object> application) {
        this.application=application;
    }

    @Override
    public void setSession(Map<String, Object> session) {
        this.session=session;
    }

    @Override
    public void setRequest(Map<String, Object> request) {
        this.request=request;
    }
    
}

3.通过ServletActionContext取HttpServletRequest对象

User3Action.java

package com.edusk.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 3.通过ServletActionContext取HttpServletRequest对象
 * @author Maibeli
 *
 */
public class User3Action extends ActionSupport{
    private static final long serialVersionUID = 1L;

    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext application;
    
    public User3Action() {
        this.request=ServletActionContext.getRequest();
        this.session=request.getSession();
        this.application=session.getServletContext();
    }
    
    @Override
    public String execute() throws Exception {
        this.addFieldError("name", "wrong3");
        this.addFieldError("name", "222");
        this.addActionError("actionerror");
        this.addActionError("actionerror1");
        this.addActionMessage("actionmessage");
        this.addActionMessage("actionmessage2");
        
        request.setAttribute("num", 3);
        request.setAttribute("message", "通过ServletActionContext取HttpServletRequest对象");
        request.setAttribute("username", "admin");
        session.setAttribute("user", "admin 123");
        application.setAttribute("username", "this is true love!");
        return SUCCESS;
    }
}

 4.通过ServletRequestAware,(ServletResponseAware )来注入HttpServletRequest、(HttpServletResponse)对象

User4Action.java

package com.edusk.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 4.通过ServletRequestAware,(ServletResponseAware )来注入HttpServletRequest、(HttpServletResponse)对象
 * @author Maibeli
 *
 */
public class User4Action extends ActionSupport implements ServletRequestAware{
    private static final long serialVersionUID = 1L;

    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext application;
    
    @Override
    public String execute() throws Exception {
        this.addFieldError("name", "wrong4");
        this.addFieldError("name", "222");
        this.addActionError("actionerror");
        this.addActionError("actionerror1");
        this.addActionMessage("actionmessage");
        this.addActionMessage("actionmessage2");
        
        request.setAttribute("num", 4);
        request.setAttribute("message", "通过ServletRequestAware,(ServletResponseAware )来注入HttpServletRequest、(HttpServletResponse)对象");
        request.setAttribute("username", "admin");
        session.setAttribute("user", "admin 123");
        application.setAttribute("username", "this is true love!");
        return SUCCESS;
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request=request;
        this.session=request.getSession();
        this.application=session.getServletContext();
    }
}

常用第三种。

posted @ 2016-08-23 13:16  行走在时间之中  阅读(230)  评论(0编辑  收藏  举报