本练手项目使用Servlet+JSP技术实现,由Idea,Oracle,Tomcat搭建,实现用户注册,登陆,用户信息修改,删除,查看功能。
- 建表(添加序列和触发器使id自增)
create table WYW_STUDENTS
(
id NUMBER(2) not null,
username VARCHAR2(20),
password VARCHAR2(20),
sex VARCHAR2(20),
email VARCHAR2(30)
)
-- Create sequence
create sequence WYW_STUDENTS_SEQ
minvalue 1
maxvalue 9999999999999999999999999999
start with 1
increment by 1
nocache;
--create trigger
create or replace trigger tr_wyw_students
before insert on wyw_students
for each row
begin
select wyw_students_seq.nextval into :new.id from dual;
end;
2.新建项目
2.1搭建项目结构
参照该博客搭建
https://blog.csdn.net/zonzzz/article/details/78494597
2.2目录结构介绍
filter:过滤器,解决中文乱码问题
entity/bean:实体类
dao:业务逻辑层(接口)
impl:实现层
servlet:servlet类
util:工具包,实现对数据库的连接
DbInfo.properties:数据库配置文件
- 代码
3.1 EncodingFilter 字符集过滤器,实现Filter接口
package wyw.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* @ClassName EncodingFilter
* @Description 解决中文字符集乱码
* @Author Wangyw
*/
public class EncodingFilter implements Filter {
public EncodingFilter() {
System.out.println("过滤器构造");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器初始化");
}
@Override
public void doFilter(ServletRequest request, ServletResponse reponse, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
reponse.setContentType("text/html;charset = utf-8");
chain.doFilter(request,reponse);
}
@Override
public void destroy() {
System.out.println("过滤器销毁");
}
}
3.2 web.xml(对EncodingFilter 进行配置)
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>wyw.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern><!-- *为过滤所有 -->
</filter-mapping>
3.3 DbInfo.properties 数据库配置文件
driver = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:127.0.0.1:ORCL
userName = wangyw
passWord = wangyw
3.4 DBConn 数据库连接
package wyw.util;
import java.io.FileInputStream;
import java.sql.*;
import java.util.Properties;
/**
* @ClassName DbConn
* @Description
* @Author Wangyw
*/
public class DbConn {
private Connection connection = null;//企业级开发中,connection不要用static修饰,在哪用就在哪初始化
private static DbConn instance = null;
private String driver = "";
private String url = "";
private String userName = "";
private String passWord = "";
private static FileInputStream fis = null;
private static Properties properties = null;
public static DbConn getInstance(){
if(instance == null){
instance = new DbConn();
}
return instance;
}
//只连接一次,放入构造器中,单例模式
private DbConn(){
try {
properties = new Properties();
/*fis = new FileInputStream("DbInfo.properties");
properties.load(fis);*/
properties.load(DbConn.class.getResourceAsStream("/DbInfo.properties"));
driver = properties.getProperty("driver");
url = properties.getProperty("url");
userName = properties.getProperty("userName");
passWord = properties.getProperty("passWord");
//加载驱动
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConnection() {
try {
connection = DriverManager.getConnection(url, userName, passWord);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public void close(Connection connection, Statement statement, ResultSet resultSet) {
if (connection != null) {//connection:晚开早关
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
statement = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if (resultSet != null) {
try {
resultSet.close();
resultSet = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
3.5 Students类 entity下(对用户对象的抽象,对应数据库中的表,表中每个字段对应实体类中一个属性)
package wyw.entity;
/**
* @ClassName Students
* @Description
* @Author Wangyw
*/
public class Students {
private int id;
private String name;
private String pwd;
private String sex;
private String email;
public Students() {
super();
}
public Students(int id, String name, String pwd, String sex, String email) {
this.id = id;
this.name = name;
this.pwd = pwd;
this.sex = sex;
this.email = email;
}
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 getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
3.6 StudentsDao接口
package wyw.dao;
import wyw.entity.Students;
import java.util.List;
public interface StudentsDao {
public boolean login(String name,String pwd);
public boolean register(Students students);
public List<Students> getAllStudents();
public boolean delete(int id);
public boolean update(int id,String name,String pwd,String sex,String email);
}
3.6 实现类
package wyw.impl;
import wyw.dao.StudentsDao;
import wyw.entity.Students;
import wyw.util.DbConn;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName StudentsImpl
* @Description
* @Author Wangyw
*/
public class StudentsImpl implements StudentsDao {
private DbConn dbConn;
private Connection connection = null;
private PreparedStatement statement = null;
private ResultSet resultSet = null;
/*public StudentsImpl() {
super();
}
*/
public StudentsImpl(DbConn dbConn) {
this.dbConn = dbConn;
}
@Override
public boolean login(String name, String pwd) {
boolean flag = false;
try {
connection = dbConn.getConnection();
String sql = "select username,password from wyw_students where username = '"+ name +"'";
statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
while(resultSet.next()){
if(resultSet.getString("username").equals(name) && resultSet.getString("password").equals(pwd)){
flag = true;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
@Override
public boolean register(Students students) {
boolean flag = false;
try {
connection = dbConn.getConnection();
boolean login = login(students.getName(), students.getPwd());
if (login == false) {
statement = connection.prepareStatement("insert into wyw_students (username,password) values (?,?)");
statement.setString(1, students.getName());
statement.setString(2, students.getPwd());
statement.executeUpdate();
connection.commit();
System.out.println("注册成功");
flag = true;
} else {
System.out.println("该用户名已存在,请重新输入");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
dbConn.close(connection,statement,null);
}
return flag;
}
@Override
public List<Students> getAllStudents() {
List<Students> list = new ArrayList<Students>();
try {
connection = dbConn.getConnection();
String sql = "select * from wyw_students";
statement = connection.prepareStatement(sql);
resultSet = statement.executeQuery();
while(resultSet.next()){
Students stu = new Students();
stu.setId(resultSet.getInt("id"));
stu.setName(resultSet.getString("username"));
stu.setPwd(resultSet.getString("password"));
stu.setSex(resultSet.getString("sex"));
stu.setEmail(resultSet.getString("email"));
list.add(stu);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
dbConn.close(connection,statement,resultSet);
}
return list;
}
@Override
public boolean delete(int id) {
boolean flag = false;
try {
connection = dbConn.getConnection();
statement = connection.prepareStatement("delete from wyw_students where id="+id);
statement.executeUpdate();
connection.commit();
flag = true;
} catch (SQLException e) {
e.printStackTrace();
} finally {
dbConn.close(connection,statement,null);
}
return flag;
}
@Override
public boolean update(int id, String name, String pwd, String sex, String email) {
boolean flag = false;
try {
connection = dbConn.getConnection();
statement = connection.prepareStatement("update wyw_students set username ='"+name
+"' , password ='"+pwd
+"' , sex ='"+sex
+"' , email ='"+email
+"' where id = "+id);
statement.executeUpdate();
connection.commit();
flag = true;
} catch (SQLException e) {
e.printStackTrace();
} finally {
dbConn.close(connection,statement,null);
}
return flag;
}
}
3.7 LoginServlet
package wyw.servlet;
import wyw.dao.StudentsDao;
import wyw.impl.StudentsImpl;
import wyw.util.DbConn;
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("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
StudentsDao students = new StudentsImpl(DbConn.getInstance());
if(students.login(name,pwd)){
request.setAttribute("meaasge","你好:"+name);
request.getRequestDispatcher("/success.jsp").forward(request,response);
}else{
response.sendRedirect("index.jsp");
}
}
}
3.8 RegisterServlet
package wyw.servlet;
import wyw.dao.StudentsDao;
import wyw.entity.Students;
import wyw.impl.StudentsImpl;
import wyw.util.DbConn;
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("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
String sex = request.getParameter("sex");
String email = request.getParameter("email");
Students students = new Students();
students.setName(name);
students.setPwd(pwd);
students.setSex(sex);
students.setEmail(email);
StudentsDao studentsDao = new StudentsImpl(DbConn.getInstance());
if(studentsDao.register(students)){
request.setAttribute("name", name); //向request域中放置参数
request.setAttribute("pwd", pwd); //向request域中放置参数
request.setAttribute("sex", sex); //向request域中放置参数
request.setAttribute("email", email); //向request域中放置参数
request.setAttribute("message", "注册成功");
request.getRequestDispatcher("/login.jsp").forward(request, response); //转发到登录页面
}else{
response.sendRedirect("index.jsp");
}
}
}
3.9 CheckServlet
package wyw.servlet;
import wyw.dao.StudentsDao;
import wyw.entity.Students;
import wyw.impl.StudentsImpl;
import wyw.util.DbConn;
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;
import java.util.List;
@WebServlet("/CheckServlet")
public class CheckServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StudentsDao stu = new StudentsImpl(DbConn.getInstance());
List<Students> allStudents = stu.getAllStudents();
request.setAttribute("allStudents",allStudents);
request.getRequestDispatcher("/check.jsp").forward(request, response);
}
}
3.10 UpdateServlet
package wyw.servlet;
import wyw.dao.StudentsDao;
import wyw.impl.StudentsImpl;
import wyw.util.DbConn;
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("/UpdateServlet")
public class UpdateServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
int userId = Integer.parseInt(id);
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
String sex = request.getParameter("sex");
String email = request.getParameter("email");
System.out.println("------------------------------------"+userId);
StudentsDao stu = new StudentsImpl(DbConn.getInstance());
if(stu.update(userId,name,pwd,sex,email)){
request.setAttribute("message", "更新成功");
request.getRequestDispatcher("/CheckServlet").forward(request, response);
}else{
response.sendRedirect("index.jsp");
}
}
}
3.10 DeleteServlet
package wyw.servlet;
import wyw.dao.StudentsDao;
import wyw.impl.StudentsImpl;
import wyw.util.DbConn;
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("/DeleteServlet")
public class DeleteServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
int userId = Integer.parseInt(id);
StudentsDao stu = new StudentsImpl(DbConn.getInstance());
if(stu.delete(userId)){
request.setAttribute("message", "删除成功");
request.getRequestDispatcher("/CheckServlet").forward(request, response);
}else{
response.sendRedirect("index.jsp");
}
}
}
3.11 JSP页面
3.11.1 login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录注册</title>
</head>
<body >
<form action="LoginServlet" method="post" style="padding-top:-700px;">
用户名:<input type="text" name="name"value=""><br><br>
密码: <input type="password" name="pwd"value=""><br><br>
<input type="submit"value="登录"name="login"><input type="reset"value="重置"><br>
</form>
<form action="register.jsp">
<input type="submit"value="注册">
</form>
</body>
</html>
3.11.2 register.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>
<title>注册</title>
</head>
<body >
<form action="RegisterServlet"method="post" style="padding-top:-700px;">
输入用户名:<input name="name" type="text"><br><br>
输入密码:<input name="pwd" type="password"><br><br>
选择性别:<input type="radio"name="sex"value="男"checked>男
<input type="radio"name="sex"value="女">女<br><br>
填写邮箱信息:<br>
<textarea name="email" row="5"cols="30"></textarea><br>
<input type="reset"value="重置"><input type="submit"value="注册">
</form>
</body>
</html>
3.11.3 success.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>
<title>登陆成功</title>
</head>
<body>
${message} <br>
<a href="CheckServlet">查看所有用户</a>
</body>
</html>
3.11.4 index.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>
<title>失败</title>
</head>
<body>
<h1>操作失败,请检查</h1>
</body>
</html>
3.11.5 check.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/5/9 0009
Time: 9:13
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
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>
</head>
<body>
<h1>${message}</h1>
<table width="600" border="1" cellpadding="0" >
<tr>
<th>ID</th>
<th>姓名</th>
<th>性别</th>
<th>密码</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach var="S" items="${allStudents}" >
<form action="UpdateServlet" method="post">
<tr>
<td><input type="text" value="${S.id}" name="id" ></td>
<td><input type="text" value="${S.name}" name="name"></td>
<td><input type="text" value="${S.sex}" name="sex"></td>
<td><input type="text" value="${S.pwd}" name="pwd"></td>
<td><input type="text" value="${S.email}" name="email"></td>
<td><a href="DeleteServlet?id=${S.id}">删除</a> <input type="submit" value="更新"/></td>
</tr>
</form>
</c:forEach>
</table>
</body>
</html>