public class ValidationCodeAction extends ActionSupport implements
ServletResponseAware, ServletRequestAware
{
private HttpServletRequest request; private HttpServletResponse response; public void setServletResponse(HttpServletResponse response)
{
System.out.println("ValidationCodeAction.setServletResponse");
this.response = response; }
}
如上面的部分代码,在执行过程中我发现并不能自动的获取HttpServletResponse 对象,在execute方法中使用response时就会出现NullPointerException异常,为什么呢?

解决方案 »

  1.   

    继承 ActionSupport  后  要这样获取 request response对象HttpServletRequest request = ServletActionContext.getRequest();
    HttpServletResponse response = ServletActionContext.getResponse();
    HttpSession session = request.getSession();
      

  2.   

    import java.util.Map;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;
    import org.apache.struts2.interceptor.ServletResponseAware;
    import org.apache.struts2.interceptor.SessionAware;import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;publicclass IoCServlet extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
        private String message;
        private Map att;
        private HttpServletRequest request;
        private HttpServletResponse response;   
       
        public String getMessage() {
            return message;       
        }
       
        publicvoid setSession(Map att) {
            this.att = att;
        }
       
        publicvoid setServletRequest(HttpServletRequest request) {
            this.request = request;
        }
       
        publicvoid setServletResponse(HttpServletResponse response) {
            this.response = response;
        }
       
        @Override
        public String execute() {       
            att.put("msg", "Hello World from Session!");
           
            HttpSession session = request.getSession();
           
            StringBuffer sb =new StringBuffer("Message from request: ");
            sb.append(request.getParameter("msg"));
            sb.append("<br>Response Buffer Size: ");
            sb.append(response.getBufferSize());
            sb.append("<br>Session ID: ");
            sb.append(session.getId());
           
            message = sb.toString();
            return SUCCESS;
        }
    }
      

  3.   

    LZ的代码,除了少setServletRequest方法之外,没什么问题啊。
      

  4.   

    import java.util.Map;import javax.servlet.http.HttpServletRequest;
    import javax.www.cctv40.cnservlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;
    import org.apache.struts2.interceptor.ServletResponseAware;
    import org.apache.struts2.interceptor.SessionAware;import com.opensymphony.xwork2.ActionContext;
    import com.www.cctv40.comopensymphony.xwork2.ActionSupport;publicclass IoCServlet extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
        private String message;
        private Map att;
        private HttpServletRequest request;
        private HttpServletResponse response;   
       
        public String getMessage() {
            return message;       
        }
       
        publicvoid setSession(Map att) {
            this.att = att;
        }
       
        publicvoid setServletRequest好复杂哦
      

  5.   

    你没加 HttpServletRequest,HttpServletResponse的setter方法,应该是没有注入到spring里面去
    所以程序找不到接口抛空指针了。
      

  6.   


    应该是没有注入的问题还有你的变量都是private 如果不写get方法 那就只能本类里面使用了