1.1 创建数据库操作类:net.csdn.Dao,增删改查等功能
1.1.1 在net.csdn.Dao下创建class:UserDao.java
UserDao.java代码如下:
package net.csdn.Dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import net.csdn.Javabean.User;
public class UserDao {
private static String url="jdbc:mysql:///user?useSSL=false&serverTimezone=UTC";//mysql8.0的参数设置
private static String user="root";//root为数据库用户名
private static String password="pwd";//pwd为数据库密码
private static Connection conn = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
static{
try {
Class.forName("com.mysql.cj.jdbc.Driver"); //加载MySQL驱动程序
//设置连接参数,获得数据库连接
conn=DriverManager.getConnection(url, user, password);
System.out.println("数据库连接成功!");
} catch (Exception e){
e.printStackTrace();//抛出运行时异常
}
}
/*
* 添加用户
*/
public void addUser(User user){
String sql = "insert into User(username,password) values(?,?)";
try {
ps = conn.prepareStatement(sql);
ps.setString(1, user.getUsername());
ps.setString(2, user.getPassword());
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 根据用户名,查询用户
*/
public User searchUser(String username){
String sql = "select username,password from User where username=?";
User user =new User();
try {
ps = conn.prepareStatement(sql);
ps.setString(1,username);
rs=ps.executeQuery();
while (rs.next()) {
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
/*
* 根据用户名和密码,查询用户
*/
public User searchUser(String username,String password){
String sql = "select username,password from User where username=? and password=?";
User user =new User();
try {
ps = conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
rs=ps.executeQuery();
while (rs.next()) {
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
public User selectUser(String username, String password) {
String sql = "select username, password from User where username=? and password=?";
User user = new User();
try {
ps = conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
rs=ps.executeQuery();
while (rs.next()) {
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
// }
1.2 创建数据模型类:net.csdn.Javabean
1.2.1 在net.csdn.Javabean下创建User.java
User.java代码如下:
package net.csdn.Javabean;
/**
* javabean实体层,封装数据。
* @author Allow
*
*/
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
1.3 创建业务层类net.csdn.Service,如:判断用户是否已经注册等
1.3.1 在net.csdn.Service下创建UserException.java和UserService.java
UserException.java如下:
package net.csdn.Service;
public class UserException extends Exception {
public UserException(){
super();
}
public UserException(String message, Throwable cause){
super(message, cause);
}
public UserException(String message){
super(message);
}
public UserException(Throwable cause){
super(cause);
}
}
UserService如下:
package net.csdn.Service;
import cn.csdn.Javabean.User;
import cn.csdn.Dao.UserDao;
/**
* service 业务层
* @author Allow
*
*/
public class UserService {
private UserDao userDao = new UserDao();
//注册功能
public void regist(User user) throws UserException {
/**
* 1.使用用户名去查询,如果返回null,完成添加
* 2.如果返回的不是null,抛出异常!
*/
User user1 = userDao.searchUser(user.getUsername());
if(user1.getUsername() != null){
throw new UserException("用户名" + user.getUsername() + ",已经被注册过了!");
}else {
userDao.addUser(user);
}
}
//登录功能
public void login(User user) throws UserException{
User user1 = userDao.selectUser(user.getUsername(),user.getPassword());
if (user1.getUsername()==null||user1.getPassword()==null) {
throw new UserException("用户名或密码错误,请重新登录!");
}
}
}
1.4 创建控制层类net.csdn.Sevlet,控制页面之间的跳转
在net.csdn.Sevlet下创建LoginServlet.java和RegistUser.java以及LogoutServlet.java
LoginServlet.java如下:
package net.csdn.Servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.mysql.cj.Session;
import net.csdn.Javabean.User;
import net.csdn.Service.UserService;
public class LoginServlet extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
request.setCharacterEncoding("utf-8");//处理POST请求的编码问题
response.setContentType("text/html;charset=utf-8");//响应编码问题
//依赖UserServlet
UserService userService = new UserService();
String username = request.getParameter("administer");
String password = request.getParameter("upwd");
User user = new User();
user.setUsername(username);
user.setPassword(password);
try {
userService.login(user);
HttpSession session = request.getSession();
session.setMaxInactiveInterval(3600);
String str3 = request.getParameter("administer");
String str4 = request.getParameter("upwd");
String admi = new String(str3.getBytes("utf-8"),"UTF-8");
String upwd = new String(str4.getBytes("ISO-8859-1"),"UTF-8");
session.setAttribute("name", admi);
session.setAttribute("pwd", upwd);
response.sendRedirect("main.jsp");
//request.getRequestDispatcher("/main.jsp").forward(request, response);
} catch (Exception e) {
request.setAttribute("msg", e.getMessage());
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
RegistUser.java如下:
package net.csdn.Servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.csdn.Javabean.User;
import net.csdn.Service.UserException;
import net.csdn.Service.UserService;
public class RegistUser extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");//处理POST请求的编码问题
response.setContentType("text/html;charset=utf-8");//响应编码问题
//把页面发送请求中的用户名和密码封装到User中
String username = request.getParameter("admin");
String password = request.getParameter("pwd");
User user = new User();
user.setUsername(username);
user.setPassword(password);
try {
//依赖UserServlet
UserService userService = new UserService();
userService.regist(user);
request.getRequestDispatcher("/success.jsp").forward(request, response);
} catch (Exception e) {
request.setAttribute("msg", e.getMessage());
request.getRequestDispatcher("/regist.jsp").forward(request, response);
}
}
}
1.5 注销功能LogoutServlet.java
package cn.TaylorPublic.Servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LogoutServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// request.getSession().removeAttribute("existUser");
request.getSession().invalidate();
response.getWriter().println("fuck you have logout!");
response.sendRedirect("client.jsp");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
1.6 创建主界面main.jsp,如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>
<base href="<%=basePath%>">
<title>My JSP 'main.jsp' starting page</title>
</head>
<body>
<h1>登录成功!欢迎
<% out.print(session.getAttribute("name"));%>
使用本系统!
</h1>
<div>
<div>
<%
if(session.getAttribute("name")==null){
%>
<div><a href="login.jsp">登录
<%
%>
</a></div>
<%
}else{
%>
<div><a href="LogoutServlet">注销
<%
}
%>
</a>
</div>
</div>
</div>
</body>
<html>
1.7 创建登录界面login.jsp,如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>
<base href="<%=basePath%>">
<title>德行-登录</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<style type="text/css">
body {
margin: 0;
padding: 0;
color: #666;
background: #c1d2fe;
font-family: Verdana, sans-serif
}
.form_login {
max-width: 640px;
margin: auto;
text-align: center;
padding-top: 100px;
}
.form-group {
width: 355px;
margin: 0 auto;
height: 50px;
margin-bottom: 20px;
}
.form-group .fa {
display: block;
width: 50px;
height: 50px;
float: left;
}
.form-group .form-control {
display: block;
width: 300px;
height: 48px;
float: left;
border: 1px solid #ccc;
padding: 0;
margin-left: 0;
text-indent: 1em;
themeColor: #00a988;
}
.form-group .form-control:hover {
border: 1px solid #0160A0;
}
.form-group .checkfont {
color: #666;
}
.form-group .btn {
width: 350px;
height: 50px;
background-color: #0160A0;
border: 0px;
color: #fff;
font-size: 14px;
}
.fa-user {
background: url(http://hovertree.com/texiao/mobile/10/images/user.png) no-repeat center;
}
.fa-key {
background: url(http://hovertree.com/texiao/mobile/10/images/pw.png) no-repeat center;
}
.hovertree_form_footer {
margin-top: 100px;
font-size: 14px;
color: #5B809A;
}
.form_logo{font-size:26px;}a{color:gray}
</style>
<body>
<div class="form_login">
<div class="form_logo"><img src="" />
<br />
</div>
<form method="post" role="form" id="form_login" action="LoginServlet">
<div class="form-group">
<i class="fa fa-user"></i>
<input type="text" class="form-control" name="administer" id="username" placeholder="Username" autocomplete="off">
</div>
<div class="form-group">
<i class="fa fa-key"></i>
<input type="password" class="form-control" name="upwd" id="password" placeholder="Password" autocomplete="off">
</div>
<div class="form-group" style="height:25px; line-height:25px; text-align:left;">
<input type="checkbox" class="" name="checkbox" id="checkbox" placeholder="checkbox" autocomplete="off">
<label class="checkfont" for="checkbox" >记住我的帐号</label>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-block btn-login">登录</button>
</div>
</form>
</div>
</body>
</html>
1.8 创建注册界面regist.jsp,如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>
<base href="<%=basePath%>">
<title>My JSP 'Registered.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<center>
管理员注册页面
<form action="RegistUser" method="get">
<table border=1px>
<Tr>
<td>用户名:</td>
<td><input type="text" name="admin"></td>
</Tr>
<Tr>
<td>密 码:</td>
<td><input type="password" name="pwd"></td>
</Tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="注册"></td>
</tr>
</table>
</form>
<p style="color:red;font-weight:500">${msg }</p>
</center>
</body>
<html>
1.9 配置web.xml
<servlet>
<servlet-name>RegistUser</servlet-name>
<servlet-class>net.csdn.Servlet.RegistUser</servlet-class>
</servlet>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>net.csdn.Servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegistUser</servlet-name>
<url-pattern>/RegistUser</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LogoutServlet</servlet-name>
<servlet-class>net.csdn.Servlet.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LogoutServlet</servlet-name>
<url-pattern>/LogoutServlet</url-pattern>
</servlet-mapping>