在浏览器中访问Internet上的一些网站时,我们时常遇到某些网页的某些功能需要用户登录才能实现,作为初学Java Web设计的学员,可以试着编写一个简单的登录界面。其中用JSP页面设计网页显示的内容,用JavaScript控制网页提交的信息,用Servlet控制数据库的访问。
1.JSP页面应该包括登录页面和登录成功后显示的页面,其中登录页面的代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://
www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎登录</title>
</head>
<body>
<form name="form1" action="loginServlet" method="post" onsubmit="return on_submit(form1)">
<table align="center">
<tr>
<td colspan="2" align="center"><font color="green">欢迎登录</font></td>
</tr>
<tr>
<td>用户名:</td>
<td><input name="username" type="text" size="20"></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="userpass" size="20"></td>
</tr>
<tr>
<td align="right"><input type="reset" value="重置"></td>
<td align="left"><input type="submit" value="登录"></td>
</tr>
<%String checkInfo = (String)request.getAttribute("checkInfo");
if(checkInfo != null){
out.print("<tr><td colspan='2' align='right'>"+checkInfo+"</td></tr>");
}
%>
</table>
</form>
<script type="text/javascript">
function on_submit(form){
if(form.username.value.length == 0){
alert("用户名不能为空!");
form.username.focus();
return false;
}
if(form.userpass.value.length == 0){
alert("密码不能为空!");
form.userpass.focus();
return false;
}
if(form.username.value.length < 8){
alert("用户名不能小于8位!");
form.username.focus();
return false;
}
if(form.username.value.length > 16){
alert("用户名不能大于16位!");
form.username.focus();
return false;
}
if(form.userpass.value.length < 8){
alert("密码不能小于8位!");
form.userpass.focus();
return false;
}
if(form.userpass.value.length >16){
alert("密码不能大于16位!");
form.userpass.focus();
return false;
}
return true;
}
</script>
</body>
</html>
登录成功后的页面代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/
TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户首页</title>
</head>
<body>
<p>${current_user.usertype }用户${current_user.username }您好!</p><br>
</body>
</html>
2.在编写连接数据库的Servlet之前,应该设计一个存放用户数据的JavaBeans,代码如下:
public class User {
private String username;//用户名
private String usertype;//用户类型
public User(){}
public User(String user){username = user;}
public void setUsername(String data){username = data;}
public void setUsertype(String data){usertype = data;}
public String getUsername(){return username;}
public String getUsertype(){return usertype;}
}
3.然后编写控制连接数据库并且验证登录信息的Servlet:
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet(urlPatterns={"/loginServlet"}, name="login_servlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// // TODO Auto-generated method stub
// response.getWriter().append("Served at: ").append(request.getContextPath());
String username = request.getParameter("username");
String password = request.getParameter("userpass");
String checkInfo = null;
String sql = "select * from users where 用户名 = '"+username+"'";
Connection con = null;
Statement st = null;
ResultSet rs = null;
try {
Class.forName("com.hxtt.sql.access.AccessDriver");
con = DriverManager.getConnection("jdbc:Access:/C:/Users/acer-pc/Documents/ffasdb.accdb");
st = con.createStatement();
rs = st.executeQuery(sql);
if(rs.next()){
if(rs.getString("密码").equals(password)){
checkInfo = "登录成功!";
javax.servlet.http.HttpSession session = request.getSession();
bean.User cur_user = new bean.User(username);
cur_user.setUsertype(rs.getString("用户类型"));
session.setAttribute("current_user", cur_user);
//session.setAttribute("password", password);
response.sendRedirect("first_page.jsp");
}else{
checkInfo = "密码错误!";
request.setAttribute("checkInfo", checkInfo);
RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
rd.forward(request, response);
}
}else{
checkInfo = "用户不存在!";
request.setAttribute("checkInfo", checkInfo);
RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
rd.forward(request, response);
}
rs.close();
st.close();
con.close();
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
启动服务器,在浏览器中访问登录页面进行测试,以下是测试结果:
登录时的输入格式控制:
登录界面:
登录成功界面:
密码错误提示: