①通过"org.apache.struts2.ServletActionContext"可以获取到:
"struts.xml"配置文件:
<?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>
<!--
修改"struts.action.extension"属性
"struts.devMode"包含了"struts.configuration.xml.reload"的功能
-->
<constant name="struts.action.extension" value="do,,"></constant>
<constant name="struts.devMode" value="true"></constant>
<package name="hello1" extends="struts-default" namespace="/hello1">
<action name="test1" class="com.rl.action.HelloAction" method="hello1">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
动作类代码:
package com.rl.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{
public String hello1(){
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
//3种方法都可以获取"ServletContext"的域对象
ServletContext context1 = session.getServletContext();
ServletContext context2 = request.getServletContext();
ServletContext context3 = ServletActionContext.getServletContext();
System.out.println(request);
System.out.println(response);
System.out.println(session);
System.out.println(context1);
System.out.println(context2);
System.out.println(context3);
return SUCCESS;
}
}
控制台输出:
org.apache.struts2.dispatcher.StrutsRequestWrapper@ea3111
org.apache.catalina.connector.ResponseFacade@13b735c
org.apache.catalina.session.StandardSessionFacade@129da5
org.apache.catalina.core.ApplicationContextFacade@2beffd
org.apache.catalina.core.ApplicationContextFacade@2beffd
org.apache.catalina.core.ApplicationContextFacade@2beffd
②通过实现接口"org.apache.struts2.interceptor.ServletRequestAware"和"org.apache.struts2.interceptor.ServletResponseAware"的方式来获取Servlet的API
"struts.xml"配置文件:
<package name="hello1" extends="struts-default" namespace="/hello1">
<action name="test1" class="com.rl.action.HelloAction" method="hello1">
<result name="success">/success.jsp</result>
</action>
<action name="test2" class="com.rl.action.HelloAction2" method="hello2">
<result name="success">/success.jsp</result>
</action>
</package>
动作类代码:
package com.rl.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction2 extends ActionSupport implements ServletRequestAware, ServletResponseAware{
HttpServletRequest request;
HttpServletResponse response;
public String hello2(){
System.out.println(request);
System.out.println(request.getSession());
System.out.println(response);
System.out.println(request.getServletContext());
//传参也是能够接收到的
System.out.println(request.getParameter("name"));
return SUCCESS;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
}
结果: