我在a.jsp中 response.setHeader("aaa","aaavalue"); (a.jsp提交到b.jsp)
在b.jsp中 String str = request.getHeader("aaa");
取到的str值为null,为什么会这样。
服务器环境是tomcat5.5,需要特殊配置吗?
请达人给个解释,谢谢了!

解决方案 »

  1.   


    应该使用 request.setHeader("aaa","value")
    然后才requestt.getHeader("aaa")
      

  2.   

    倒了,request也有setHeader的方法?
      

  3.   

    response.setHeader 是用来设置返回页面的头 meta 信息, 
    使用时 response.setHeader( name, contect ); 但把你的业务参数set到Header上不觉得不伦不类吗服务器环境是tomcat5.5,需要特殊配置吗? 
    请达人给个解释,谢谢了!不要配置和服务器无关
      

  4.   

    但把你的业务参数set到Header上不觉得不伦不类吗 呵呵,各有所需。只要能实现,为什么不用呢我用工具抓包,发现工具里显示,这个aaa的参数已经放到头里面了,就是不知道为什么取不出来。
      

  5.   

    你是用response.setHeader,为什么要用响应做呢!,你就不能用resquest.setAtubute()传一个name 和一个value,然后通过response.getAtrbute()来拿值呢!
      

  6.   

    呵呵,我这么做肯定有我的道理,我想把它写在一个类里,然后通过这个类的方法直接先getHeader ,然后再setHeader ,这样,就不用每个页面都写这些函数了。大概的代码如下,看看就明白了:public void doFilter(ServletRequest request, 
                 ServletResponse response, 
                 FilterChain filterChain) 
                         throws IOException, ServletException {
    HttpServletRequest   httpRequest=(HttpServletRequest)request; 
            HttpServletResponse  httpResponse=(HttpServletResponse)response; 
            
            boolean isValid = true;
            String sessid ="";
            String uriStr = httpRequest.getRequestURI().toUpperCase();
            String err="";
           if(uriStr.indexOf("CHECK.JSP")!=-1){
             sessid ="bbbbbb";// httpRequest.getParameter("sessid") ;
              }
            else{
            
             sessid =httpRequest.getHeader("sessid"); //.getParameter("sessid") ;        }
            if(sessid==null){
             sessid="";
            }        if (uriStr.indexOf("LOGON.JSP")==-1 &&
             sessid.equals("")){         
               isValid = false;         }
            if (isValid){
                //httpRequest.setAttribute("sessid",sessid);
             httpResponse.addHeader("sessid", sessid);
                     filterChain.doFilter(request, response);
            }else{
            
            
         String resendurl="logon.jsp;
         httpResponse.sendRedirect(resendurl);
            
            
            }
    }
      

  7.   

    header 只用于在浏览器和服务器之间进行数据传递。
    如果你在2个java程序间,使用 request.setAttribute
      

  8.   

    在网上搜索了快一天了,终于有点明白了,大概的意思是setHeader的内容只传给浏览器,而getHeader是读取http协议中定义的头参数值,他们两个好像根本就没什么关系。但我想实现的功能是,在一个函数里,把上一页传来的内容里加上一个参数,并赋值,这个用 request.setAttribute 就可以做到 ,但同时想在本页里直接通过函数,在把这个值传送到下一个页面里,这个就很难做到了,不知道大家有没有什么好方法?(实际上就是想做个类似session 的功能,可能有人又说了,用session不就可以了,问题是我的程序使用环境特殊,用session会经常失效,encode(url)也不行的,呵呵我把这个函数的逻辑简单的写一下:
    a.jsp post 到 b.jsp ; b.jsp 又post 到 c.jsp ;以此类推,到d.jsp 、e.jsp .....
    在这个过程中,可能只有从a到b需要传参数sessid的值,而b再往下传时,我不想每页都写上 sessid 这个参数,而是通过函数直接就给当前页面赋上这个值。function fun{
    String sessid=request.getAttribute("sessid") ;
    response.setAttribute("sessid","aaaaaa"); ---问题是根本没有response.setAttribute这个函数,哎
    }可能有人又要说,你怎么那么懒,何必费那个事,直接,在每个页面里都写上这个参数不就完了,但我现在可是要把以前的程序都修改一遍,有上千页啊,每个页面里也可能有n个链接,如果都加上这个参数,那工作量可想而知,所以还请大侠们帮帮忙了。
      

  9.   

    那就无解了。这样不行,那只有变通了。用request.setAttribute("sName","oAttr");
    request.getAttribute("sName");
      

  10.   

    呵呵,楼上的朋友可能不明白request.setAttribute("sName","oAttr");和 request.getAttribute("sName");的含义吧,这两个函数都是针对上一页的,也就是说:a.jsp提交到b.jsp时,如果a.jsp里没用sName这个参数值,则可以用request.setAttribute("sName","oAttr");来给参数sName赋值,在b.jsp中,就可以用request.getAttribute("sName");取到这个值,但这个值无法传到c.jsp中啊,只有在b.jsp提交到c.jsp之前,再次设置request.setAttribute("sName","oAttr");才可以,也就是说这需要在两个post的过程来完成,而我现在想做的是在一个post里来完成的。
    你说的方法还是要在每个页面都重新手动写入sName的值的。