出发jsp:

<?xml version="1.0" encoding="GB18030" ?>

<%@ page language="java" contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>

<% String context = request.getContextPath(); %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "​​http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"​​​​>

<html xmlns="​​http://www.w3.org/1999/xhtml"​​​​>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />

<title>Insert title here</title>

</head>

<body>

取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:

<ol>

    <li>前三者:依赖于容器</li>

    <li>前三者:IOC</li> (只用这种)

    <li>后三者:依赖于容器</li>

    <li>后三者:IOC</li>

</ol>

<br />

<form name="f" action="" method="post">

用户名:<input type="text" name="name"/>

密码:<input type="text" name="password"/>

<br />

<input type="button" value="submit1" onclick="javascript:document.f.action='login/login1';document.f.submit();" />

<input type="button" value="submit2" onclick="javascript:document.f.action='login/login2';document.f.submit();" />

<input type="button" value="submit3" onclick="javascript:document.f.action='login/login3';document.f.submit();" />

<input type="button" value="submit4" onclick="javascript:document.f.action='login/login4';document.f.submit();" />

</form>


</body>

</html>



struts配置文件:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "​​http://struts.apache.org/dtds/struts-2.0.dtd"​​​​>

<struts>

    <constant name="struts.devMode" value="true" />

    <package name="login" extends="struts-default" namespace="/login">

        <action name="login*" class="com.bjsxt.struts2.user.action.LoginAction{1}">

            <result>/user_login_success.jsp</result>

        </action>

    </package>

</struts>



四种方式的Action:


import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction1 extends ActionSupport {


    private ​Map​ request;

    private ​Map​ session;

    private ​Map​ application;


    public LoginAction1() {

        request = (Map)​ActionContext​.getContext().get("request");//static java.lang.​ThreadLocal​ actionContext;

        session = ​ActionContext​.getContext().getSession();

        application = ​ActionContext​.getContext().getApplication();

    }


    public String execute() {

        request.put("r1", "r1");

        session.put("s1", "s1");

        application.put("a1", "a1");

        return SUCCESS;

    }

}


②(推荐方式)

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.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction2 extends ActionSupport ​implements​ ​RequestAware​,​SessionAware​, ​ApplicationAware​ {


    private Map<String, Object> request;

    private Map<String, Object> session;

    private Map<String, Object> application;


    //DI dependency injection 称之为 依赖注入

    //IoC inverse of control 或者 控制反

    public String execute() {

        request.put("r1", "r1");

        session.put("s1", "s1");

        application.put("a1", "a1");

        return SUCCESS;

    }

    @Override

    public void setRequest(Map<String, Object> request) {

        this.request = request;

    }

    @Override

    public void setSession(Map<String, Object> session) {

        this.session = session;

    }

    @Override

    public void setApplication(Map<String, Object> application) {

        this.application = application;

    }



}



import javax.servlet.ServletContext;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction3 extends ActionSupport {


    private ​HttpServletRequest​ request;

    private ​HttpSession​ session;

    private ​ServletContext​ application;


    public LoginAction3() {

        request = ​ServletActionContext​.getRequest();

        session = request.getSession();

        application = session.getServletContext();

    }


    public String execute() {

        request.setAttribute("r1", "r1");

        session.setAttribute("s1", "s1");

        application.setAttribute("a1", "a1");

        return SUCCESS;

    }


}


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;

public class LoginAction4 extends ActionSupport implements ​ServletRequestAware​ {


    private ​HttpServletRequest​ request;

    private ​HttpSession​ session;

    private ​ServletContext​ application;




    public String execute() {

        request.setAttribute("r1", "r1");

        session.setAttribute("s1", "s1");

        application.setAttribute("a1", "a1");

        return SUCCESS;

    }


    @Override

    public void setServletRequest(HttpServletRequest request) {

        this.request = request;

        this.session = request.getSession();

        this.application = session.getServletContext();

    }


}


到jsp:

<?xml version="1.0" encoding="GB18030" ?>

<%@ page language="java" contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>

    <%@taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "​​http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"​​​​>

<html xmlns="​​http://www.w3.org/1999/xhtml"​​​​>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />

<title>Insert title here</title>

</head>

<body>

    User Login Success!

    <br />

    <s:property value="#request.r1"/> | <%=request.getAttribute("r1") %> <br />

    <s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> <br />

    <s:property value="#application.a1"/> | <%=application.getAttribute("a1") %> <br />

    <s:property value="#attr.a1"/><br />

    <s:property value="#attr.s1"/><br />

    <s:property value="#attr.r1"/><br />

    <s:debug></s:debug>

    <br />

</body>

</html>


标示符“#+key”,用于取context中的内容