人事管理系统项目(五)
配置好数据库后,现在开始来写servlet,建一个servlets包,下面写了所有我这个项目需要的servlet类,把BaseServlet作为一个核心类,这个类会根据请求不同将不同的请求转给不同的具体Servlet进行处理,然后再封装一些经常用到的操作,代码如下:
package com.jiazhong.hr.servlets;
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.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/***
* 核心Servlet,该Servlet负责对所有请求进行统一调配
* 根据请求不同将不同的请求转给不同的具体的Servlet进行处理
*/
public class BaseServlet extends HttpServlet {
//输出流对象,用于向页面输出内容
protected PrintWriter out;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
response.setContentType("json/application;charset=utf-8");
//response.setContentType("text/html;charset=utf-8");
//request.setCharacterEncoding("UTF-8");
out = response.getWriter();
//获得客户端传入的operate参数
String methodName = request.getParameter("operate");
//根据方法名和方法的参数获得方法对象(参数为HttpServletRequest,HttpServletResponse)
Method method = getClass().getDeclaredMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
//调用方法
method.invoke(this,request,response);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
DeptServlet:
package com.jiazhong.hr.servlets;
import com.alibaba.fastjson.JSONArray;
import com.jiazhong.hr.model.Dept;
import com.jiazhong.hr.service.DeptService;
import com.jiazhong.hr.service.impl.DeptServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @Author: 加中实训
* @Date:2020/8/23 17:22
* @Description:
*/
@WebServlet("/emp/dept.do")
public class DeptServlet extends BaseServlet{
private DeptService deptService = new DeptServiceImpl();
protected void queryDeptInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Dept> deptList = deptService.queryDept();
out.print(JSONArray.toJSON(deptList));
}
}
EmpServlet:
package com.jiazhong.hr.servlets;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jiazhong.hr.commons.Constant;
import com.jiazhong.hr.commons.CurAccount;
import com.jiazhong.hr.commons.PageParams;
import com.jiazhong.hr.commons.Result;
import com.jiazhong.hr.model.Emp;
import com.jiazhong.hr.model.Leave;
import com.jiazhong.hr.service.EmpService;
import com.jiazhong.hr.service.impl.EmpServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @Author: 加中实训
* @Date:2020/8/22 15:50
* @Description:
*/
@WebServlet("/emp/emp.do")
public class EmpServlet extends BaseServlet {
//创建EmpService对象
private EmpService empService = new EmpServiceImpl();
/**
* 获得所有员工的方法
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void getEmpInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获得客户端传入的分页参数
int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));//要查询的页码
int pageSize = Integer.parseInt(request.getParameter("pageSize"));//每页记录数
//将客户端获得到的分页参数设置到分页参数Bean对象(PageParams)中
PageParams pageParams = new PageParams();
pageParams.setPageNumber(pageNumber);
pageParams.setPageSize(pageSize);
Map<String,Object> empMap = empService.getEmpPaginInfo(pageParams);
out.print(JSONArray.toJSON(empMap));//将map集合转为JSON
// List<EmpView> empViewList = empService.getEmpInfo();
// out.print(JSONArray.toJSON(empViewList));
}
protected void addEmp(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//从客户端获得提交的数据
String emp_name = request.getParameter("emp_name");
int emp_sex = Integer.parseInt(request.getParameter("emp_sex"));
String emp_phone = request.getParameter("emp_phone");
Date emp_birthday = format.parse(request.getParameter("emp_birthday"));
Date emp_entry_date = format.parse(request.getParameter("emp_entry_date"));
int post_id = Integer.parseInt(request.getParameter("post_id"));
Emp emp = new Emp();
emp.setEmp_name(emp_name);
emp.setEmp_sex(emp_sex);
emp.setEmp_birthday(emp_birthday);
emp.setEmp_entry_time(emp_entry_date);
emp.setEmp_phone(emp_phone);
emp.setPost_id(post_id);
empService.addEmp(emp);
out.print(JSONObject.toJSON(Result.success("员工添加成功!")));
} catch (ParseException e) {
e.printStackTrace();
out.print(JSONObject.toJSON(Result.success("员工添加失败")));
}catch(Exception e){
e.printStackTrace();
out.print(JSONObject.toJSON(Result.success("员工添加失败")));
}
}
protected void updateEmp(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//从客户端获得提交的数据
int emp_id = Integer.parseInt(request.getParameter("emp_id"));
String emp_name = request.getParameter("emp_name");
System.out.println(emp_name);
int emp_sex = Integer.parseInt(request.getParameter("emp_sex"));
String emp_phone = request.getParameter("emp_phone");
Date emp_birthday = format.parse(request.getParameter("emp_birthday"));
Date emp_entry_date = format.parse(request.getParameter("emp_entry_date"));
int post_id = Integer.parseInt(request.getParameter("post_id"));
Emp emp = new Emp();
emp.setEmp_id(emp_id);
emp.setEmp_name(emp_name);
emp.setEmp_sex(emp_sex);
emp.setEmp_birthday(emp_birthday);
emp.setEmp_entry_time(emp_entry_date);
emp.setEmp_phone(emp_phone);
emp.setPost_id(post_id);
//调用empService中的修改员工信息方法
empService.updateEmp(emp);
out.print(JSONObject.toJSON(Result.success("员工修改成功!")));
} catch (ParseException e) {
e.printStackTrace();
}
}
/**
* 员工离职
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void leave(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int empId = Integer.parseInt(request.getParameter("emp_id"));
//调用empService中的离职方法
empService.leave(empId);
out.print(JSONObject.toJSON(Result.success("设置成功!")));
}
/**
* 添加离职信息的Servlet
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void addLeave(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获得客户端提交的emp_id,此方法用于处理单个离职或批量离职,
//如果是批量离职则传入的emp_id不止一个而是多个,emp_id的数据格式为"id1_id2_id3"
//我们要将"id1_id2_id3"格式的数据转换为一个存储id的数组
String ids = request.getParameter("emp_id");
int[] idArr;
//判断客户端传入的数据格式是否带有_,如果带有则表示批量离职
if(ids.contains("_")){
//使用下划线"_"分割字符串获得一个字符串数组
String[] idsArr = ids.split("_");
//存储id的数组,长度由批量离职的人员数量决定
idArr = new int[idsArr.length];
//将字符串数组 中的数据格式化为int类型并添加到idArr数组中
for(int i=0;i<idsArr.length;i++){
idArr[i] = Integer.parseInt(idsArr[i]);
}
}else{
int empId = Integer.parseInt(ids);
idArr = new int[1];
idArr[0] = empId;
}
String leave_reasons = request.getParameter("leave_reasons");
//将要离职人员的emp_id及离职原因封装到离职对象(Leave)中
//然后将离职对象Leave添加到List集合中
List<Leave> leaves = new ArrayList<>();
for(int emp_id : idArr){
Leave leave = new Leave();
leave.setEmp_id(emp_id);
leave.setLeave_reasons(leave_reasons);
leaves.add(leave);
}
empService.leave(leaves);
//调用empService中的离职方法
out.print(JSONObject.toJSON(Result.success("设置成功!")));
}
/**
* 获得当前登陆者的信息
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void getCurAccount(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从session获得当前登陆者的信息,并转换JSON输出
CurAccount curAccount = (CurAccount) request.getSession().getAttribute(Constant.SESSION_ATTR_CUR_ACCOUNT);
out.print(JSONObject.toJSON(curAccount));
}
/**
* 退出登录
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从session中将账户信息移除
request.getSession().removeAttribute(Constant.SESSION_ATTR_CUR_ACCOUNT);
out.print(JSONObject.toJSON(Result.success("退出系统")));
}
}
LoginServlet:
package com.jiazhong.hr.servlets;
import com.alibaba.fastjson.JSONObject;
import com.jiazhong.hr.commons.Constant;
import com.jiazhong.hr.commons.CurAccount;
import com.jiazhong.hr.commons.Result;
import com.jiazhong.hr.model.view.AccountView;
import com.jiazhong.hr.service.AccountService;
import com.jiazhong.hr.service.impl.AccountServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@WebServlet("/login/login.do")
public class LoginServlet extends BaseServlet{
//创建一个关于账户操作的业务类接口对象
private AccountService accountService=new AccountServiceImpl();
protected void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
response.setContentType("json/application;charset=utf-8");
String account_name=request.getParameter("account_name");
String account_password=request.getParameter("account_password");
AccountView accountView=new AccountView(account_name,account_password);
try {
CurAccount curAccount=accountService.login(accountView);
if(curAccount!=null){
//将当前登录者的账户信息存入到session中
request.getSession().setAttribute(Constant.SESSION_ATTR_CUR_ACCOUNT,curAccount);
/**************自动存储cookie信息开始****************/
//检测使用是否选择了自动登录功能
String autoLogin=request.getParameter("autoLogin");
if (autoLogin!=null){//此时表示用户选择了自动登录
//创建存储账户名的cookie对象和密码的cookie对象
Cookie cookie_account_name=new Cookie("account_name",account_name);
Cookie cookie_account_password=new Cookie("account_password",account_password);
//设置最大存活期
cookie_account_name.setMaxAge(7*24*60*60);
cookie_account_password.setMaxAge(7*24*60*60);
//将cookie添加到response对象中
/* response.addCookie(cookie_account_name);
response.addCookie(cookie_account_password);*/
//创建一个存储Cookie的List集合
List<Cookie> cookieList = new ArrayList<>();
//将Cookie对象添加到List集合中
Collections.addAll(cookieList,cookie_account_name,cookie_account_password);
//将Result对象回传到前端
response.getWriter().print(JSONObject.toJSON(Result.success("登录成功!",cookieList)));
return;
}
/**************自动存储cookie信息结束****************/
//将Result对象回传到前端
response.getWriter().print(JSONObject.toJSON(Result.success("登录成功")));
}
} catch (Exception e) {
response.getWriter().print(JSONObject.toJSON(Result.fail(e.getMessage())));
}
}
}
PostServlet:
package com.jiazhong.hr.servlets;
import com.alibaba.fastjson.JSONArray;
import com.jiazhong.hr.model.Post;
import com.jiazhong.hr.service.PostService;
import com.jiazhong.hr.service.impl.PostServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @Author: 加中实训
* @Date:2020/8/23 17:45
* @Description:
*/
@WebServlet("/emp/post.do")
public class PostServlet extends BaseServlet {
private PostService postService = new PostServiceImpl();
protected void queryPostByDept(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int dept_id = Integer.parseInt(request.getParameter("dept_id"));
List<Post> postList = postService.queryPostByDept(dept_id);
out.print(JSONArray.toJSON(postList));
}
}
接下来建一个service包,在这个包下有一个impl包,这个包里是面实现了我所有的服务接口的实现类;
AccountService:
package com.jiazhong.hr.service;
import com.jiazhong.hr.commons.CurAccount;
import com.jiazhong.hr.model.view.AccountView;
/**
* @Author: 加中实训
* @Date:2020/8/21 14:23
* @Description: 账户业务接口
*/
public interface AccountService {
/**
* 登录方法
* @return 当前登录者的实体对象
*/
public CurAccount login(AccountView accountView)throws Exception;
}
DeptService:
package com.jiazhong.hr.service;
import com.jiazhong.hr.model.Dept;
import java.util.List;
/**
* @Author: 加中实训
* @Date:2020/8/23 17:24
* @Description:
*/
public interface DeptService {
public List<Dept> queryDept();
}
EmpService:
package com.jiazhong.hr.service;
import com.jiazhong.hr.commons.PageParams;
import com.jiazhong.hr.model.Emp;
import com.jiazhong.hr.model.Leave;
import com.jiazhong.hr.model.view.EmpView;
import java.util.List;
import java.util.Map;
/**
* @Author: 加中实训
* @Date:2020/8/22 15:19
* @Description:
*/
public interface EmpService {
/**
* 获得员工信息
* @return
*/
public List<EmpView> getEmpInfo();
void addEmp(Emp emp);
/**
* 员工离职方法
* @param emp_id
*/
public void leave(int emp_id);
/**
* 员工离职
*/
void leave(List<Leave> leave);
/**
* 分页查询员工信息
* @param pageParams
* @return
*/
Map<String, Object> getEmpPaginInfo(PageParams pageParams);
void updateEmp(Emp emp);
}
PostService:
package com.jiazhong.hr.service;
import com.jiazhong.hr.model.Post;
import java.util.List;
/**
* @Author: 加中实训
* @Date:2020/8/23 17:46
* @Description:
*/
public interface PostService {
public List<Post> queryPostByDept(int dept_id);
}
AccountServiceImpl:
package com.jiazhong.hr.service.impl;
import com.jiazhong.hr.commons.CurAccount;
import com.jiazhong.hr.dao.AccountDao;
import com.jiazhong.hr.dao.impl.AccountDaoImpl;
import com.jiazhong.hr.exception.BusinessException;
import com.jiazhong.hr.exception.SysException;
import com.jiazhong.hr.model.Account;
import com.jiazhong.hr.model.view.AccountView;
import com.jiazhong.hr.service.AccountService;
public class AccountServiceImpl implements AccountService {
private AccountDao accountDao=new AccountDaoImpl();
@Override
public CurAccount login(AccountView accountView) throws Exception{
Account account= null;
try {
account = accountDao.queryAccountByAccountNamePassword(accountView);
} catch (Exception e) {
e.printStackTrace();
throw new SysException("系统维护中,请稍后访问!");
}
if (account == null){
throw new BusinessException("账户名或密码错误");
}
if (account.getAccount_status()==1){
throw new BusinessException("该账户已被冻结,请与公司联系!");
}
return new CurAccount(account.getAccount_id(),account.getAccount_name(),account.getEmp_id());
}
}
DeptServiceImpl:
package com.jiazhong.hr.service.impl;
import com.jiazhong.hr.dao.DeptDao;
import com.jiazhong.hr.dao.impl.DeptDaoImpl;
import com.jiazhong.hr.model.Dept;
import com.jiazhong.hr.service.DeptService;
import java.util.List;
/**
* @Author: 加中实训
* @Date:2020/8/23 17:23
* @Description:
*/
public class DeptServiceImpl implements DeptService {
private DeptDao deptDao = new DeptDaoImpl();
@Override
public List<Dept> queryDept() {
return deptDao.queryDept();
}
}
EmpServiceImpl:
package com.jiazhong.hr.service.impl;
import com.jiazhong.hr.commons.PageParams;
import com.jiazhong.hr.dao.EmpDao;
import com.jiazhong.hr.dao.impl.EmpDaoImpl;
import com.jiazhong.hr.model.Emp;
import com.jiazhong.hr.model.Leave;
import com.jiazhong.hr.model.view.EmpView;
import com.jiazhong.hr.service.EmpService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author: 加中实训
* @Date:2020/8/22 15:20
* @Description:
*/
public class EmpServiceImpl implements EmpService {
private EmpDao empDao = new EmpDaoImpl();
@Override
public List<EmpView> getEmpInfo() {
return empDao.queryEmp();
}
@Override
public void addEmp(Emp emp) {
empDao.addEmp(emp);
}
@Override
public void leave(int emp_id) {
empDao.updateStatus(emp_id,1);
}
@Override
public void leave(List<Leave> leave) {
empDao.leave(leave);
}
@Override
public Map<String, Object> getEmpPaginInfo(PageParams pageParams) {
Map<String,Object> empMap = new HashMap<>();
//获得总记录数
int total = empDao.getEmpSize();
//获得员工数据
List<EmpView> empViewList = empDao.queryEmpForPagin(pageParams);
//将获得的数据封装到Map集合中
empMap.put("total",total);
empMap.put("rows",empViewList);
return empMap;
}
@Override
public void updateEmp(Emp emp) {
empDao.updateEmp(emp);
}
}
PostServiceImpl:
package com.jiazhong.hr.service.impl;
import com.jiazhong.hr.dao.PostDao;
import com.jiazhong.hr.dao.impl.PostDaoImpl;
import com.jiazhong.hr.model.Post;
import com.jiazhong.hr.service.PostService;
import java.util.List;
/**
* @Author: 加中实训
* @Date:2020/8/23 17:47
* @Description:
*/
public class PostServiceImpl implements PostService {
private PostDao postDao = new PostDaoImpl();
@Override
public List<Post> queryPostByDept(int dept_id) {
return postDao.queryPostByDeptId(dept_id);
}
}