20210713_emp_sys中的dept的相关操作1
emp_sys项目的dept操作
一、项目的目录结构
二、项目使用的到的技术
后端:mybatis+servlet+jsp
前端:html+css+js+jquery+bootstrap
数据库:mysql
三、项目中使用到的表

部门表的信息
福利表的信息
员工表的信息
中间表(维护员工和福利的关系表,福利和员工属于多堆多,需要该表进行维护)
四、项目的主页面

顶部栏后期可以放置logo,和登录人的账号
底部左侧栏是菜单栏,当点击菜单中超链接时,在显示区进行展示,显示区采用iframe进行完成(这块采用a+iframe)
五、具体dept相关功能的实现
1.关于点击【部门增加】的超链接:
<a href="html/dept/add.html" target="context"><span class="glyphicon glyphicon-plus"></span> 部门增加</a>
该页面中主要是有:
当点击提交按钮时,进行到该表单指定的路径action=”dept/add” ,进行到servlet中,servlet通过提交的url获取最后一位\后的字符串,找到相关的方式,具体采用的反射机制进行完成的
@WebServlet(value = { "/dept/add", "/dept/list", "/dept/findById", "/dept/update" }) // localhost:8080/emp_sys_v2.2/dept/xxxxpublic class DeptServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");- ``
// 获取请求的url- ``
String str1 = req.getRequestURI();/// emp_sys_v2.0/dept/xxxx- ``
String[] strs = str1.split("/");- ``
String methodName = strs[strs.length - 1];// 反射进行调用方法Class cls = this.getClass();try {//获取到方法对象Method m = cls.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);m.invoke(this, req, resp);//调用方法- ``
} catch (Exception e) {e.printStackTrace();}- ``
}
此时会调用add方法进行获取的保存,和列表数据的准备
public void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String dname = req.getParameter("dname");String stateStr = req.getParameter("state");int state = Integer.parseInt(stateStr);- ``
Dept dept = new Dept(state, dname);- ``
// 需要将数据放在数据库中(Mybatis)DeptDao deptDao = MyBatisUtil.getMapper(DeptDao.class);boolean f = deptDao.add(dept);MyBatisUtil.session.commit();MyBatisUtil.closeSession();list(req,resp);- ``
}- ``
// 展示数据public void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {- ``
DeptDao deptDao = MyBatisUtil.getMapper(DeptDao.class);// 获取部门列表数据List<Dept> list = deptDao.findAll();req.setAttribute("list", list);- ``
MyBatisUtil.session.commit();MyBatisUtil.closeSession();- ``
req.getRequestDispatcher("/html/dept/list.jsp").forward(req, resp);- ``
}
当代码执行到req.getRequestDispatcher(“/html/dept/list.jsp”).forward(req, resp);时会调用jsp页面,最终将jsp变为html资源响应给客户端浏览器,jsp中的核心代码如下
<table class="table "><caption class="tableHeader"><h3>部门信息</h3></caption><thead><tr><th>序号</th><th>名称</th><th>状态</th><th>操作</th>- ``
</tr></thead><tbody><c:forEach items="${list }" var="d" varStatus="vs"><tr class="${vs.index%2==0?'bg':'' }"><td>${vs.index+1 }</td><td>${d.dname }</td><td>${d.state==1?"启用":"禁用" }</td><!-- 进入到servlet中进行准备数据 ,需要传输id到servlet中,这样就可以知道获取哪个部门的信息 ,关于超链接传输参数,请求地址后加?进行传输,语法 :请求地址?参数名1=参数值1&参数2=值2- ``
- ``
- ``
--><td><a href="dept/findById?did=${d.did}"><span class="glyphicon glyphicon-edit">修改</span></a></td></tr></c:forEach></tbody></table>
2.关于点击【部门列表】的超链接
<a href="dept/list" target="context"><span class="glyphicon glyphicon-th-list"></span> 部门列表</a>
注意:先进入到servlet中,获取到列表数据,再放在在jsp中,最终静态化
其中上方的超链接请求的servlet,进入到1中的list方法,然后调用1中的jsp代码,最后响应给客户端,效果如上图
3.点击部门列表页面中操作列中的【修改】
要进行修改,必须分两大步骤执行
1)将指定部门did的数据先呈现出来
2)再对数据进行提交保存
将指定部门did的数据先呈现出来
每一个修改是一个超链接
该超链接进入到servlet获取到指定id的部门信息,然后调用jsp页面,最后将生产的静态页面响应给客户端
public void findById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {- ``
//获取传输来的didString didStr=req.getParameter("did");- ``
int did=Integer.parseInt(didStr);- ``
DeptDao deptDao = MyBatisUtil.getMapper(DeptDao.class);- ``
Dept dept=deptDao.findByID(did);- ``
req.setAttribute("dept", dept);- ``
req.getRequestDispatcher("/html/dept/update.jsp").forward(req, resp);}
jsp中的代码如下
<form action="dept/update" method="post"><input name="did" value="${dept.did }" type="hidden">部门名称<input name="dname" value="${dept.dname }"/><br/>是否启用<input type="radio" name="state" value="1" ${ dept.state==1?"checked":""} >启用<input type="radio" name="state" value="0" ${ dept.state==0?"checked":""}>禁用<input type="submit"></form>
对数据进行修改保存
当点击提交按钮时,进入到servlet,调用update方法
//提交3个参数过来String didStr=req.getParameter("did");String dname=req.getParameter("dname");String stateStr=req.getParameter("state");//创建的dept对象的属性进行赋值Dept dept =new Dept(Integer.parseInt(stateStr), dname);dept.setDid(Integer.parseInt(didStr));- ``
//进行修数保存DeptDao deptDao = MyBatisUtil.getMapper(DeptDao.class);deptDao.update(dept);- ``
MyBatisUtil.session.commit();MyBatisUtil.closeSession();- ``
- ``
//数据展示list(req,resp);
提交完成数据,有调用展示列表数据的list方法,将有列表数据的页面最后响应给客户
注意url使用规则
关于url的写法的总结
在jsp和html上进行编写时使用base 标签,base中href的值写法是:/项目名称/ ,使用的base页面上访问本项目资源时都是加了 /项目名称/
在servlet中写地址时,以 / 开头 ,此时的/代表就是:http://地址:端口/项目名称/
