目录
一、创建数据库连接池
二、配置文件
三、写登录、注册的页面
1.配置index.jsp文件
2.配置web.xml文件
3.写登陆的servlet,service类和dao类
4.登陆失败的页面
5.注册的页面
6.配置登陆的文件
7.注册的Servlet类、Service类、dao类
8.注册失败的页面
四、对数据库的增删改查页面
1.登陆后的页面
2.点击查询所有后的页面
3.查询的配置文件
4.查询的Servlet类、Service类、dao类
5.删除的配置文件
6.删除的Servlet类、Service类、dao类
7.修改的配置文件
8.修改的页面
9.修改的Servlet类、Service类、dao类
10.增加数据的配置文件
11.增加数据的页面
12.增加数据的Servlet类、Service类、dao类
五、运行的截图
闲的没事,用Servlet、jsp、JDBC、数据库写了登录、注册、增加、删除、修改、查询这些页面,我用了两个数据库来写,一个用来登录和注册,一个用来进行增加、删除、修改、查询,在进行增删改查这些操作之前,要进行登录和注册,登陆的时候要与数据库表格里面的数据相对应,登录错误时会弹出一个页面显示登录错误,点击返回重新登录,注册即为向数据库表格中添加数据。
一、创建数据库连接池
这里面的一些方法都是JDBC常用的方法:
1.Properties类里面的load方法:从输入流中读取属性列表。
2.Properties类里面的getProperty方法:在属性列表里面搜索括号里面的内容。
3.initialSize是创建的连接数量,maxActive是从池分配的最多连接数量,设置0为无限制
4.Class.forName是要求JVM查找或者加载指定的类。
import org.apache.commons.dbcp.BasicDataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class NewUtil {
private static String driver;
private static String url;
private static String username;
private static String password;
private static int initnum=3;
private static int maxNum=5;
private static BasicDataSource basicDataSource;//创建连接池
static{
basicDataSource=new BasicDataSource();
Properties p=new Properties();
InputStream is=NewUtil.class.getClassLoader().getResourceAsStream("emp.properties");
try {
p.load(is);//读取输入流
driver=p.getProperty("emp.driver");
url=p.getProperty("emp.url");
username=p.getProperty("emp.username");
password=p.getProperty("emp.password");
initnum=Integer.parseInt(p.getProperty("emp.initnum"));
maxNum=Integer.parseInt(p.getProperty("emp.maxNum"));
basicDataSource.setDriverClassName(driver);
basicDataSource.setUrl(url);
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
basicDataSource.setInitialSize(initnum);
basicDataSource.setMaxActive(maxNum);
} catch (IOException e) {
e.printStackTrace();
}
}
//创建一个Connection为Servlet类做准备
public static Connection getConnection(){
Connection connection=null;
try {
Class.forName(driver);
connection= DriverManager.getConnection(url,username,password);
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
//写一个关闭Connection的方法
public static void close(Connection c){
if(c!=null){
try {
c.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
我们要用到两个数据库,所以我写了两个连接池
package com.buka.edu.util;
import org.apache.commons.dbcp.BasicDataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class B0351Util {
private static String driver;
private static String url;
private static String username;
private static String password;
private static int initnum =3 ;
private static int maxNum=5;
private static BasicDataSource basicDataSource;
static{
basicDataSource=new BasicDataSource();
Properties p=new Properties();
InputStream is=B0351Util.class.getClassLoader().getResourceAsStream("dept.properties");
try {
p.load(is);
driver=p.getProperty("dept.driver");
url=p.getProperty("dept.url");
username=p.getProperty("dept.username");
password=p.getProperty("dept.password");
initnum=Integer.parseInt(p.getProperty("dept.initnum"));
maxNum=Integer.parseInt(p.getProperty("dept.maxNum"));
basicDataSource.setDriverClassName(driver);
basicDataSource.setUrl(url);
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
basicDataSource.setMaxActive(maxNum);
basicDataSource.setInitialSize(initnum);
} catch (IOException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection conn=null;
try {
Class.forName(driver);
conn= DriverManager.getConnection(url,username,password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void closs(Connection conn){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
二、配置文件
这里面要注意的是数据库的密码一定不要填错
dept.driver=com.mysql.jdbc.Driver dept.url=jdbc:mysql://localhost:3306/b0351 dept.username=root dept.password=123456 dept.initnum=3 dept.maxNum=5
emp.driver=com.mysql.jdbc.Driver emp.url=jdbc:mysql://localhost:3306/newdb3 emp.username=root emp.password=123456 emp.initnum=3 emp.maxNum=5
三、写登录、注册的页面
1.配置index.jsp文件
这里面我用了很多空格,能在页面展现得更规矩一些
<%--
Created by IntelliJ IDEA.
User: HP
Date: 8/1/2022
Time: 下午6:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
$Title$
2.配置web.xml文件
注意这里面servlet-name里面的值要和表单action的值相对应,servlet-class里面的值是要运行的servlet的目录
login com.buka.edu.controller.LoginServlet login /login
3.写登陆的servlet,service类和dao类
注意:
request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf8");这两行代码是定义编码类型
request.getParameter这个方法是接受前台传的数据
request.getRequestDispatcher("board.jsp").forward(request,response)这个方法时进行转发,转发到那个页面
service类是用来过渡的一个类
dao类里面的方法是实现对数据库进行查询并且和前台传来的username和password比较是否相同的过程
注意:
executeQuery方法的作用是查询表格里面的内容,然后返回给ResultSet类里面
public class LoginServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response){
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("html/text;charset=utf8");
String username=request.getParameter("username");
String password=request.getParameter("password");
Service service=new Service();
boolean bo=service.loginService(username,password);
if(bo){
try {
request.getRequestDispatcher("board.jsp").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{
try {
request.getRequestDispatcher("login.jsp").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class Service {
Dao dao=new Dao();
public boolean loginService(String username, String password) {
return dao.loginDao(username,password);
}
public class Dao {
public boolean loginDao(String username, String password) {
Connection conn= B0351Util.getConnection();
Statement s=null;
ResultSet rs=null;
boolean bo=true;
int num=0;
try {
s=conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
String sql="select * from login";
try {
rs=s.executeQuery(sql);
while(rs.next()){
String username1=rs.getString("username");
String password1=rs.getString("password");
if(username.equals(username1)&&password.equals(password1)){
bo=true;
num=num+1;
}
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
B0351Util.closs(conn);
}
if(num==0){
bo=false;
}
return bo;
}
4.登陆失败的页面
这里面我加了a标签,点击会返回登陆页面
<%--
Created by IntelliJ IDEA.
User: HP
Date: 8/1/2022
Time: 下午6:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
登陆失败
点击重新登陆
5.注册的页面
<%--
Created by IntelliJ IDEA.
User: HP
Date: 9/1/2022
Time: 下午6:06
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
6.配置登陆的文件
post
com.buka.edu.controller.PostServlet
post
/post
7.注册的Servlet类、Service类、dao类
这里面的主要实现了注册的账号数据库中如果已经有了,会转发到下一个注册失败的页面,如果注册成功了会返回登陆的页面
public class PostServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response){
try {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String username=request.getParameter("username");
String password=request.getParameter("password");
Service service=new Service();
int num=service.postService(username,password);
if(num==0){
try {
response.sendRedirect("failed.jsp");
} catch (IOException e) {
e.printStackTrace();
}
}else{
try {
response.sendRedirect("index.jsp");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public int postService(String username,String password){
return dao.postDao(username,password);
}
public int postDao(String username, String password) {
Connection conn=B0351Util.getConnection();
int num=1;
try {
Statement s=conn.createStatement();
String sql1="select * from login";
ResultSet rs=s.executeQuery(sql1);
while(rs.next()){
String username1=rs.getString("username");
String password1=rs.getString("password");
if(username1.equals(username)&&password.equals(password1)){
num=0;
}
}
if(num==1){
String sql="insert into login values(null,?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
num=ps.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
B0351Util.closs(conn);
}
System.out.println(num);
return num;
}
}
8.注册失败的页面
这里面同样加了a标签,来返回上级注册页面
<%--
Created by IntelliJ IDEA.
User: HP
Date: 9/1/2022
Time: 下午6:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
注册失败 此用户名和密码已存在
点击重新注册
四、对数据库的增删改查页面
1.登陆后的页面
<%--
Created by IntelliJ IDEA.
User: HP
Date: 8/1/2022
Time: 下午7:23
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
查询所有
2.点击查询所有后的页面
<%--
Created by IntelliJ IDEA.
User: HP
Date: 8/1/2022
Time: 下午7:23
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
查询所有
2.点击查询所有后的页面
这里面在每一条数据的后面,我都加了删除和修改的a标签,在表格的最下面我加了增加数据的a标签,这里面的循环我用了jsp中的taglib指令,uri是用来指定标签文件或标签库的存放位置,prefix是变迁文件或标签库的别名。
<%@ page import="java.util.List" %>
<%@ page import="com.buka.edu.bean.Emp" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--
Created by IntelliJ IDEA.
User: HP
Date: 8/1/2022
Time: 下午7:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
List list=(List)request.getAttribute("emp");
%>
empno
ename
job
mgr
hiredate
sal
comm
deptno
操作
${emp.empno}
${emp.ename}
${emp.job}
${emp.mgr}
${emp.hiredate}
${emp.sal}
${emp.comm}
${emp.deptno}
删除 修改
增加数据
3.查询的配置文件
getAll
com.buka.edu.controller.GetEmpServlet
getAll
/getAll
4.查询的Servlet类、Service类、dao类
Servlet里面我还是用了转发,意思就是点击完查询所有可以和将数据展现在表格当中,并且展示出来
public class GetEmpServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response){
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("text/html;charset=utf8");
Emp emp=new Emp();
Service service=new Service();
List list=service.getService();
request.setAttribute("emp",list);
try {
request.getRequestDispatcher("getUser.jsp").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public ListgetService(){ return dao.getDao(); }
public ListgetDao() { Connection connection=NewUtil.getConnection(); List list=null; try { Statement s=connection.createStatement(); String sql="select * from emp"; ResultSet rs=s.executeQuery(sql); list=new ArrayList (); while(rs.next()){ Emp emp=new Emp(); int empno=rs.getInt("EMPNO"); String ename=rs.getString("ENAME"); String job=rs.getString("JOB"); int mgr=rs.getInt("MGR"); String hiredate=rs.getString("HIREdate"); int sal=rs.getInt("SAL"); int comm=rs.getInt("COMM"); int deptno=rs.getInt("DEPTNO"); emp.setEmpno(empno); emp.setEname(ename); emp.setJob(job); emp.setMgr(mgr); emp.setHiredate(hiredate); emp.setSal(sal); emp.setComm(comm); emp.setDeptno(deptno); list.add(emp); } } catch (SQLException e) { e.printStackTrace(); }finally { NewUtil.close(connection); } return list; }
5.删除的配置文件
delete
com.buka.edu.controller.DeleteServlet
delete
/delete
6.删除的Servlet类、Service类、dao类
这里面的删除并没有其他页面,只是在当前查询页面进行展示。dao类里面用的prepareStatement里的executeUpdate方法,返回值类型是int类型,意思是改变了多少条数据。在dao类里面empno的值是在前台获得的,获取方法在查询页面的jsp文件中。
public class DeleteServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response){
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("text/html;charset=utf8");
Service service=new Service();
int empno=Integer.parseInt(request.getParameter("empno"));
int num=service.deleteService(empno);
if(num==0){
}else{
try {
response.sendRedirect("getAll");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public int deleteService(int empno){
return dao.deleteDao(empno);
}
public int deleteDao(int empno) {
Connection conn=NewUtil.getConnection();
String sql="delete from emp where empno=?";
int num=0;
try {
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,empno);
num=ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
NewUtil.close(conn);
}
return num;
}
7.修改的配置文件
getOne
com.buka.edu.controller.GetOneServlet
getOne
/getOne
update
com.buka.edu.controller.UpdateServlet
update
/update
8.修改的页面
<%--
Created by IntelliJ IDEA.
User: HP
Date: 9/1/2022
Time: 下午1:21
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%--
Created by IntelliJ IDEA.
User: HP
Date: 9/1/2022
Time: 下午1:21
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
9.修改的Servlet类、Service类、dao类
这里面为什么有两个Servlet呢,因为getOne的Servlet类是用来获取值的,也就是,我们再进行修改的时候,要把所有的数据展现在表单中,这样能更清晰的修改,并且将修改后的数据传回数据库并且展现在表格当中。
public class UpdateServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response){
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("text/html;charset=utf8");
int empno=Integer.parseInt(request.getParameter("empno"));
String ename=request.getParameter("ename");
String job=request.getParameter("job");
int mgr=Integer.parseInt(request.getParameter("mgr"));
String hiredate=request.getParameter("hiredate");
int sal=Integer.parseInt(request.getParameter("sal"));
int comm=Integer.parseInt(request.getParameter("comm"));
int deptno=Integer.parseInt(request.getParameter("deptno"));
Emp emp=new Emp();
emp.setEmpno(empno);
emp.setEname(ename);
emp.setJob(job);
emp.setMgr(mgr);
emp.setHiredate(hiredate);
emp.setSal(sal);
emp.setComm(comm);
emp.setDeptno(deptno);
Service service=new Service();
int num=service.updateService(emp);
if(num==0){
}else{
try {
response.sendRedirect("getAll");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public int updateService(Emp emp){
return dao.updateDao(emp);
}
public int updateDao(Emp emp) {
Connection conn=NewUtil.getConnection();
int num=0;
String sql="update emp set ename=?,job=?,mgr=?,hiredate=?,sal=?,comm=?,deptno=? where empno=?";
try {
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,emp.getEname());
ps.setString(2,emp.getJob());
ps.setInt(3,emp.getMgr());
ps.setString(4,emp.getHiredate());
ps.setInt(5,emp.getSal());
ps.setInt(6,emp.getComm());
ps.setInt(7,emp.getDeptno());
ps.setInt(8,emp.getEmpno());
num=ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
NewUtil.close(conn);
}
return num;
}
public class GetoneServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response){
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("text/html;charset=utf8");
Service service=new Service();
int empno=Integer.parseInt(request.getParameter("empno"));
Emp emp=service.getOne(empno);
request.setAttribute("emp",emp);
try {
request.getRequestDispatcher("update.jsp").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public Emp getOne(int empno){
return dao.getOne(empno);
}
public Emp getOne(int empno) {
Connection conn=NewUtil.getConnection();
String sql="select * from emp where empno=?";
Emp emp=null;
try {
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,empno);
ResultSet rs=ps.executeQuery();
while(rs.next()){
emp=new Emp();
String ename=rs.getString("ENAME");
String job=rs.getString("JOB");
int mgr=rs.getInt("MGR");
String hiredate=rs.getString("HIREdate");
int sal=rs.getInt("SAL");
int comm=rs.getInt("COMM");
int deptno=rs.getInt("DEPTNO");
emp.setEmpno(empno);
emp.setEname(ename);
emp.setJob(job);
emp.setMgr(mgr);
emp.setHiredate(hiredate);
emp.setSal(sal);
emp.setComm(comm);
emp.setDeptno(deptno);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
NewUtil.close(conn);
}
return emp;
}
10.增加数据的配置文件
add
com.buka.edu.controller.AddServlet
add
/add
11.增加数据的页面
<%--
Created by IntelliJ IDEA.
User: HP
Date: 9/1/2022
Time: 下午3:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%--
Created by IntelliJ IDEA.
User: HP
Date: 9/1/2022
Time: 下午3:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
12.增加数据的Servlet类、Service类、dao类
增加数据里面的东西上面都有,还是从前台拿数据放到数据库中然后点击提交还是返回查询的那个页面。
public class AddServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response){
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("text/html;charset=utf8");
int empno=Integer.parseInt(request.getParameter("empno"));
String ename=request.getParameter("ename");
String job=request.getParameter("job");
int mgr=Integer.parseInt(request.getParameter("mgr"));
String hiredate=request.getParameter("hiredate");
int sal=Integer.parseInt(request.getParameter("sal"));
int comm=Integer.parseInt(request.getParameter("comm"));
int deptno=Integer.parseInt(request.getParameter("deptno"));
Emp emp=new Emp();
emp.setEmpno(empno);
emp.setEname(ename);
emp.setJob(job);
emp.setMgr(mgr);
emp.setHiredate(hiredate);
emp.setSal(sal);
emp.setComm(comm);
emp.setDeptno(deptno);
Service service=new Service();
int num=service.addService(emp);
if(num==0){
}else{
try {
response.sendRedirect("getAll");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public int addService(Emp emp){
return dao.addDao(emp);
}
public int addDao(Emp emp) {
Connection connection=NewUtil.getConnection();
String sql="insert into emp values(?,?,?,?,?,?,?,?)";
int num=0;
try {
PreparedStatement ps=connection.prepareStatement(sql);
ps.setInt(1,emp.getEmpno());
ps.setString(2,emp.getEname());
ps.setString(3,emp.getJob());
ps.setInt(4,emp.getMgr());
ps.setString(5,emp.getHiredate());
ps.setInt(6,emp.getSal());
ps.setInt(7,emp.getComm());
ps.setInt(8,emp.getDeptno());
num=ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
NewUtil.close(connection);
}
return num;
}
五、运行的截图
最后是我两个数据库的图片,其实这些代码也可以用框架来完成,我只不过是初学手,能写成这样我已经很满意了,来供大家参考



