整体结构
首先mysql创建用户表:
创建JDBC.properties
编写JDBCUtils类
package com.xf.utils;
import org.apache.jasper.tagplugins.jstl.core.Catch;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
* @author xfgg
*/
public class JDBCUtils {
private static String url=null;
private static String username=null;
private static String password=null;
public JDBCUtils(){
Properties prop = new Properties();
InputStream in = JDBCUtils.class.getResourceAsStream("/JDBC");
try {
prop.load(in);
url=prop.getProperty("url");
username=prop.getProperty("username");
password=prop.getProperty("password");
String driver = prop.getProperty("driver");
} catch (IOException e) {
e.printStackTrace();
}
}
public static Connection getconn() throws SQLException{
return DriverManager.getConnection(url,username,password);
}
public static void close(Statement statement,Connection connection){
if(statement!=null){
try{
statement.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
public static void close(PreparedStatement preparedStatement,Connection connection,ResultSet resultSet){
if(preparedStatement!=null){
try{
preparedStatement.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if (connection!=null){
try {
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if(resultSet!=null){
try {
resultSet.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
}
其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。
resultset是返回结果集
编写user类
package com.xf.bean;
public class user {
private int id;
private String name;
private String password;
private String role;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
编写userDao类
package com.xf.Dao;
import com.xf.bean.user;
import com.xf.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author xfgg
*/
public class userDao {
public user login(String username,String password){
user u =null;
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try{
connection = JDBCUtils.getconn();
String sql = "select * from user where name=? and password=?";
preparedStatement =(PreparedStatement)connection.prepareStatement(sql);
preparedStatement.setString(1,username);
preparedStatement.setString(2,password);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()){
u=new user();
u.setName(resultSet.getString("name"));
u.setPassword(resultSet.getString("password"));
System.out.println("登录成功");
}else{
System.out.println("用户名或者密码错误");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(preparedStatement,connection);
}
return u;
}
public void addUser(user user){
Connection connection=null;
PreparedStatement preparedStatement=null;
try{
connection=JDBCUtils.getconn();
String sql="insert into user(id,name,password,role)values(?,?,?,?);";
preparedStatement = (PreparedStatement)connection.prepareStatement(sql);
preparedStatement.setInt(1,user.getId());
preparedStatement.setString(2,user.getName());
preparedStatement.setString(3,user.getPassword());
preparedStatement.setInt(4,user.getRole());
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(preparedStatement,connection);
}
}
}
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.xf.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.xf.servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping>
</web-app>
编写Login.jsp
<%--
Created by IntelliJ IDEA.
User: xfgg
Date: 2020/6/19
Time: 18:47
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录界面</title>
<style type="text/css">
body{
background-repeat: no-repeat;
background-position: center;
}
</style>
</head>
<body>
<div style="text-align: center;margin-top: 120px">
<form action="LoginServlet" method="post">
<table style="margin-left:40%">
<marquee width="200" scrolldelay="250">用户登录</marquee>
<tr>
<td>用户名:</td>
<td><input type="text" size="21" name="username"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="text" name="password" size="21"/></td>
</tr>
</table>
<input type="submit" value="登录"/>
<input type="reset" value="重置"/>
</form>
<br>
<a href="register.jsp">注册</a>
</div>
</body>
</html>
编写register.jsp
<%--
Created by IntelliJ IDEA.
User: xfgg
Date: 2020/6/19
Time: 18:48
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册界面</title>
<style type="text/css">
body{
background-repeat: no-repeat;
background-position: center;
}
</style>
</head>
<body>
<div style="text-align: center;margin-top: 120px">
<form action="RegisterServlet" method="post">
<table style="margin-left:40%">
<caption>用户注册</caption>
<tr>
<td>ID:</td>
<td><input name="id" type="text" size="20"></td>
</tr>
<tr>
<td>登录名:</td>
<td><input name="name" type="text" size="20"></td>
</tr>
<tr>
<td>密码:</td>
<td><input name="password" type="password" size="20"></td>
</tr>
<tr>
<td>角色:</td>
<td><input name="role" type="text" size="20"></td>
</tr>
</table>
<input type="submit" value="注册">
<input type="reset" value="重置">
</form>
<br>
<a href="Login.jsp">登录</a>
</div>
</body>
</html>
action:提交到服务器的路径
method:提交的方式
编写LoginServlet类
package com.xf.servlet;
import com.xf.Dao.userDao;
import com.xf.bean.user;
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.io.IOError;
import java.io.IOException;
@WebServlet(name = "LoginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
doPut(request,response);
}
@Override
protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
userDao userdao = new userDao();
user user = userdao.login(username,password);
if(user != null){
request.getRequestDispatcher("success.jsp").forward(request,response);
}
else {
request.getRequestDispatcher("defeat.jsp").forward(request,response);
}
}
}
编写RegisterServlet类
package com.xf.servlet;
import com.xf.bean.user;
import com.xf.Dao.userDao;
import com.xf.Dao.userDao;
import com.xf.bean.user;
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.io.IOException;
@WebServlet(name = "RegisterServlet")
public class RegisterServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPut(request,response);
}
@Override
protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
int id = Integer.valueOf(request.getParameter("id"));
String username = request.getParameter("name");
String password = request.getParameter("password");
int role = Integer.valueOf(request.getParameter("role"));
user user = new user();
user.setId(id);
user.setName(username);
user.setPassword(password);
user.setRole(role);
userDao userdao = new userDao();
userdao.addUser(user);
System.out.println("注册成功");
request.getRequestDispatcher("Login.jsp").forward(request,response);
}
}
HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。
响应流程
1.Web客户向Servlet容器发出Http请求
2.Servlet容器解析Web客户的Http请求
3.Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息
4.Servlet容器创建一个HttpResponse对象
5.Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象
6.HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息
7.HttpServlet调用HttpResponse的有关方法,生成响应数据
8.Servlet容器把HttpServlet的响应结果传给Web客户
其中HttpServlet首先必须读取Http请求的内容,Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到HttpServlet对象中。
重写doput dopost步骤
①设置请求字符集
②设置响应对象文本类型
③通过请求对象获取用户输入的数据
④响应对象通过重定向/转发响应用户请求
编写success.jsp
<%--
Created by IntelliJ IDEA.
User: xfgg
Date: 2020/6/19
Time: 18:48
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功页面</title>
</head>
<body>
<h1>
登录成功
</h1>
<hr>
</body>
</html>
编写defeat.jsp
<html>
<head>
<title>登录失败</title>
</head>
<body>
<h1>登录失败</h1>
<hr>
<a href="Login.jsp">重新登录</a>
<br>
<a href="register.jsp">注册</a>
</body>
</html>