本人用JSP+Servlet+JavaBean做了个留言板,里面的JavaBean的就是就是照着书上敲的代码,敲完没有做什么动作。
登录界面(login.jsp)是提交到一个mainServlet.java的。
但是登录后还是在留在login.jsp界面。
而在login.jsp界面点击注册后可以跳转到注册界面(register.jsp)
在注册界面注册提交后是到Resgister.java的。它能跳转但是页面一片空白。
导航栏变成http://localhost:8080/JSPExample/registerServlet
这是怎么回事呢?
是javaBean要配置我没配置?还是什么原因?
登录界面(login.jsp)是提交到一个mainServlet.java的。
但是登录后还是在留在login.jsp界面。
而在login.jsp界面点击注册后可以跳转到注册界面(register.jsp)
在注册界面注册提交后是到Resgister.java的。它能跳转但是页面一片空白。
导航栏变成http://localhost:8080/JSPExample/registerServlet
这是怎么回事呢?
是javaBean要配置我没配置?还是什么原因?
是一个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中的路径
<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里面
你确定你已经提交到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了,不需用跳转页面了!
大概明白你的意思。但是注册后,Resgister.java里面有response.sendRedirect("login.jsp");的,可是它一直停留在http://localhost:8080/JSPExample/registerServlet的空白页面,没有跳转到login.jsp是怎么回事呢?是数据库问题吗?
debug或者用System.out.println();看看走到哪一步了数据库的问题的话那他报异常了吗?
对应的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;
}
}
}
相关类在这,谢谢各位大侠了
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;
}
}
}
重要的咱不发代码出来
<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>
<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>
RequestDispatcher dispatcher=
request.getRequestDispatcher("login.jsp");
dispatcher.forward(request,response);这个方式试一下。