一个servlet练手的小项目,对相关的知识进行巩固
项目结构
数据库:
1.使用jdbc连接数据库配置
首先配置jdbc.properties的基本
创建util类,使用jdbc连接池连接
package util;
import org.apache.commons.dbcp.BasicDataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
//连接池
public class DBUtil3 {
private static BasicDataSource ds;
static {
//先获得数据库连接信息
InputStream is=DBUtil3.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties p=new Properties();
try {
p.load(is);
} catch (IOException e) {
e.printStackTrace();
}
String driver=p.getProperty("driver");
String url=p.getProperty("url");
String user=p.getProperty("user");
String pwd= p.getProperty("password");
ds=new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(user);
ds.setPassword(pwd);
ds.setInitialSize(3);
ds.setMaxActive(5);
ds.setMaxIdle(3);
}
//获得连接
public static Connection getConn() throws Exception{
Connection conn= ds.getConnection();
System.out.println(conn);
return conn;
}
}
2.创建实体类 Emp
属性与数据库的内容对应
package entity;
public class Emp {
private Integer empno;
private String ename;
private Double sal;
public Emp(Integer empno, String ename, Double sal) {
this.empno = empno;
this.ename = ename;
this.sal = sal;
}
public Emp() {
}
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public Double getSal() {
return sal;
}
public void setSal(Double sal) {
this.sal = sal;
}
@Override
public String toString() {
return "emp{" +
"empno=" + empno +
", ename='" + ename + '\'' +
", sal=" + sal +
'}';
}
}
3.创建Dao层
DAO层是数据库操作相关的类,使用util工具类连接并设置相关的sql语句
package dao;
import entity.Emp;
import util.DBUtil3;
import javax.xml.transform.Result;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
/*
* DAO层是数据库操作相关的类
* */
public class EmpDao {
//对数据库中emp表进行数据添加操作
public void insert(Emp emp){
//数据库连接
try {
Connection conn= DBUtil3.getConn();
String sql="insert into emp(empno,ename,sal) values(?,?,?);";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,emp.getEmpno());
ps.setString(2, emp.getEname());
ps.setDouble(3,emp.getSal());
ps.executeUpdate();
System.out.println("新增数据成功");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//查询所有员工
public List<Emp> getAll(){
List<Emp> list=new ArrayList<Emp>();
try {
Connection conn= DBUtil3.getConn();
String sql="select empno,ename,sal from emp";
PreparedStatement ps=conn.prepareStatement(sql);
ResultSet rs= ps.executeQuery();
while (rs.next()){
//实例化Emp对象
Emp e=new Emp();
//为这个对象的各个属性赋值
e.setEmpno(rs.getInt(1));
e.setEname(rs.getString(2));
e.setSal(rs.getDouble(3));
//对查询到结果集进行遍历
//的empty对象,并将这次对象添加到list集合中
list.add(e);
}
System.out.println("新增数据成功");
} catch (Exception e) {
throw new RuntimeException(e);
}
return list;
}
//删除员工
public void deleteEmpById(Integer empno){
//数据库连接
try {
Connection conn= DBUtil3.getConn();
String sql="delete from emp where empno=?;";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,empno);
ps.executeUpdate();
System.out.println("删除数据成功");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//定义只查询需要修改数据的用户
//根据用户的id查询
public Emp getEmpById(Integer empno){
Emp emp=null;
try {
Connection conn= DBUtil3.getConn();
String sql="select empno,ename,sal from emp where empno=?";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,empno);
ResultSet rs=ps.executeQuery();
while (rs.next()){
Integer en= rs.getInt(1);
String ename=rs.getString(2);
Double sal= rs.getDouble(3);
emp=new Emp(en,ename,sal);
}
} catch (Exception e) {
e.printStackTrace();
}
return emp;
}
//修改员工信息的方法
public void update(Emp emp){
try {
Connection conn= DBUtil3.getConn();
String sql="update emp set ename=?,sal=? where empno=?";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,emp.getEname());
ps.setDouble(2,emp.getSal());
ps.setInt(3,emp.getEmpno());
ps.executeUpdate();
System.out.println("修改成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.创建servlet层
创建,增,删,改查的servlet,继承HttpServlet并且重写其中的方法
1.addservlet
package servlet;
import dao.EmpDao;
import entity.Emp;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class AddServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获得表单中的所有信息
//设置请求中的中文字符集
req.setCharacterEncoding("utf-8");
Integer empno=Integer.parseInt(req.getParameter("empno"));
String ename=req.getParameter("ename");
Double sal=Double.parseDouble(req.getParameter("sal"));
//实例化empty对象
Emp emp=new Emp(empno,ename,sal);
//实例化emptyDao对象
EmpDao empDao=new EmpDao();
empDao.insert(emp);
//通过页面重定向,发送find请求到findAllServlet
System.out.println(req.getContextPath());
resp.sendRedirect(req.getContextPath()+"/find");
}
}
2.DeleteServlet
package servlet;
import dao.EmpDao;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class DeleteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//得到编号
String enoString= req.getParameter("empno");
Integer empno=Integer.parseInt(enoString);
//开始删除员工
EmpDao d=new EmpDao();
d.deleteEmpById(empno);
//重定向,查询删除员工之后的所有员工信息
resp.sendRedirect(req.getContextPath()+"/find");
}
}
3.FindAllServlet
package servlet;
import dao.EmpDao;
import entity.Emp;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
public class FindAllServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
EmpDao d=new EmpDao();
List<Emp> list=d.getAll();
//设置响应中文字符集
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
out.println("<table border='1' width='600'>");
out.print("<tr><th>编号</th> <th>姓名</th> <th>工资</th><th>操作</th></tr>");
for (Emp e:list){
out.print("<tr>" +
"<th>"+e.getEmpno()+"</th>" +
"<th>"+e.getEname()+"</th>" +
"<th>"+e.getSal()+"</th>" +
"<th><a href='delete?empno="+e.getEmpno()+"'>删除内容</a>/" +
"<a href='update?empno="+e.getEmpno()+"'>修改</a></th>" +
"</tr>");
}
out.println("</table>");
}
}
4.updateServlet
updateServlet
package servlet;
import dao.EmpDao;
import entity.Emp;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class updateServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Integer empno=
Integer.parseInt(req.getParameter("empno")) ;
EmpDao d=new EmpDao();
Emp e= d.getEmpById(empno);
//获取到一个员工信息,现在输出一个页面,包含一个表单
//并且包含当前员工的所有属性值
resp.setContentType("text/html;charset=utf-8");
PrintWriter out= resp.getWriter();
out.println("<form action='updateActive' method='post'>");
out.println("<input type='text' readonly='readonly' name='empno' value='"+e.getEmpno()+"'><br>");
out.println("<input type='text' name='ename' value='"+e.getEname()+"'><br>");
out.println("<input type='text' name='sal' value='"+e.getSal()+"'><br>");
out.println("<input type='submit' value='修改提交'><br>");
out.println("</form>");
}
}
updateActive
package servlet;
import dao.EmpDao;
import entity.Emp;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class updateActive extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
Integer empno=
Integer.parseInt(req.getParameter("empno"));
String ename=req.getParameter("ename");
Double sal=Double.parseDouble(req.getParameter("sal"));
Emp emp=new Emp(empno,ename,sal);
EmpDao d=new EmpDao();
d.update(emp);
resp.sendRedirect(req.getContextPath()+"/find");
}
}
5.在web.xml中将servlet层的配置进行编写
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>Archetype Created Web Application</display-name>
<!--AddServlet的配置-->
<servlet>
<servlet-name>AddServlet</servlet-name>
<servlet-class>servlet.AddServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AddServlet</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
<!--FindAllServlet的配置-->
<servlet>
<servlet-name>FindAllServlet</servlet-name>
<servlet-class>servlet.FindAllServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FindAllServlet</servlet-name>
<url-pattern>/find</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DeleteServlet</servlet-name>
<servlet-class>servlet.DeleteServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DeleteServlet</servlet-name>
<url-pattern>/delete</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>updateServlet</servlet-name>
<servlet-class>servlet.updateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>updateServlet</servlet-name>
<url-pattern>/update</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>updateActive</servlet-name>
<servlet-class>servlet.updateActive</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>updateActive</servlet-name>
<url-pattern>/updateActive</url-pattern>
</servlet-mapping>
</web-app>
6.最后写一个add.html文件就好了
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
<center>
<h3>新增员工信息</h3>
<form action="add" method="post">
编号:<input type="text" name="empno" ><br>
姓名:<input type="text" name="ename"><br>
工资:<input type="text" name="sal"><br>
<input type="submit" value="添加">
</form>
<a href="find">查询员工</a>
<a href="update">修改</a>
</center>
</body>
</html>
结果:
使用 Tomcat,启动!
一个简单的servlet小项目就完成了,其中运用了相关知识,并对其进行了练习和巩固