20210713_emp_sys中的dept的相关操作1


emp_sys项目的dept操作

该文档主要数帮助理解上课代码编写的思路

一、项目的目录结构

Day22Emp中Dept相关操作 - 图1

二、项目使用的到的技术

后端:mybatis+servlet+jsp
前端:html+css+js+jquery+bootstrap
数据库:mysql

三、项目中使用到的表

Day22Emp中Dept相关操作 - 图2
部门表的信息
Day22Emp中Dept相关操作 - 图3
福利表的信息
Day22Emp中Dept相关操作 - 图4
员工表的信息
Day22Emp中Dept相关操作 - 图5
中间表(维护员工和福利的关系表,福利和员工属于多堆多,需要该表进行维护)
Day22Emp中Dept相关操作 - 图6

四、项目的主页面

Day22Emp中Dept相关操作 - 图7
顶部栏后期可以放置logo,和登录人的账号
底部左侧栏是菜单栏,当点击菜单中超链接时,在显示区进行展示,显示区采用iframe进行完成(这块采用a+iframe)

五、具体dept相关功能的实现

1.关于点击【部门增加】的超链接:

  1. <a href="html/dept/add.html" target="context"><span class="glyphicon glyphicon-plus"></span>&nbsp;部门增加</a>

该页面中主要是有:
Day22Emp中Dept相关操作 - 图8
当点击提交按钮时,进行到该表单指定的路径action=”dept/add” ,进行到servlet中,servlet通过提交的url获取最后一位\后的字符串,找到相关的方式,具体采用的反射机制进行完成的

  1. @WebServlet(value = { "/dept/add", "/dept/list", "/dept/findById", "/dept/update" }) // localhost:8080/emp_sys_v2.2/dept/xxxx
  2. public class DeptServlet extends HttpServlet {
  3. @Override
  4. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  5. req.setCharacterEncoding("utf-8");
  6. ``
  7. // 获取请求的url
  8. ``
  9. String str1 = req.getRequestURI();/// emp_sys_v2.0/dept/xxxx
  10. ``
  11. String[] strs = str1.split("/");
  12. ``
  13. String methodName = strs[strs.length - 1];
  14. // 反射进行调用方法
  15. Class cls = this.getClass();
  16. try {
  17. //获取到方法对象
  18. Method m = cls.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
  19. m.invoke(this, req, resp);//调用方法
  20. ``
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. }
  24. ``
  25. }

此时会调用add方法进行获取的保存,和列表数据的准备

  1. public void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  2. String dname = req.getParameter("dname");
  3. String stateStr = req.getParameter("state");
  4. int state = Integer.parseInt(stateStr);
  5. ``
  6. Dept dept = new Dept(state, dname);
  7. ``
  8. // 需要将数据放在数据库中(Mybatis)
  9. DeptDao deptDao = MyBatisUtil.getMapper(DeptDao.class);
  10. boolean f = deptDao.add(dept);
  11. MyBatisUtil.session.commit();
  12. MyBatisUtil.closeSession();
  13. list(req,resp);
  14. ``
  15. }
  16. ``
  17. // 展示数据
  18. public void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  19. ``
  20. DeptDao deptDao = MyBatisUtil.getMapper(DeptDao.class);
  21. // 获取部门列表数据
  22. List<Dept> list = deptDao.findAll();
  23. req.setAttribute("list", list);
  24. ``
  25. MyBatisUtil.session.commit();
  26. MyBatisUtil.closeSession();
  27. ``
  28. req.getRequestDispatcher("/html/dept/list.jsp").forward(req, resp);
  29. ``
  30. }

当代码执行到req.getRequestDispatcher(“/html/dept/list.jsp”).forward(req, resp);时会调用jsp页面,最终将jsp变为html资源响应给客户端浏览器,jsp中的核心代码如下

  1. <table class="table ">
  2. <caption class="tableHeader"><h3>部门信息</h3></caption>
  3. <thead>
  4. <tr>
  5. <th>序号</th>
  6. <th>名称</th>
  7. <th>状态</th>
  8. <th>操作</th>
  9. ``
  10. </tr>
  11. </thead>
  12. <tbody>
  13. <c:forEach items="${list }" var="d" varStatus="vs">
  14. <tr class="${vs.index%2==0?'bg':'' }">
  15. <td>${vs.index+1 }</td>
  16. <td>${d.dname }</td>
  17. <td>${d.state==1?"启用":"禁用" }</td>
  18. <!-- 进入到servlet中进行准备数据 ,需要传输id到servlet中,这样就可以知道获取哪个部门的信息 ,
  19. 关于超链接传输参数,请求地址后加?进行传输,语法 :请求地址?参数名1=参数值1&参数2=值2
  20. ``
  21. ``
  22. ``
  23. -->
  24. <td>
  25. <a href="dept/findById?did=${d.did}">
  26. <span class="glyphicon glyphicon-edit">修改</span>
  27. </a>
  28. </td>
  29. </tr>
  30. </c:forEach>
  31. </tbody>
  32. </table>

响应给客户端浏览器的页面如下图
Day22Emp中Dept相关操作 - 图9

2.关于点击【部门列表】的超链接

  1. <a href="dept/list" target="context"><span class="glyphicon glyphicon-th-list"></span>&nbsp;部门列表</a>

注意:先进入到servlet中,获取到列表数据,再放在在jsp中,最终静态化
其中上方的超链接请求的servlet,进入到1中的list方法,然后调用1中的jsp代码,最后响应给客户端,效果如上图

3.点击部门列表页面中操作列中的【修改】

要进行修改,必须分两大步骤执行
1)将指定部门did的数据先呈现出来
2)再对数据进行提交保存

将指定部门did的数据先呈现出来

每一个修改是一个超链接Day22Emp中Dept相关操作 - 图10
该超链接进入到servlet获取到指定id的部门信息,然后调用jsp页面,最后将生产的静态页面响应给客户端

  1. public void findById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  2. ``
  3. //获取传输来的did
  4. String didStr=req.getParameter("did");
  5. ``
  6. int did=Integer.parseInt(didStr);
  7. ``
  8. DeptDao deptDao = MyBatisUtil.getMapper(DeptDao.class);
  9. ``
  10. Dept dept=deptDao.findByID(did);
  11. ``
  12. req.setAttribute("dept", dept);
  13. ``
  14. req.getRequestDispatcher("/html/dept/update.jsp").forward(req, resp);
  15. }

jsp中的代码如下

  1. <form action="dept/update" method="post">
  2. <input name="did" value="${dept.did }" type="hidden">
  3. 部门名称<input name="dname" value="${dept.dname }"/><br/>
  4. 是否启用<input type="radio" name="state" value="1" ${ dept.state==1?"checked":""} >启用
  5. <input type="radio" name="state" value="0" ${ dept.state==0?"checked":""}>禁用
  6. <input type="submit">
  7. </form>

呈现的效果如下
Day22Emp中Dept相关操作 - 图11

对数据进行修改保存

当点击提交按钮时,进入到servlet,调用update方法

  1. //提交3个参数过来
  2. String didStr=req.getParameter("did");
  3. String dname=req.getParameter("dname");
  4. String stateStr=req.getParameter("state");
  5. //创建的dept对象的属性进行赋值
  6. Dept dept =new Dept(Integer.parseInt(stateStr), dname);
  7. dept.setDid(Integer.parseInt(didStr));
  8. ``
  9. //进行修数保存
  10. DeptDao deptDao = MyBatisUtil.getMapper(DeptDao.class);
  11. deptDao.update(dept);
  12. ``
  13. MyBatisUtil.session.commit();
  14. MyBatisUtil.closeSession();
  15. ``
  16. ``
  17. //数据展示
  18. list(req,resp);

提交完成数据,有调用展示列表数据的list方法,将有列表数据的页面最后响应给客户

注意url使用规则

关于url的写法的总结

在jsp和html上进行编写时使用base 标签,base中href的值写法是:/项目名称/ ,使用的base页面上访问本项目资源时都是加了 /项目名称/
在servlet中写地址时,以 / 开头 ,此时的/代表就是:http://地址:端口/项目名称/