第一种:通过ServletActionContext获取
package com.it.struts2.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
/**
* 获得Servlet Api的两种方式
*
* 1、通过ServletActionContext获取
*
* 2、采用注入的方式,通过实现ServletRequestAware接口获得
*
* @author 侯青华
*
*/
public class GetServletApi {
public String login() {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContext servletContext = ServletActionContext.getServletContext();
return null;
}
}
第二种:采用注入的方式,实现ServletRequestAware接口获得Servlet Api
视图层携带参数的请求会被StrussPrepareAndExcuteFilter过滤器拦截,它会加载Interceptor(拦截器),其中有一个是ServletConfig,当ServletConfig对对应的类执行时,会获得当前访问的Action对象,然后,判断该Action类是否实现了ServletRequestAware接口(根据所需要的HttpServlet对象而定,如下图),然后,将需要的Servlet Api对象注入到action类。
package com.it.struts2.action;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRegistration;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
/**
* 获得Servlet Api的两种方式
*
* 1、通过ServletActionContext获取
*
* 2、采用注入的方式,通过实现ServletRequestAware接口获得
*
* @author 侯青华
*
*/
public class GetServletApi implements ServletRequestAware, ServletResponseAware,ModelDriven<User> {
//采用注入的方式,通过实现ServletRequestAware接口获得
private HttpServletRequest request;
private HttpServletResponse response;
//模型驱动
private User user = new User();
@Override
public User getModel() {
return user;
}
//登录方法
public String login() {
return null;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
}