一、数据库设计:
二、JSP项目架构:
三、效果测试:
(1)登录页面:
(2)填写信息并提交:
a.提交存在的用户账户信息:
提交之后:
a.提交不存在的用户账户信息:
提交之后:
四、代码实现:
(1)login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>登录</title>
<!-- 使用JavaScript实现对用户名填入的用户名以及密码是否为空进行验证 -->
<script language="javascript">
function check(form){
if (form.name.value==""){
alert("请输入用户名!");
form.name.focus();
return false;
}
if (form.password.value==""){
alert("请输入密码!");
form.password.focus();
return false;
}
}
</script>
</head>
<body>
<form action="<%=path%>/servlet/loginServlet" method="post" name="login">
用户名:<input type="text" name="username"> <br>
密码:<input
type="password" name="password"> <br>
<input type="submit" value="提交" onclick="return check(login)">
<input type="reset" value="重置">
</form>
<a href="regist.jsp">注册</a>
</body>
</html>
(2)loginServlet.jsp代码:
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.JavaBean.DB_User;
import com.JavaBean.User;
public class loginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置请求响应的编码格式
response.setContentType("text/html");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 获取out输出流对象
PrintWriter out = response.getWriter();
// 设置注册成功与失败之后的页面跳转URL
String LoginSuccess = "http://localhost:8080/JSP_Exercise_01/index.jsp";
String LoginFail = "http://localhost:8080/JSP_Exercise_01/login.jsp";
// 获取用户提交的信息
String name = request.getParameter("username");
String password = request.getParameter("password");
// 核对用户名与密码,决定是否通过登录验证
DB_User db_User = new DB_User();
User user = db_User.get(name, password);
if (user != null) {
// 登录成功时,把用户名存储到session中
request.getSession(true).setAttribute("username", name);
response.sendRedirect(LoginSuccess);
} else {
// 否则(记录集为空)登录失败
out.print("不存在该用户!");
response.setHeader("Refresh", "3;url=" + LoginFail);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
(3)DB_User.java代码:
package com.JavaBean;
import java.io.UnsupportedEncodingException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import org.omg.CORBA.Request;
import com.sun.corba.se.impl.ior.OldJIDLObjectKeyTemplate;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;
public class DB_User {
// 创建公共数据库链接对象
DB_Conn conn = new DB_Conn();
/******************************************
* (1)查询数据库中是否存在改用户(使用用户名与密码进行验证)
******************************************/
public User get(String username,String password){
//链接数据库
conn.ConnectDB();
ResultSet rs=null;
//构建sql语句:
String sql="select * from UseInfo where username= '"
+username+"' and password='"+password+"'";
try {
//执行sql语句
rs=conn.sm.executeQuery(sql);
User user=null;//初始化一个user对象为空
if(rs.next()){
//如果存在该用户,那么就将他的用户名与密码存入user对象中
user=new User();
user.setName(rs.getString("username"));
user.setPassword(rs.getString("password"));
}
//不存在,直接返回user(其值为NULL)
return user;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}finally{
conn.CloseDB();
}
}
/***********************************
* (2)注册用户
***********************************/
public int Insert_Into_User(String username,String password){
//链接数据库
conn.ConnectDB();
//创建sql语句
String sql="insert into UseInfo(username,password) "+
"values( '" +username+"','"+password+"')";
try {
//执行sql语句
int flag=conn.sm.executeUpdate(sql);
return flag;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return -2;
}finally{
conn.CloseDB();//释放数据库链接资源
}
}
}
(4)DB_Conn.java
package com.JavaBean;
import java.io.PrintWriter;
import java.sql.*;
public class DB_Conn {
//JDBC驱动程序名
private String driverName="com.mysql.jdbc.Driver";
//数据库用户名
private String userName="root";
//数据库密码
private String userPwd="root";
//数据库名
private String dbName="xa";
//数据库链接URL
private String url="jdbc:mysql://localhost:3306/"+dbName;
//数据库链接对象
private Connection conn=null;
//数据库语句对象
public Statement sm=null;
//创建out输出流对象
private PrintWriter out=null;
//建立数据库链接函数
public int ConnectDB(){
try {
Class.forName(driverName).newInstance();//实例化(另外一种说法——注册一个驱动)
conn=DriverManager.getConnection(url,userName,userPwd);//获取数据库链接
sm=conn.createStatement();
return 1;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.print("数据库链接失败!");
return 0;
}
}
//释放数据库链接函数
public void CloseDB(){
try {
if(sm!=null){
sm.close();
}
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.print("数据库关闭失败!");
}
}
}
(5)User.java代码:
package com.JavaBean;
public class User {
//用户名、密码、用户类型
private String name;
private String password;
//对用户填写的信息进行封装
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}