我有非常奇怪的错误,当我尝试访问它时,我收到请求为null。我总是使用相同的方法来获取它,但现在我遇到了这个错误。
我的行动如下:
package com.deveto.struts.actions;
import com.deveto.hibernate.mappings.Slider;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.util.ServletContextAware;
/**
*
* @author denis
*/
public class ContentAction extends ActionSupport implements ServletContextAware {
HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
ActionContext ac = ActionContext.getContext();
ServletContext sc = (ServletContext) ac.get(ServletActionContext.SERVLET_CONTEXT);
@Override
public String execute() throws Exception {
System.out.println("request: " + request);
return SUCCESS;
}
public ActionContext getAc() {
return ac;
}
public void setAc(ActionContext ac) {
this.ac = ac;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletResponse getResponse() {
return response;
}
public void setResponse(HttpServletResponse response) {
this.response = response;
}
public ServletContext getSc() {
return sc;
}
public void setSc(ServletContext sc) {
this.sc = sc;
}
public void setServletContext(ServletContext sc) {
this.sc = sc;
}
}
现在我什么都不做,请求总是为空
request: null
答案 0 :(得分:2)
实施ServletRequestAware
界面并在此处设置request
变量,而不是在构建期间执行此操作。
但通常你不需要访问请求,因为struts的params拦截器完成了需要请求对象的所有工作。
ServletRequestAware
- 接口的文档:所有想要访问servlet请求对象的操作都必须实现此接口。
只有在servlet环境中使用Action时,此接口才有意义。
请注意,使用此接口会将Action绑定到servlet环境,因此应尽可能避免使用它,因为单元测试等内容将变得更加困难。