本人用JSP+Servlet+JavaBean做了个留言板,里面的JavaBean的就是就是照着书上敲的代码,敲完没有做什么动作。
登录界面(login.jsp)是提交到一个mainServlet.java的。
但是登录后还是在留在login.jsp界面。
而在login.jsp界面点击注册后可以跳转到注册界面(register.jsp)
在注册界面注册提交后是到Resgister.java的。它能跳转但是页面一片空白。
导航栏变成http://localhost:8080/JSPExample/registerServlet
这是怎么回事呢?
是javaBean要配置我没配置?还是什么原因?

解决方案 »

  1.   

    mainServlet.java
    是一个servlet类,并不是页面文件,这个类要配合web.xml中的配置才能提交进去。
    JSP和JSP之间跳转是不用配置而可以直接跳的。
    看下面的web.xml文件配置:  <servlet>
        <servlet-name>TestServlet1</servlet-name>
        <servlet-class>com.pyh.test.service.TestServlet1</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>TestServlet1</servlet-name>
        <url-pattern>/test1/mainServlet</url-pattern>
      </servlet-mapping>
    servlet-name:可随意,有两处,要一致
    servlet-class:指定你的mainServlet,注意是包.类名,没有java或class后缀
    url-pattern:提交路径,也是你的form表单中action中的路径
      

  2.   

    javaBean不需要注册,我觉得是你提交到register.java之后,就没有再跳转到jsp页面了,因为servlet是在浏览器上不显示的
      

  3.   

     <servlet>
        <servlet-name>TestServlet1</servlet-name>
        <servlet-class>com.pyh.test.service.TestServlet1</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>TestServlet1</servlet-name>
        <url-pattern>/test1/mainServlet</url-pattern>
      </servlet-mapping>你的servlte需要在web.xml配置地址, 这样表单提交相应的地址 就会到对应的servlet里面
      

  4.   

    1. 登录界面(login.jsp)是提交到一个mainServlet.java的。但是登录后还是在留在login.jsp界面。

    你确定你已经提交到mainServlet.java中了,最好在你的方法体里面输出一些东西看看。
    如果你能跳转进来,那么你判断成功了之后有调转到其他地方去吗?response.redirect(url)或者request.getRequestDispatcher(url).forward(request,response);
    这样才能跳转出去。

    2. 在login.jsp界面点击注册后可以跳转到注册界面(register.jsp)

    这个只是一个超链接,不涉及你后台程序,所以只要路径正确肯定能跳转过去

    3. 在注册界面注册提交后是到Resgister.java的。它能跳转但是页面一片空白。导航栏变成http://localhost:8080/JSPExample/registerServlet

    和第一点一样,你要确定是跳转到对应的servlet里面去了,然后判断成功以后要控制他的跳转

    如果你使用的是out.write("")那就把你要显示的内容写在里面就OK了,不需用跳转页面了!

      

  5.   


    大概明白你的意思。但是注册后,Resgister.java里面有response.sendRedirect("login.jsp");的,可是它一直停留在http://localhost:8080/JSPExample/registerServlet的空白页面,没有跳转到login.jsp是怎么回事呢?是数据库问题吗?
      

  6.   


    debug或者用System.out.println();看看走到哪一步了数据库的问题的话那他报异常了吗?
      

  7.   

    数据库表:User表(id(int),username(varchar),password(varchar)),lyTable表(id(int),userId(int),date(datetime),title(varchar),conten(varchar))
    对应的javaBean
    package model;public class User {
        private int id;
        private String username;
        private String password;
        
        public void setId(int id)
        {
         this.id=id;
        }
        public int getId()
        {
         return id;
        }
        
        public void setUsername(String username)
        {
         this.username=username;
        }
        public String getUsername()
        {
         return username;
        }
        
        public void setPassword(String password)
        {
         this.password=password;
        }
        public String getPassword()
        {
         return password;
        }}
    package model;
    import java.sql.*;
    public class LyTable {
    private int id;
    private int userId;
    private Date date;
    private String title;
    private String conten;

    public void setId(int id)
    {
    this.id=id;
    }
    public int getId()
    {
    return id;
    }

    public void setUserId(int userId)
    {
    this.userId=userId;
    }
    public int getUserId()
    {
    return userId;
    }

    public void setDate(Date date)
    {
    this.date=date;
    }
    public Date getDate()
    {
    return date;
    }

    public void setTitle(String title)
    {
    this.title=title;
    }
    public String getTitle()
    {
    return title;
    }

    public void setConten(String conten)
    {
    this.conten=conten;
    }
    public String getContent()
    {
    return conten;
    }
    }
    login.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
      <title>简易留言板</title>
      </head>
      
      <body  bgcolor="#E3E3E3">
      <form action="mainServlet" method="post">
      <table>
      <caption>用户登录</caption>
           <tr>
            <td>登录名:</td>
            <td>
               <input type="text" name="username" size="20"/>
            </td>
           </tr> 
           <tr>
            <td>密码:</td>
              <td>
               <input type="password" name="pwd" size="20"/>
              </td>
           </tr>
      </table>
      <input type="submit" value="登录"/>
      <input type="reset" value="重置"/>
      </form>
      如果没有注册请单击<a href="register.jsp">这里</a>注册
      </body>
     
    </html>mainServlet.java
    package servlet;
    import java.io.*;import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import model.User;
    import db.DB;
    @SuppressWarnings("serial")
    public class MainServlet extends HttpServlet{
    @SuppressWarnings("unchecked")
    public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException
    {
    //设置请求编码
    request.setCharacterEncoding("gb2312");
    //设置响应编码编码
    response.setContentType("gb2312");
    //获取JSP页面输入的用户值
    String username=request.getParameter("username");
    //获得JSP页面输入的密码值
    String pwd=request.getParameter("pwd");
    //建立DB类对象,使用其中的方法来完成判断
    DB db=new DB();
    //获得session对象,用来保存信息
    HttpSession session=request.getSession();
    //先获得user对象,如果是第一次访问该Servlet,用户对象肯定为空。但如果是
    //第二次第三次,就不应该判断该用户信息\
    User user=(User)session.getAttribute("user");
    //这里就是判断,如果用户是第一次进入,调用DB的方法判断
    if(user==null)
    {
    user=db.checkUser(username,pwd);
    }
    //吧user对象存在session中。
    session.setAttribute("user",user);
    if(user!=null)
    {
    //这里根据用户查询,用户不为空,表示用户密码正确,应该去下一个页面
    //这里去下一个页面,主页面包含了所有的留言信息,所以要从留言板表中查出来
    ArrayList al=db.findLyInfo();
    //把查询的信息保存在session中。
    session.setAttribute("al",al);
    //然后跳转到我们要去的页面
    response.sendRedirect("main.jsp");
    }

    else
    {
    //如果用户名和密码错误,回到登录界面
    //out.write("用户名或密码出错");
    response.sendRedirect("login.jsp");
    }
    }
    public void doPost(HttpServletRequest request,HttpServletResponse response)
     throws ServletException,IOException{
    doGet(request,response);
    }
    }
    DB.java
    package db;
    import java.sql.*;
    import java.util.*;
    import model.LyTable;
    import model.User;
    public class DB {
    Connection ct;
    PreparedStatement pstmt;
    //在构造函数中建立与数据库连接,这样在建立DB对象时就连接了数据库
    public DB()
    {
    try
    {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    ct=DriverManager.getConnection
    ("jdbc:sqlserver://localhost:1443;databaseName=JSP","sa","123");
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    //根据uername和password查询用户,查到返回该对象,没有就返回null
    public User checkUser(String username,String password)
    {
    try
    {
    pstmt=ct.prepareStatement("select * from [userTable] where username=? and password=?");
    //必须设置每个 ? 参数的值
    pstmt.setString(1,username);
    pstmt.setString(2,password);
    ResultSet rs=pstmt.executeQuery();
    User user=new User();

    while(rs.next())
    {
    user.setId(rs.getInt(1));
    user.setUsername(rs.getString(2));
    user.setPassword(rs.getString(3));
    return user;
    }
    return null;
    }
    catch(Exception e)
    {
    e.printStackTrace();
    return null;
    }
    }
    //查询留言信息,返回一个ArrayList
    @SuppressWarnings("unchecked")
    public ArrayList findLyInfo()
    {
    try
    {
    ArrayList al=new ArrayList();
    pstmt=ct.prepareStatement("select * from [lyTable]"); 
    ResultSet rs=pstmt.executeQuery();

    while(rs.next())
    {
    LyTable ly=new LyTable();
    ly.setId(rs.getInt(1));
    ly.setUserId(rs.getInt(2));
    ly.setDate(rs.getDate(3));
    ly.setTitle(rs.getString(4));
    ly.setConten(rs.getString(5));
    al.add(ly);
    }

     return al;
    }
    catch(Exception e)
    {
    e.printStackTrace();
    return null;
    }
    }
    public String getUserName(int id)
    {
    String username=null;
    try
    {
    pstmt=ct.prepareStatement("select username from [userTable] where id=?");
    pstmt.setInt(1,id);
    ResultSet rs=pstmt.executeQuery();
    while(rs.next())
    {
    username=rs.getString(1);
    }
    return username;
    }
    catch(Exception e)
    {
    e.printStackTrace();
    return null;
    }
    }

    public boolean addInfo(LyTable ly)
    {
    try
    {
    pstmt=ct.prepareStatement("insert into [lyTable] values(?,?,?,?)");
    pstmt.setInt(1,ly.getUserId());
    pstmt.setDate(2,ly.getDate());
    pstmt.setString(3,ly.getTitle());
    pstmt.setString(4, ly.getContent());
    pstmt.executeUpdate();
    return true;
    }
    catch(Exception e)
    {
    e.printStackTrace();
    return false;
    }
    }

    public boolean insertUser(String username,String pwd)
    {
    try
    {
    pstmt=ct.prepareStatement("insert into [userTable] value(?,?)");
    pstmt.setString(1, username);
    pstmt.setString(2, pwd);
    pstmt.executeUpdate();
    return true;

    }
    catch(Exception e)
    {
    e.printStackTrace();
    return false;
    }
    }
    }
    相关类在这,谢谢各位大侠了
      

  8.   

    数据库表:User表(id(int),username(varchar),password(varchar)),lyTable表(id(int),userId(int),date(datetime),title(varchar),conten(varchar))对应的javaBean
    package model;public class User {
      private int id;
      private String username;
      private String password;
       
      public void setId(int id)
      {
      this.id=id;
      }
      public int getId()
      {
      return id;
      }
       
      public void setUsername(String username)
      {
      this.username=username;
      }
      public String getUsername()
      {
      return username;
      }
       
      public void setPassword(String password)
      {
      this.password=password;
      }
      public String getPassword()
      {
      return password;
      }}
    package model;
    import java.sql.*;
    public class LyTable {
    private int id;
    private int userId;
    private Date date;
    private String title;
    private String conten;public void setId(int id)
    {
    this.id=id;
    }
    public int getId()
    {
    return id;
    }public void setUserId(int userId)
    {
    this.userId=userId;
    }
    public int getUserId()
    {
    return userId;
    }public void setDate(Date date)
    {
    this.date=date;
    }
    public Date getDate()
    {
    return date;
    }public void setTitle(String title)
    {
    this.title=title;
    }
    public String getTitle()
    {
    return title;
    }public void setConten(String conten)
    {
    this.conten=conten;
    }
    public String getContent()
    {
    return conten;
    }
    }mainServlet.java
    package servlet;
    import java.io.*;import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import model.User;
    import db.DB;
    @SuppressWarnings("serial")
    public class MainServlet extends HttpServlet{
    @SuppressWarnings("unchecked")
    public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException
    {
    //设置请求编码
    request.setCharacterEncoding("gb2312");
    //设置响应编码编码
    response.setContentType("gb2312");
    //获取JSP页面输入的用户值
    String username=request.getParameter("username");
    //获得JSP页面输入的密码值
    String pwd=request.getParameter("pwd");
    //建立DB类对象,使用其中的方法来完成判断
    DB db=new DB();
    //获得session对象,用来保存信息
    HttpSession session=request.getSession();
    //先获得user对象,如果是第一次访问该Servlet,用户对象肯定为空。但如果是
    //第二次第三次,就不应该判断该用户信息\
    User user=(User)session.getAttribute("user");
    //这里就是判断,如果用户是第一次进入,调用DB的方法判断
    if(user==null)
    {
    user=db.checkUser(username,pwd);
    }
    //吧user对象存在session中。
    session.setAttribute("user",user);
    if(user!=null)
    {
    //这里根据用户查询,用户不为空,表示用户密码正确,应该去下一个页面
    //这里去下一个页面,主页面包含了所有的留言信息,所以要从留言板表中查出来
    ArrayList al=db.findLyInfo();
    //把查询的信息保存在session中。
    session.setAttribute("al",al);
    //然后跳转到我们要去的页面
    response.sendRedirect("main.jsp");
    }else
    {
    //如果用户名和密码错误,回到登录界面
    //out.write("用户名或密码出错");
    response.sendRedirect("login.jsp");
    }
    }
    public void doPost(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException{
    doGet(request,response);
    }
    }
    DB.java
    package db;
    import java.sql.*;
    import java.util.*;
    import model.LyTable;
    import model.User;
    public class DB {
    Connection ct;
    PreparedStatement pstmt;
    //在构造函数中建立与数据库连接,这样在建立DB对象时就连接了数据库
    public DB()
    {
    try
    {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    ct=DriverManager.getConnection
    ("jdbc:sqlserver://localhost:1443;databaseName=JSP","sa","123");
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    //根据uername和password查询用户,查到返回该对象,没有就返回null
    public User checkUser(String username,String password)
    {
    try
    {
    pstmt=ct.prepareStatement("select * from [userTable] where username=? and password=?");
    //必须设置每个 ? 参数的值
    pstmt.setString(1,username);
    pstmt.setString(2,password);
    ResultSet rs=pstmt.executeQuery();
    User user=new User();while(rs.next())
    {
    user.setId(rs.getInt(1));
    user.setUsername(rs.getString(2));
    user.setPassword(rs.getString(3));
    return user;
    }
    return null;
    }
    catch(Exception e)
    {
    e.printStackTrace();
    return null;
    }
    }
    //查询留言信息,返回一个ArrayList
    @SuppressWarnings("unchecked")
    public ArrayList findLyInfo()
    {
    try
    {
    ArrayList al=new ArrayList();
    pstmt=ct.prepareStatement("select * from [lyTable]"); 
    ResultSet rs=pstmt.executeQuery();while(rs.next())
    {
    LyTable ly=new LyTable();
    ly.setId(rs.getInt(1));
    ly.setUserId(rs.getInt(2));
    ly.setDate(rs.getDate(3));
    ly.setTitle(rs.getString(4));
    ly.setConten(rs.getString(5));
    al.add(ly);
    }return al;
    }
    catch(Exception e)
    {
    e.printStackTrace();
    return null;
    }
    }
    public String getUserName(int id)
    {
    String username=null;
    try
    {
    pstmt=ct.prepareStatement("select username from [userTable] where id=?");
    pstmt.setInt(1,id);
    ResultSet rs=pstmt.executeQuery();
    while(rs.next())
    {
    username=rs.getString(1);
    }
    return username;
    }
    catch(Exception e)
    {
    e.printStackTrace();
    return null;
    }
    }public boolean addInfo(LyTable ly)
    {
    try
    {
    pstmt=ct.prepareStatement("insert into [lyTable] values(?,?,?,?)");
    pstmt.setInt(1,ly.getUserId());
    pstmt.setDate(2,ly.getDate());
    pstmt.setString(3,ly.getTitle());
    pstmt.setString(4, ly.getContent());
    pstmt.executeUpdate();
    return true;
    }
    catch(Exception e)
    {
    e.printStackTrace();
    return false;
    }
    }public boolean insertUser(String username,String pwd)
    {
    try
    {
    pstmt=ct.prepareStatement("insert into [userTable] value(?,?)");
    pstmt.setString(1, username);
    pstmt.setString(2, pwd);
    pstmt.executeUpdate();
    return true;}
    catch(Exception e)
    {
    e.printStackTrace();
    return false;
    }
    }
    }
      

  9.   

    web.xml文件呢?
    重要的咱不发代码出来 
      

  10.   

    servlet的使用你是需要每个页面都配置web.xml配置文件的。
      

  11.   

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <servlet>
       <servlet-name>mainServlet</servlet-name>
       <servlet-class>servlet.MainServlet</servlet-class>
      </servlet>
      <servlet>
       <servlet-name>addServlet</servlet-name>
       <servlet-class>servlet.AddServlet</servlet-class>
      </servlet>
      <servlet>
       <servlet-name>registerServlet</servlet-name>
       <servlet-class>servlet.RegisterServlet</servlet-class>
      </servlet>
      
        <servlet-mapping>
       <servlet-name>mainServlet</servlet-name>
       <url-pattern>/mainServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
       <servlet-name>addServlet</servlet-name>
       <url-pattern>/addServlet</url-pattern>
      </servlet-mapping>  <servlet-mapping>
       <servlet-name>registerServlet</servlet-name>
       <url-pattern>/registerServlet</url-pattern>
      </servlet-mapping>
    </web-app>
      

  12.   

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <servlet>
       <servlet-name>mainServlet</servlet-name>
       <servlet-class>servlet.MainServlet</servlet-class>
      </servlet>
      <servlet>
       <servlet-name>addServlet</servlet-name>
       <servlet-class>servlet.AddServlet</servlet-class>
      </servlet>
      <servlet>
       <servlet-name>registerServlet</servlet-name>
       <servlet-class>servlet.RegisterServlet</servlet-class>
      </servlet>
      
        <servlet-mapping>
       <servlet-name>mainServlet</servlet-name>
       <url-pattern>/mainServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
       <servlet-name>addServlet</servlet-name>
       <url-pattern>/addServlet</url-pattern>
      </servlet-mapping>  <servlet-mapping>
       <servlet-name>registerServlet</servlet-name>
       <url-pattern>/registerServlet</url-pattern>
      </servlet-mapping>
    </web-app>
      

  13.   

    <servlet-class>servlet.MainServlet</servlet-class>这个是你的包名加类名?
      

  14.   

    你使用
    RequestDispatcher dispatcher=
    request.getRequestDispatcher("login.jsp");
    dispatcher.forward(request,response);这个方式试一下。
      

  15.   

    request.getRequestDispatcher("/main.jsp").forward(request, response); 
      

  16.   

    一个个为了分这么多代码都能全整出来,你是不是那个servlet url的配置和放文件的包名有冲突的
      

  17.   

    应该是两种原因吧。1:web.xml 没配置 2:servlet 没有配置跳转到jsp显示