这里应该用Forward,把request一起传递过去,否则当然在request里找不到了。sendRedirect最好只用来切换网页;用到传送对象的时候,应当用Forward。
一是因为Forward能把request里的东西一起传递到目的URL。
二是因为Forward只在Server一段转递,不需要再经过网络上的一个回路,节省时间。而sendRedirect必须把信息再送回客户端,经由浏览器再解析重新发回服务器,在网络上整整绕了一大圈。
其实Forward是推荐的方法。

解决方案 »

  1.   

    Bean1 b = new Bean1();
    request.setAttribute("d", b.testXML());        
    response.sendRedirect(parserURL);
    改成:
    Bean1 b = new Bean1();
    request.setAttribute("d", b.testXML());        
    request.getRequestDispatcher(parserURL).forward(request,response);
      

  2.   

    楼上的大侠:
    按照你上面这样做我的JSP代码需不需要另要写些什么呀.我现在的JSP里是这样写的:
    <%
     String str=(String)request.getAttribute("d");
      out.print("d="+str);
    %>
    可是打出来d是null,这是怎么回事,我在servlet用最简单的设置:
    request.setAttribute("d","this is d");
    应该没道理出错呀,!
    请指教!
      

  3.   

    这是servlet的代码
    ----------------------------------------------------------------------------------
    package xmlproject;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import testejb.*;
    import xmlproject.*;public class testServlet
        extends HttpServlet {
      private static final String CONTENT_TYPE = "text/html; charset=GBK";
      String parserURL =
          "http://developer:7001/jstl/standard-examples/xml1/Parse.jsp";
      //Initialize global variables
      public void init() throws ServletException {
      }  //Process the HTTP Get request
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws
          ServletException, IOException {
        doPost(request, response);
      }  //Process the HTTP Post request
      public void doPost(HttpServletRequest request, HttpServletResponse response) throws
          ServletException, IOException {
    //    response.setContentType(CONTENT_TYPE);
        String redirect=request.getParameter("redirect") ;
        redirect="init";
        if(redirect.equals("init") ){
          try{
            Bean1 b = new Bean1();
            request.setAttribute("d", b.testXML());
            request.setAttribute("a","a") ;
            request.getRequestDispatcher(parserURL).forward(request,response);
    //        response.sendRedirect(parserURL);
            //return;
          }catch(Exception ex){
            ex.printStackTrace() ;
          }
        }else if(redirect.equals("add") ){      response.sendRedirect(parserURL);
        }else if(redirect.equals("upd")){
          response.sendRedirect(parserURL);
        }else if(redirect.equals("del")){
          response.sendRedirect(parserURL);
        }  }
      //Clean up resources
      public void destroy() {
      }
    //  RequestDispatcher rd = this.getServletContext().getRequestDispatcher( "/servlet/ControlCenter?FunctionID=1021&flag=0&id=" + id );
    //req.setAttribute("sqls",sqls);
    //rd.forward( req, res );
    //在jsp中的forward在servlet中对应的应该是这样的,可以把参数传过去。
    //在req中还可以传一些别的对象。}
    ----------------------------------------------------------------------------------
                                     这是JSP的代码
    ----------------------------------------------------------------------------------
    <%@ page contentType="text/html; charset=gb2312" import="java.util.*" %>
    <html>
    <head><meta http-equiv="Content-Type" content="text/html; charset=GB2312">  <title>JSTL: XML Support -- Parse</title>
    </head>
    <body bgcolor="#FFFFFF">
    <h3>Parse from Objects and URLs</h3>    <%
      String str=(String)request.getAttribute("a");
      out.print("a="+str);
      %>
    </body>
    </html>
    ----------------------------------------------------------------------------------
                  全在这里了,高手过目一下!多谢.
      

  4.   

    String parserURL =
          "http://developer:7001/jstl/standard-examples/xml1/Parse.jsp";
    应该是这个链接地址的原因,你写成String parserURL = "/jstl/standard-examples/xml1/Parse.jsp";
    看一下.
      

  5.   

    我在resin2.1.5下的测试例子(正常的,结果是显示"test"),你试一下看看,不知道会不会是服务器不同的原因!
    //TPost.java
    ----------------------------------------------------------------------------
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class  TPost extends HttpServlet
    {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
    String url = "/2.jsp";
    request.setAttribute("b", "test");
    request.getRequestDispatcher(url).forward(request, response);
    } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
    doGet(request, response);
    }
    }
    ------------------------------------------------------------------------------
    2.jsp
    ------------------------------------------------------------------------------
    <%@ page language="java" contentType="text/html;charset=gb2312"%>
    <%
    String b = (String)request.getAttribute("b");
    out.print(b);
    %>
      

  6.   

    多谢风大哥,小弟在杭州混,主要是搞j2ee开发企业网站的,以后多多交流,谢谢.