实习实训

  • 项目empManeger_2021
    • 编辑功能
      • 前台实现
        • 编辑按钮
        • 获取学生信息
        • 返回前台
      • 后台实现
        • 相关数据库接口与方法
          • 数据库接口方法 getEmpByEmpno声明
          • 数据库接口方法 editEmp声明
          • 数据库接口方法getEmpByEmpno实现
          • 数据库接口方法 editEmp实现
        • 相关业务逻辑层声明与实现
          • 业务逻辑getEmpByEmpno声明
          • 业务逻辑editEmp声明
          • 业务逻辑getEmpByEmpno实现
          • 业务逻辑editEmp实现
        • 相关Servlet实现
          • GetEmpByEmpnoServlet
          • EditServlet
    • 分页查询功能
      • 前台实现
      • 后台实现
        • 数据库接口方法getEmpByPag声明
        • 数据库接口方法getEmpByPag实现
        • 业务逻辑getEmpByPage声明
        • 业务逻辑getEmpByPage实现
        • GetAllEmpServlet

项目empManeger_2021

编辑功能

前台实现

编辑按钮

  • 在员工列表页面empList.jsp加入编辑按钮,通过编辑按钮的点击事件跳转到编辑页面进行编辑。
<input type="button" class="btn btn-primary" value="编辑" onclick="editEmp()"/>
        //编辑员工function editEmp(){//用户如果没有选择记录,那么给出提出var isChk = false;//用于存储用户所选中的记录数var chk_num = 0;//用于存储被选中的员工编号var empno = "";var arrChk = document.getElementsByName("chk");for(var i=0; i<arrChk.length; i++){if(arrChk[i].checked){//当前复选框被选中isChk = true;chk_num ++;empno = arrChk[i].value;}}if(!isChk){alert("请选择要编辑的员工信息");//结束当前方法,结束编辑的动作return;}//如果用户多选,那么提示用户只能选择一条进行修改if(chk_num > 1){alert("只能选择一条记录进行修改操作");return;}//以上两种都不满足,那么可以进行编辑操作//需要单独打开员工编辑的页面进行信息的修改//这里不能直接跳转编辑页面,因为编辑页面没有任何的员工信息//我们需要先获取这个员工的全部信息,传递到编辑页面中//我们去数据库中获取当前员工的全部信息window.location.href = "GetEmpByEmpnoServlet?empno=" + empno;}

获取学生信息

  • 先跳转到后台GetEmpByEmpnoServlet获取被勾选的学生的信息,然后再跳转到员工信息编辑页面editEmp.jsp。
<%--Created by IntelliJ IDEA.User: AdministratorDate: 2021/1/11Time: 8:57To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>员工编辑</title>
</head>
<body>
<div style="float:right;">当前用户:${uname}</div>
<div align="center"><h4>编辑员工信息</h4><form action="EditServlet" method="post"><table><tr><td align="right">员工姓名:</td><td><input type="hidden" name="empno" value="${emp.empno}"><input type="text" name="ename" size="16px" value="${emp.ename}"></td></tr><tr><td>员工性别:</td><td><c:if test="${emp.sex == '男' or emp.sex == '' or emp.sex == null}"><input type="radio" name="sex" value="男" checked> 男<input type="radio" name="sex" value="女"> 女</c:if><c:if test="${emp.sex == '女'}"><input type="radio" name="sex" value="男" > 男<input type="radio" name="sex" value="女" checked> 女</c:if></td></tr><tr><td align="right">员工工作:</td><td><%--设置隐藏域用来存储员工的工作--%><input type="hidden" id="jobStr" value="${emp.job}"><select name="job" id="jobSel"><option value="coder">coder</option><option value="行政">行政</option><option value="销售">销售</option><option value="市场">市场</option></select></td></tr><tr><td align="right">入职日期:</td><td><input type="date" name="hiredate" value="${emp.hiredate}"></td></tr><tr><td colspan="2" align="center"><input type="submit" class="btn btn-primary" value="确定"><input type="button" class="btn" value="取消" onclick="cancel()"></td></tr></table></form>
</div><%--获取后台传递来的msg提示信息--%>
<%--隐藏域,页面中不显示,用它来接收后台传递的msg提示信息--%>
<input id="msg" type="hidden" value="${msg}"><script>//window.onload只能出现一次window.onload = function () {//获取工作隐藏域的value值var job = document.getElementById("jobStr").value;//根据job的值决定下拉框选择哪一个document.getElementById("jobSel").value = job;//展示提示信息var msg = document.getElementById("msg").value;if(msg != "" && msg != null){alert(msg);}}function cancel(){//跳转回到员工列表页面//真正要跳转的是后台的GetAllEmpServlet//直接修改浏览器访问路径即可window.location.href = "GetAllEmpServlet";}</script></body>
</html>

返回前台

  • 最后将表单提交给后台EditServlet,通过后台将数据库中的信息更改。最后若编辑成功则通过GetAllEmpServlet将编辑好的信息带回到前台empList.jsp。

后台实现

相关数据库接口与方法

数据库接口方法 getEmpByEmpno声明
    Emp getEmpByEmpno(int empno);
数据库接口方法 editEmp声明
   int editEmp(Emp emp);
数据库接口方法getEmpByEmpno实现
    @Overridepublic Emp getEmpByEmpno(int empno) { //Connection conn = DBUtil.getConn();Emp emp = null;PreparedStatement pst = null;ResultSet rs = null;String sql = "select * from employee where empno = ?";try {pst = conn.prepareStatement(sql);pst.setInt(1,empno);rs = pst.executeQuery();if(rs.next()){emp = new Emp();emp.setEmpno(rs.getInt("empno"));emp.setEname(rs.getString("ename"));emp.setJob(rs.getString("job"));emp.setHiredate(rs.getString("hiredate"));emp.setSex(rs.getString("sex"));}} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.closeAll(conn,pst,rs);}return emp;}
数据库接口方法 editEmp实现
    @Overridepublic int editEmp(Emp emp) {Connection conn = DBUtil.getConn();int num = 0;PreparedStatement pst = null;String sql = "update employee set ename = ?,job = ?,hiredate = ?,sex = ? where empno = ?";try {pst = conn.prepareStatement(sql);pst.setString(1,emp.getEname());pst.setString(2,emp.getJob());pst.setString(3,emp.getHiredate());pst.setString(4,emp.getSex());pst.setInt(5,emp.getEmpno());num = pst.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.closeAll(conn,pst,null);}return num;}

相关业务逻辑层声明与实现

业务逻辑getEmpByEmpno声明
    Emp getEmpByEmpno(String empno);
业务逻辑editEmp声明
    int editEmp(Emp emp);
业务逻辑getEmpByEmpno实现
    @Overridepublic Emp getEmpByEmpno(String empno) {//将String类型转换为int类型int empnoInt = Integer.parseInt(empno);return empDao.getEmpByEmpno(empnoInt);}
业务逻辑editEmp实现
    @Overridepublic int editEmp(Emp emp) {return empDao.editEmp(emp);}

相关Servlet实现

GetEmpByEmpnoServlet
package com.wangbiao.emp.servlet;import com.wangbiao.emp.model.Emp;
import com.wangbiao.emp.service.IEmpService;
import com.wangbiao.emp.service.impl.EmpServiceImpl;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("/GetEmpByEmpnoServlet")
public class GetEmpByEmpnoServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取前台传递的员工编号String empno = request.getParameter("empno");//调用service,实现查询功能IEmpService empService = new EmpServiceImpl();Emp emp = empService.getEmpByEmpno(empno);//我们获取到的emp对象中已经包含了该员工的全部信息if(emp != null){//将emp对象响应到编辑页面,并在编辑页面展示员工信息request.setAttribute("emp",emp);request.getRequestDispatcher("editEmp.jsp").forward(request,response);}else{request.setAttribute("msg","获取员工信息失败");request.getRequestDispatcher("GetAllEmpServlet").forward(request,response);}}
}
EditServlet
package com.wangbiao.emp.servlet;import com.wangbiao.emp.model.Emp;
import com.wangbiao.emp.service.IEmpService;
import com.wangbiao.emp.service.impl.EmpServiceImpl;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("/EditServlet")
public class EditServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//处理字符集编码request.setCharacterEncoding("utf-8");String empno = request.getParameter("empno");String ename = request.getParameter("ename");String job = request.getParameter("job");String hiredate = request.getParameter("hiredate");String sex = request.getParameter("sex");//将empno转换为int类型int empnoInt = Integer.parseInt(empno);//封装员工对象Emp emp = new Emp();emp.setEmpno(empnoInt);emp.setEname(ename);emp.setSex(sex);emp.setHiredate(hiredate);emp.setJob(job);//调用serviceIEmpService empService = new EmpServiceImpl();int num = empService.editEmp(emp);if(num > 0){request.setAttribute("msg","信息修改成功");request.getRequestDispatcher("GetAllEmpServlet").forward(request,response);}else{request.setAttribute("msg","服务器错误");request.getRequestDispatcher("GetEmpByEmpnoServlet?empno=" + empno).forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}
}

分页查询功能

前台实现

  • 在empList.jsp中加入页码按钮,通过页码的点击事件以及插叙条件来切换不同页的员工信息。
        <c:if test="${currPage == 1}"><button onclick="prev('${currPage}')" class="btn btn-primary" disabled>上一页</button></c:if><c:if test="${currPage != 1}"><button onclick="prev('${currPage}')" class="btn btn-primary">上一页</button></c:if><c:forEach var="pageIndex" begin="1" end="${totalPage}" step="1"><button onclick="queryPage('${pageIndex}')" class="btn btn-primary">${pageIndex}</button></c:forEach><c:if test="${currPage == totalPage}"><button onclick="next('${currPage}')" class="btn btn-primary" disabled>下一页</button></c:if><c:if test="${currPage != totalPage}"><button onclick="next('${currPage}')" class="btn btn-primary" >下一页</button></c:if>
     //根据查询条件查询当前页function queryPage(pageIndex){var filter = document.getElementById("filter").value;window.location.href = "GetAllEmpServlet?pageIndex=" + pageIndex + "&filter=" + filter;}//根据查询条件查询前一页function prev(pageIndex) {var filter = document.getElementById("filter").value;var currPage = parseInt(pageIndex) - 1;window.location.href = "GetAllEmpServlet?pageIndex=" + currPage + "&filter=" + filter;}//根据查询条件查询下一页function next(pageIndex) {var filter = document.getElementById("filter").value;var currPage = parseInt(pageIndex) + 1;window.location.href = "GetAllEmpServlet?pageIndex=" + currPage + "&filter=" + filter;}

后台实现

数据库接口方法getEmpByPag声明

    List<Emp> getEmpByPag(int page,int limit,String ename);

数据库接口方法getEmpByPag实现

    @Overridepublic List<Emp> getEmpByPag(int page, int limit, String ename) {Connection conn = DBUtil.getConn();List<Emp> list = new ArrayList<>();PreparedStatement pst = null;ResultSet rs = null;String sql = "select * from employee ";if (ename != null) {sql+="  where ename like ?  ";}//mysql的分页语法 select * from table limit 起始序号,每页显示条数//每页显示五条,第一页数据, select * from table limit 0,5//第二条的数据  select * from table limit 5,5//执行sql语句sql+="  limit ?,?";try {pst = conn.prepareStatement(sql);if (ename!=null){pst.setString(1, "%"+ename+"%");pst.setInt(2, (page-1)*limit);pst.setInt(3, limit);}else{pst.setInt(1, (page-1)*limit);pst.setInt(2, limit);}rs = pst.executeQuery();while (rs.next()){Emp emp = new Emp();emp.setEmpno(rs.getInt("empno"));emp.setEname(rs.getString("ename"));emp.setJob(rs.getString("job"));emp.setHiredate(rs.getString("hiredate"));emp.setSex(rs.getString("sex"));list.add(emp);}} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.closeAll(conn, pst, rs);}return list;}

业务逻辑getEmpByPage声明

    List<Emp> getEmpByPage(int page,int limit,String ename);

业务逻辑getEmpByPage实现

  @Overridepublic List<Emp> getEmpByPage(int page, int limit, String ename) {return empDao.getEmpByPag(page,limit,ename);}

GetAllEmpServlet

  • 注意此处的GetAllEmpServlet是项目最终的样式,和第五天中查询功能的后台GetAllEmpServlet,此处的GetAllEmpServlet具备分页功能。其中业务逻辑层 的方法selectByEname和第五天的相同。
package com.wangbiao.emp.servlet;import com.wangbiao.emp.model.Emp;
import com.wangbiao.emp.service.IEmpService;
import com.wangbiao.emp.service.impl.EmpServiceImpl;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("/GetAllEmpServlet")
public class GetAllEmpServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取用户的查询条件//当我们从登录页面进入到该servlet时filter为null//如果点击查询按钮进入到该servlet时filter为前台填写的内容String filter = request.getParameter("filter");//我们规定每页显示五条数据//从登录进入默认显示第一页数据int page = 1;int limit = 5;//获取前台传递的页码数String pages = request.getParameter("pageIndex");//当从登录页面进入该servlet pages 为null//如果通过点击页码按钮进入到servlet,那么pages有具体值if(pages != null){page = Integer.parseInt(pages);}//前台需要展示页码的按钮,那么需要知道一共有多少页//我们需要获取总条数,然后除以每页显示条数IEmpService empService = new EmpServiceImpl();//不分页的查询List<Emp> list_all = empService.selectByEname(filter);//获取总条数int total = list_all.size();//计算总页数//int totalPage = 0;/*if(total % limit == 0){totalPage = total / limit;}else{totalPage = total / limit + 1;}*///三目运算符int totalPage = total % limit == 0 ? total / limit : total / limit + 1;//根据分页条件进行分页查询List<Emp> list = empService.getEmpByPage(page,limit,filter);if(filter != null){//将查询条件回显request.setAttribute("filter",filter);}//将总页数返回到前台request.setAttribute("totalPage",totalPage);//把当前页面返回到前台request.setAttribute("currPage",page);//跳转到empList.jsp中,并将list集合响应给浏览器request.setAttribute("list",list);request.getRequestDispatcher("empList.jsp").forward(request,response);}
}

2021_01_11_实习实训_day07_员工后台管理项目_编辑功能以及分页查询功能相关推荐

  1. java计算机毕业设计淮安城市开放大学实习实训管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计淮安城市开放大学实习实训管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计淮安城市开放大学实习实训管理系统源码+mysql数据库+系统+lw文档+部署 ...

  2. java计算机毕业设计高校实习实训管理系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计高校实习实训管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计高校实习实训管理系统MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: 项目 ...

  3. JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈 ...

  4. java计算机毕业设计高校实习实训管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计高校实习实训管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计高校实习实训管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构 ...

  5. java计算机毕业设计高校实习实训管理系统(附源码、数据库)

    java计算机毕业设计高校实习实训管理系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclisp ...

  6. javaweb实习实训管理系统mysql

    本毕业设计基于JSP的实习实训管理系统,本系统能实现网上的实习实训信息管理,主要功能有:添加用户.查看用户.管理用户.添加实验室.查看实验室.管理实验室.添加课程.查看课程.管理课程.添加教学.查看教 ...

  7. java类与对象实验报告心得体会_java实习实训报告心得【三篇】

    [导语]Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言.而学习Java的同学java实习实训是必经的过程.以下是无忧考网整理的java实习实训报告心得,欢迎阅读! java实习实训报告心 ...

  8. JSP实习实训管理系统myeclipse开发mysql数据库WEB结构java编程

    一.源码特点   JSP 实习实训管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发. JSP实习实训管理系统my ...

  9. 计算机毕业设计Java高校实习实训管理系统(源码+系统+mysql数据库+Lw文档)

    计算机毕业设计Java高校实习实训管理系统(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java高校实习实训管理系统(源码+系统+mysql数据库+Lw文档) 本源码技术栈: 项目架构:B ...

最新文章

  1. 团队作业4——第一次项目冲刺(Alpha版本)4.28
  2. 2021年3月15日 腾讯PCG运营开发实习面试(一、二、三面)(面经含总结)
  3. 基于策略的路由(下)
  4. swift_024(Swift 的构造过程)
  5. CSDN博客转载攻略
  6. 各国家分析之 古埃及非洲经济
  7. linux下的struct sigaction
  8. C++11学习 新特性之 “=default” 、“=delete”
  9. php 中class,PHP5中的类(class) (转)
  10. 「爬虫入门」拒绝跟热点搞python,直接在浏览器里体验『第一次』,理解原理=>如鱼得水
  11. linux命令行启动新终端,12个让您震撼的Linux终端命令
  12. C10K问题及解决方案
  13. 实施定性风险分析-规划过程组
  14. 【Unity3D实战】摇摆直升机开发实战(一)
  15. 6-2 折半查找的实现 (10 分)
  16. Shell 千分 逗号隔开
  17. 看我骚操作‘破解’某查查app的sign以及某眼查的Authorization!
  18. c语言返回结构体,(C/C++) 用函数返回一个结构体
  19. 《灵飞经5·龙生九子》第二十四章 九王朝阙 上
  20. 知乎、百度会被ChatGPT取代吗?百度文心一言胜算如何

热门文章

  1. 博泰应宜伦:智能汽车上攻时刻,需要“国家级”平台登场
  2. 阿里云企业邮箱如何开通使用
  3. 深度学习的Attention模型
  4. Day891.一主多从的切换正确性 -MySQL实战
  5. MATLAB环境下基于电机电流特征分析的齿轮故障检测
  6. CSS元素的width和水平margin的设置
  7. 判断当前的日期是否是节假日、调休、补班、工作日、双休日
  8. Android Vibrator 框架总结
  9. 电脑开始菜单文件夹无法删除的解决方法
  10. halcon C++编程 第6讲 HVector(tcy)