我写了一个JSP接受数据输入和两个Servlet在同一个包中,第一个处理完数据库操作后把视图传递给第二个Servlet,最后再传递给显示的JSP页面,是利用RequestDispatcher.forward(request,response); 来传递的.
首先是从JSP提交到第一个Servlet,但是为什么到了第一个Servlet后就不传递了,页面是空白.不知道为什么?

解决方案 »

  1.   

    第一个Servlet!
    package com.servlets;
    import java.sql.*;
    import javax.sql.*;
    import javax.servlet.http.*;
    import javax.servlet.*;
    import java.util.*;
    import java.util.Date;
    import java.io.*;
    public class AddMessageServlet extends HttpServlet {private Connection conn=null;public void  doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException ,IOException{
      String title=request.getParameter("title");
      String name=request.getParameter("name");
      String email=request.getParameter("email");
      String content=request.getParameter("content");
      Date time=new Date();
      if(title==null) title="";
      if(name==null) name="";
      if(email==null) email="";
      if(content==null) content="";
      try{
      String query="insert into message(?,?,?,?,?)";
      PreparedStatement  stat=conn.prepareStatement(query);
      stat.setString(1,title);
      stat.setString(2,name);
      if(email.length()==0) 
      stat.setString(4,null);
      else
      stat.setString(4,email);
      stat.setString(5,content);
      stat.setObject(3,time);
      
      try{
      
      stat.executeQuery(query);
      
      }catch(Exception e){e.printStackTrace(); }
      
      RequestDispatcher rd=request.getRequestDispatcher("/viewMessage_servlet");
      if(rd!=null){
      System.out.println("页面正在转入....");
      }
      rd.forward(request,response);
      
      
      }catch(Exception e){e.printStackTrace(); }
    }
    public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
    doGet(request,response);
    }public AddMessageServlet() {
    String url="jdbc:mysql://localhost:3306/lionest";
    String driver="com.mysql.jdbc.Driver";
    String user="root";
    String password="1229";
    try{
    Class.forName(driver);DriverManager.getConnection(url,user,password);}catch(Exception e){
    e.printStackTrace();
    }
    }}第二个!
    package com.servlets;
    import javax.sql.*;
    import java.sql.*;
    import java.io.*;
    import javax.servlet.http.*;
    import javax.servlet.*;
    import java.util.Date;
    import java.util.*;public class ViewMessageServlet extends HttpServlet {private Connection conn=null;
    private Collection messages=new ArrayList();
    private Message message=null;public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {try {
    Statement stat=conn.createStatement();
    String query="select count(*) from message";
    ResultSet rs=stat.executeQuery(query);
    int count=0;
    if(rs.next()){
    count=rs.getInt(1);
    }
    else
    if(count>0) {
    rs=stat.executeQuery("select * from message");
    while(rs.next()){
    String title=rs.getString("title");
    String name=rs.getString("name");
    String email=rs.getString("email");
    String content=rs.getString("content");
    Date time=rs.getDate("time");Message message=new Message();
    message.setTitle(title);
    message.setName(name);
    message.setEmail(email);
    message.setContent(content);messages.add(message);}
    rs.close();
    conn.close();
    }
    request.setAttribute("messages",messages);
    RequestDispatcher rd=request.getRequestDispatcher("/View.jsp");
    rd.forward(request,response);}catch(SQLException e){
    e.printStackTrace();
    }}public void setMessage(){
    this.message=message;
    }public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
    doGet(request,response);
    }
    public ViewMessageServlet() {
    String driver="com.mysql.jdbc.Driver";
    String url="jdbc:mysql://localhost:3306/lionest";
    String user="root";
    String password="1229";
    try{
    Class.forName(driver);DriverManager.getConnection(url,user,password);}catch(Exception e){
    e.printStackTrace();
    }}
    }
      

  2.   

    request 带的参数是请求参数,只能传递一次的。
      

  3.   

    1.你怎么知道没有传到第二个servlet?你第二个servlet连输出语句都没有。
    2.
    if(rs.next()){
    count=rs.getInt(1);
    }
    else
    if(count>0) {......}
    这句代码,如果你判断了rs.next()成立,那else以后的代码自然不可以执行,就是说if(count>0)是不会执行的;这个servlet执行的结果就是得到了一个没起任何作用的count而已,下面往数据库添加记录的代码肯定不会执行的。
      

  4.   

    request 带的参数是请求参数,只能传递一次的。
        回答错误,0分.
    问题看了楼上的,我想你应该知道是哪里错了吧?
      

  5.   

    谢谢了!真是太大意了!呵呵
    再问下
    如果本页面提交数据给自己,但是上一个页面也提交数据给这个页面,是不是当本页面提交时,上一个页面提交的数据就失效了?或者只是request范围里失效?
      

  6.   

    失效了,在任何范围都失效了,除非你用session.setAttribute或者更大范围的application.setAttribute将数据保存到session或application中