今天下午我发了一文
遇到一个吐血小问题!!!
通过jQuery从视图没有得到Action中response返回的信息,
其根本原因可能是因为response本身就是null,response是从如下的BaseAction中得到的,
现在请问,为什么response会是null?环境struts2+spring+hiberpackage test.s2sh.action;import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;public class BaseAction extends ActionSupport {   
    private static final long serialVersionUID = 7620009925942346125L;   
    ActionContext context = ActionContext.getContext();   
    HttpServletRequest request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST);   
    HttpServletResponse response = (HttpServletResponse) context.get(ServletActionContext.HTTP_RESPONSE);   
    //HttpServletResponse response = ServletActionContext.getResponse();
    Map session = context.getSession();   

解决方案 »

  1.   

    TestAction如下:package test.s2sh.action;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.URLDecoder;public class TestAction extends BaseAction 

      private String username; 
      public String getUsername() { 
      return username; 

    public void setUsername(String username) { 
      this.username = username; 

    public String test() throws IOException 

            try{
            response.setContentType("text/html; charset=utf-8");
            }catch(java.lang.NullPointerException e){
             System.out.println("response null"); 
            }
    //        PrintWriter out=response.getWriter();
    //        out.write("dddddd"+username);
    //      catch (UnsupportedEncodingException e) { 
    //             // TODO Auto-generated catch block 
    //             e.printStackTrace(); 
    //        } 
           return null; 

      

  2.   

    strut1是可以的,struts2不能这样用。单独写个servlet或者用struts2的ajax去实现
      

  3.   

    期待 想用用JQUERY呢 
      

  4.   

    通过jQuery从视图没有得到Action中response返回的信息,你的jquery代码贴出来,我看下
      

  5.   

    在TestAction.test() 里写  HttpServletResponse response = ServletActionContext.getResponse();
      

  6.   

    test方法里的response哪里来的 重新获得
      

  7.   

    response就是用了BaseAction中的response啊。。继承来的嘛因为项目紧,我已经回到struts1了
      

  8.   

    你的action 是不是用spring配置了,如果是就可能有这个问题。原因是服务器启动的时候,spring已经对action进行了实例化,而action在实例化的时候,也执行了 HttpServletRequest request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST); 服务器启动的时候,这个request 肯定是为null的,建议将HttpServletRequest request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST); 写在方法体内来获取。
      

  9.   

    action 线程是安全的..actioncontext 每一个action都有自己的一个.保存了此次的request,response,session信息.BasicAction里的response 是它的actioncontext里的.你的请求不是BasicAction.那么response=null 正确.你TestAction里用它的response当然为null. 也是正确的,没有问题.如果通过继承解决request和response,session问题.正确写法:package com.test.action;import java.util.Map;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import com.opensymphony.webwork.interceptor.ServletRequestAware;
    import com.opensymphony.webwork.interceptor.ServletResponseAware;
    import com.opensymphony.webwork.interceptor.SessionAware;
    import com.opensymphony.xwork.ActionSupport;public abstract class BasicActionSuport extends ActionSupport 
    implements ServletRequestAware,ServletResponseAware,SessionAware{protected String funccode;protected HttpServletRequest request;protected HttpServletResponse response;protected Map session;public String getFunccode() {
    return funccode;
    }public void setFunccode(String funccode) {
    this.funccode = funccode;
    }public void  setServletResponse(HttpServletResponse response){
        this.response=response;
    }
    public void setServletRequest(HttpServletRequest request) {
    this.request = request;
    }public void setSession(Map session) {
    this.session = session;
    }
    }
      

  10.   

    http://mopishv0.blog.163.com/blog/static/544559322009111692041534/
    http://mopishv0.blog.163.com/blog/static/544559322009111691715660/
    希望对你有帮助
      

  11.   


    正解。
    public class BaseAction extends ActionSupport implements ServletRequestAware, ServletResponseAware
    {
        private static final long serialVersionUID = -2890511714520633142L;    private static final Log log = LogFactory.getLog(BaseAction.class);
        protected HttpServletRequest request;
        protected HttpServletResponse response;
        protected HttpSession session;    protected void ajaxPack(String retStr)
        {
            try
            {
                PrintWriter out = null;
                request.setCharacterEncoding("UTF-8");
                response.setContentType("text/html;charset=UTF-8");
                out = response.getWriter();
                out.write(retStr);
                out.flush();
                out.close();
            }
            catch (Exception e)
            {
                log.error("包装AJAX请求时异常", e);
            }
        }    public void setServletRequest(HttpServletRequest request)
        {
            this.request = request;
            this.session = request.getSession();
        }    public void setServletResponse(HttpServletResponse response)
        {
            this.response = response;
        }
      

  12.   

    我有空啦!
    请问这里使用的是IOC吗?HttpServletRequest request和HttpServletResponse response从哪里得到的呢?请教
      

  13.   


    ServletRequestAware, ServletResponseAware只要实现这两个接口,Spring会自动注入的。