學完了servlet、數據庫、以及之前的jsp。我們可以 做一個管理系統,將知識綜合起來運用!
一、創建數據庫,表名 easyui。
二、實現增刪改查。
1.新建web項目,導入所需要的4個包
2.包的分層 工具包將之前的復制過來就好了。
dao部分 創建 接口和 實現類。實現類在dao包下新建包impl。
package com.aaa.dao; import com.aaa.entity.Employee; import java.util.List; import java.util.Map; public interface IDengDAO { boolean goDeng(String username,String password); //查詢所有員工 List<Map<String,Object>> getAll(); //添加員工的方法 boolean add(Employee emp); //刪除員工的方法 boolean delete(int id); //修改員工的方法 boolean update(Employee emp); //根據id 獲取員工 Map<String ,Object>getEmp(int id); }
impl部分
package com.aaa.dao.Impl; import com.aaa.dao.IDengDAO; import com.aaa.entity.Employee; import com.aaa.util.DBUtil; import java.util.List; import java.util.Map; public class DengDAOImpl implements IDengDAO { @Override public boolean goDeng(String username, String password) { String sql="select * from login where username=? and password=?"; List<Map<String, Object>> list = DBUtil.executeQuery(sql, username, password); return list.size()>0; } @Override public List<Map<String, Object>> getAll() { String sql = "select e.id,e.name,e.telephone,e.hiredate,e.state,d.name dname,r.name rname from employee e INNER JOIN department d on e.deptID = d.id INNER JOIN role r on e.roleID = r.id"; return DBUtil.executeQuery(sql); } @Override public boolean add(Employee emp) { String sql = "insert into employee (name,telephone,deptID,roleID,state) values (?,?,?,?,?)"; return DBUtil.executeUpdate(sql,emp.getName(),emp.getTelephone(),emp.getDeptID(),emp.getRoleID(),emp.getState()); } @Override public boolean delete(int id) { String sql = "delete from employee where id = ?"; return DBUtil.executeUpdate(sql, id); } @Override public boolean update(Employee emp) { String sql = "update employee set name = ? , telephone = ? , deptID=? , roleID=? ,state = ? where id = ?"; return DBUtil.executeUpdate(sql,emp.getName(),emp.getTelephone(),emp.getDeptID(),emp.getRoleID(),emp.getState(),emp.getId()); } @Override public Map<String, Object> getEmp(int id) { String sql = "select * from employee where id = ?"; List<Map<String, Object>> list = DBUtil.executeQuery(sql, id); if(list.size()>0){ return list.get(0); } return null; } }
entity實體類部分
package com.aaa.entity; public class Employee { private int id; private String name; private String telephone; private int deptID; private int roleID; private int state; public Employee() { } public Employee(int id, String name, String telephone, int deptID, int roleID, int state) { this.id = id; this.name = name; this.telephone = telephone; this.deptID = deptID; this.roleID = roleID; this.state = state; } public Employee(String name, String telephone, int deptID, int roleID, int state) { this.name = name; this.telephone = telephone; this.deptID = deptID; this.roleID = roleID; this.state = state; } 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 getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public int getDeptID() { return deptID; } public void setDeptID(int deptID) { this.deptID = deptID; } public int getRoleID() { return roleID; } public void setRoleID(int roleID) { this.roleID = roleID; } public int getState() { return state; } public void setState(int state) { this.state = state; } @Override public String toString() { return "Employee{" + "id=" + id + ", name='" + name + '\'' + ", telephone='" + telephone + '\'' + ", deptID=" + deptID + ", roleID=" + roleID + ", state=" + state + '}'; } }
3.創建登錄界面index.jsp,在web目下。並創建LoginServlet 進行業務操作。
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/4/18 Time: 20:06 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <%-- 此時 這里僅僅只是登錄界面 不通過servlet 用戶直接在瀏覽器中訪問index.jsp --%> <title>用戶登錄界面</title> <style> fieldset{width: 300px;margin: 100px auto;} </style> </head> <body> <fieldset> <legend>用戶登錄</legend> <%--密碼錯誤 通過 error 關鍵字 獲得 錯誤提示信息--%> <div style="color: red">${error}</div> <%--提交的地址 是我們所寫的loginServlet 注意路徑格式--%> <form action="/zxf/deng" method="post"> <div> 姓名:<input type="type" name="username"/> </div> <div> 密碼: <input type="password" name="password"/> </div> <button >登錄</button> </form> </fieldset> </body> </html>
package com.aaa.servelt; import com.aaa.dao.IDengDAO; import com.aaa.dao.Impl.DengDAOImpl; 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("/deng") //虛擬路徑 form表單的提交地址 /zxf/deng public class LoginServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.獲取 我們在登錄界面 輸入的密碼和用戶名 String username = req.getParameter("username"); String password = req.getParameter("password"); //2.調用dao方法進行驗證 IDengDAO dao=new DengDAOImpl(); boolean goDeng = dao.goDeng(username, password); //3.判斷密碼 是否正確 if (goDeng){ //4.正確 重定向 到main.jsp頁面 resp.sendRedirect("/zxf/main.jsp"); }else { //5.錯誤 共享數據 請求轉發到 index.jsp req.setAttribute("error","賬號密碼錯誤,請重試!"); req.getRequestDispatcher("/index.jsp").forward(req,resp); } } }
登錄不成功 會提示錯誤。登陸成功,就跳轉到main.jsp部分
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/4/18 Time: 20:53 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>員工數據庫系統</title> <style> ul,iframe{ float: left; } ul{ width: 15%; } iframe{ width: 80%; } </style> </head> <body> <h1>歡迎來到員工管理系統</h1> <div> <ul> <li><a href="/zxf/emp" target="show">員工管理</a></li> <li><a href="/zxf/add.jsp" target="show">添加員工</a></li> </ul> <iframe name="show" height="800px"></iframe> </div> </body> </html>
點擊員工管理,跳轉到
package com.aaa.servelt; import com.aaa.dao.IDengDAO; import com.aaa.dao.Impl.DengDAOImpl; 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; import java.util.Map; @WebServlet("/emp") //main.jsp 的員工管理 跳轉到這 public class EmpServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取所有數據 IDengDAO dao=new DengDAOImpl(); List<Map<String, Object>> list = dao.getAll(); //共享數據 req.setAttribute("list",list); //請求轉發 req.getRequestDispatcher("/emp.jsp").forward(req,resp); } }
轉發到 emp.jsp
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/4/19 Time: 16:37 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head> <title>Title</title> </head> <body> <table border="1" cellspacing="0" width="95%" align="center"> <tr> <th>員工編號</th> <th>員工姓名</th> <th>員工手機號</th> <th>入職時間</th> <th>員工部門</th> <th>員工角色</th> <th>員工狀態</th> <th>員工操作</th> </tr> <c:forEach var="emp" items="${list}"> <tr> <th>${emp.id}</th> <th>${emp.name}</th> <th>${emp.telephone}</th> <th>${emp.hiredate}</th> <th>${emp.dname}</th> <th>${emp.rname}</th> <th>${emp.state==1?"在職":"離職"}</th> <th> <%-- 修改和刪除 有各自要跳轉的servlet頁面--%> <a href="/zxf/delete?id=${emp.id}">刪除</a> <a href="/zxf/toUpdate?id=${emp.id}">修改</a> </th> </tr> </c:forEach> </table> </body> </html>
點節刪除 跳轉到DeleteEmpServlet
package com.aaa.servelt; import com.aaa.dao.IDengDAO; import com.aaa.dao.Impl.DengDAOImpl; 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("/delete") public class DeleteEmpServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取請求參數 String id = req.getParameter("id"); //調用dao 根據id刪除員工。 IDengDAO dao=new DengDAOImpl(); boolean delete = dao.delete(Integer.parseInt(id)); //重定向到 emp resp.sendRedirect("/zxf/emp"); } }
點擊修改員工 ,跳轉到ToUpdateServlet
package com.aaa.servelt; import com.aaa.dao.IDengDAO; import com.aaa.dao.Impl.DengDAOImpl; 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.Map; @WebServlet("/toUpdate") /* 修改 用戶點擊修改按鈕請求到servlet 先要獲取 要修改的員工信息 共享給jsp 請求轉發過去 展示給用戶看 */ public class ToUpdate extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取參數 String id = req.getParameter("id"); //根據ID獲取員工信息 IDengDAO dao=new DengDAOImpl(); Map<String, Object> emp= dao.getEmp(Integer.parseInt(id)); //共享員工信息 req.setAttribute("emp",emp); //請求轉發 req.getRequestDispatcher("/update.jsp").forward(req,resp); } }
他會請求轉發到 update.jsp
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/4/18 Time: 9:14 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"> fieldset{width: 300px;margin: 100px auto;} </style> </head> <body> <fieldset id=""> <legend>修改員工</legend> <form action="/zxf/update" method="post"> <input type="hidden" name="id" value="${emp.id}" /> <div> 員工姓名: <input name="name" value="${emp.name}" /> </div> <div> 員工手機: <input name="telephone" value="${emp.telephone}" /> </div> <div> 員工部門: <select name="deptID" id="deptID" > <option value="1" ${emp.deptID==1?"selected":""} >總經辦</option> <option value="2" ${emp.deptID==2?"selected":""} >人事部</option> <option value="3" ${emp.deptID==3?"selected":""} >業務部</option> </select> </div> <div> 員工角色: <select name="roleID" id="roleID" > <option value="1" id="r1">超級管理員</option> <option value="2" id="r2">員工管理員</option> <option value="3" id="r3">業務管理員</option> </select> </div> <div> 員工狀態: <select name="state" > <option value="0" id="s0">離職</option> <option value="1" id="s1">在職</option> </select> </div> <button>修改</button> </form> </fieldset> <script> // 當前表單的表單元素 夠不夠 // 讓 角色下拉框中的 1 2 3 document.getElementById("r"+${emp.roleID}).selected = "selected"; document.getElementById("s"+${emp.state}).selected = "selected"; </script> </body> </html>
這里的jsp頁面會跳轉到UpdateServlet
package com.aaa.servelt; import com.aaa.dao.IDengDAO; import com.aaa.dao.Impl.DengDAOImpl; import com.aaa.entity.Employee; 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("/update") public class UpdateEmpServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取請求參數 處理請求亂碼 req.setCharacterEncoding("UTF-8"); req.setCharacterEncoding("UTF-8"); // 1 獲取請求參數 String name = req.getParameter("name"); String telephone = req.getParameter("telephone"); String deptID = req.getParameter("deptID"); String roleID = req.getParameter("roleID"); String state = req.getParameter("state"); String id = req.getParameter("id"); Employee employee = new Employee(Integer.parseInt(id), name, telephone, Integer.parseInt(deptID), Integer.parseInt(roleID), Integer.parseInt(state)); //2 通過dao將數據添加到數據庫中 IDengDAO dao=new DengDAOImpl(); boolean update = dao.update(employee); //3 重定向到/emp resp.sendRedirect("/zxf/emp"); } }
他又回到了emp 就是EmpServlet。
到此 刪除和修改的功能完成。
回到 man.jsp 點擊添加 員工。他會跳轉到 add.jsp 頁面
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/4/17 Time: 11:48 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <style type="text/css"> fieldset{width: 300px;margin: 100px auto;} </style> </head> <body> <fieldset id=""> <legend>添加員工</legend> <%-- 跳轉到 /zxf/addEmp 這個servlet--%> <form action="/zxf/addEmp" method="post"> <div> 員工姓名: <input name="name" /> </div> <div> 員工手機: <input name="telephone" /> </div> <div> 員工部門: <select name="deptID"> <option value="1">總經辦</option> <option value="2">人事部</option> <option value="3">業務部</option> </select> </div> <div> 員工角色: <select name="roleID"> <option value="1">超級管理員</option> <option value="2">員工管理員</option> <option value="3">業務管理員</option> </select> </div> <div> 員工狀態: <select name="state"> <option value="0">離職</option> <option value="1">在職</option> </select> </div> <button>添加</button> </form> </fieldset> </body> </html>
這里的jsp 會跳轉到AddServlet
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/addEmp") public class AddEmpServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //處理1.請求亂碼---->瀏覽器發給 servlet 亂碼 // 2.響應亂碼----->servlet 回傳給瀏覽器之后亂碼 不用處理 為啥? 因為我們將其交給了 jsp 來解決! req.setCharacterEncoding("utf-8"); // 1 獲取請求參數 String name = req.getParameter("name"); String telephone = req.getParameter("telephone"); String deptID = req.getParameter("deptID"); String roleID = req.getParameter("roleID"); String state = req.getParameter("state"); Employee employee = new Employee(name,telephone,Integer.parseInt(deptID),Integer.parseInt(roleID),Integer.parseInt(state)); // 2 調用dao 將數據添加到數據庫中 IDengDAO dao=new DengDAOImpl(); dao.add(employee); // 3 回傳信息 成功/失敗 req.setAttribute("msg","添加成功"); // 4 請求轉發到 add.jsp req.getRequestDispatcher("/add.jsp").forward(req,resp); } }
這里會將數據 傳送給add.jsp。
好了,添加員工完成! 增刪改查實現,舒服。
三、總結。
1.jsp是用來展示數據的
2.servlet 是用來進行業務操作的 請求轉發和重定向。
3.bug雖然痛苦,但自己解決 的時候,也很開心。-------菜鳥的心得!
四,展示所有的文件目錄