- 选题背景
- 为了能够更加迅速地向求职者传递企业的招聘信息,以便于求职者对企业有更深入的了解。该求职网应该能够及时提供最新的资讯。此外,为方便求职者和企业,求职系统应提供良好的维护页面,为维护求职系统更好的运营,提供了用户友好的后台管理界面。
- 系统需求分析
- 求职系统主要是为了实现求职信息实时显示的系统。一个典型的求职管理系统一般都会提供岗位分类显示、企业信息显示等功能。同时也要为求职系统后台管理的管理员提供对应的信息维护及管理的功能,包括添加新的信息、编辑修改信息、删除信息等功能。
- 根据求职系统的基本要求,本系统需要完成如下的主要任务:
- 企业信息显示:在进入求职网主页时,应该能够根据数据库中存放的显示企业的信息。可以按分类显示企业招聘的岗位。求职者可以关注感兴趣的企业。
- 求职者显示:当企业登录主页时,可以显示所有求职者的信息,还应可以按求职者专业分类显示求职者,并可以对感兴趣的求职者关注。
- 后台管理功能:求职系统的管理员可以根据企业或求职者的需要随时向数据库中添加最新的信息及相关内容。还可以删除不再需要的信息,以及对原有信息做必要的修改。
- 系统总体设计
- 系统总体功能结构
- 图 3-1 系统功能结构图
- 模块功能描述
求职者模块
求职者者可以看到所有企业的信息,点击左侧栏的类别,可以在页面中按类 别显示企业信息,点击感兴趣,可将企业添加到用户个人的关注列表中,求 职者可以修改个人信息。
- 图 3-2 求职者前台活动图
- 企业模块
- 企业可以看到所有求职者的信息,点击左侧栏的类别,可以在页面中按专业 显示求职者信息,点击感兴趣,可将求职者添加到企业的关注列表中,企业 可以修改企业信息。
- 图 3-3-企业前台活动图
- 管理员模块
- 管理员可以看到所有求职者和企业的信息,可以添加企业/求职者,修改企业 /求职者信息,删除企业/求职者。
图 3-4-后台管理员活动图
- 系统数据库设计
管理员表(admin)用来保存后台管理员的基本信息。表 1 所示列出了该表中 包含的字段的描述信息。
表 3-1 管理员信息表
字段名 | 类型 | 长度 | 是否允许为空 | 是否为主键 | 说明 |
---|---|---|---|---|---|
adminId | int | 11 | false | true | 账号 |
adminName | varchar | 255 | false | false | 名字 |
adminPassword | int | 11 | false | false | 密码 |
求职者表(employee)用来保存求职者的基本信息。表 2 所示列出了该表中 包含的字段的描述信息。
表 3-2 求职者信息表
字段名 | 类型 | 长度 | 是否允许为空 | 是否为主键 | 说明 |
---|---|---|---|---|---|
employeeId | int | 11 | false | true | 账号 |
employeeName | varchar | 255 | false | false | 名字 |
employeeGender | varchar | 255 | false | false | 密码 |
employeeAge | int | 11 | false | false | 年龄 |
employeeMajority | varchar | 255 | false | false | 专业 |
employeeGPA | int | 11 | false | false | 绩点 |
employeeInfo | varchar | 255 | false | false | 简介 |
employeePicture | mediumblob | 0 | false | false | 照片 |
employeePassword | varchar | 255 | false | false | 密码 |
求职者-企业表(employee-employer)用来保存求职者关注的企业。表 2 所示 列出了该表中包含的字段的描述信息。
表 3-3 求职者-企业表
字段名 | 类型 | 长度 | 是否允许为空 | 是否为主键 | 说明 |
---|---|---|---|---|---|
employeeId | int | 11 | false | true | 求职者 |
employer | int | 11 | false | false | 企业 |
企业-求职者表(employer-employee)用来保存企业关注的求职者。表 4 所示 列出了该表中包含的字段的描述信息。
表 3-4 企业-求职者表
字段名 | 类型 | 长度 | 是否允许为空 | 是否为主键 | 说明 |
---|---|---|---|---|---|
employerId | int | 11 | false | true | 求职者 |
employeeId | int | 11 | false | false | 企业 |
企业信息表(employer)用来保存求职者关注的企业。表 5 所示 列出了该表 中包含的字段的描述信息。
表 3-5 企业信息表
字段名 | 类型 | 长度 | 是否允许为空 | 是否为主键 | 说明 |
---|---|---|---|---|---|
employerId | int | 11 | false | true | 企业 id |
employerName | int | 11 | false | false | 企业名字 |
employerClass | varchar | 255 | false | false | 企业类别 |
employerInfo | varchar | 255 | false | false | 企业简介 |
employerPicture | mediumblob | 0 | false | false | 企业 logo |
employerPassword | varchar | 255 | false | false | 密码 |
- 系统实现及测试
- 系统环境
- 技术栈:Java + SSM 框架 + Druid 连接池 + MySQL 数据库 + PageHelper 分页工具 + HTML + CSS + JavaScript + Bootstrap 框架
- 其余说明:系统适用于火狐浏览器,其余浏览器可能会出现显示异常问题。
- 知识储备
- SSM 框架说明
SSM 框架指 Spring + SpringMVC + MyBatis,使用之前,需要先进行框架整合,整合详情请见博客《》。
- 异常映射机制
异常映射的目的是通过异常映射机制,对异常进行统一处理,当系统抛出异常时,会自动转到指定的页面。有 XML 配置和注解两种实现方法,先配置统一异常处理:
图 4-1 XML 文件配置
再进行指定异常处理:
图 4-2 注解配置
- 前台实现(以求职者为例)
- 主页显示
在显示主页之前,应当查询数据库中企业分类与所有企业。但此时还有其他需要考虑的问题,如前端显示页面需要分页,以及用户可以通过企业名或者企业类别查询企业,因此需要将这些因素一并考虑进去。因此在前端传递参数的时候,应当传递页码 PageNum,页面大小 PageSize,企业名 employerName,企业类别 employerClass 到后端,在后端接收到后,PageNum 和 PageSize 进行用来分页操作,employerName 和 employerClass 用来联合查询数据库,在这里用到了 MySQL 的 concat 函数做字符串拼接,结合“%”可以实现模糊查询。查询完之后将结果封装到 ModelAndView 中,并设置视图即可。
图 4-3 多属性联合查询
图 4-4 主页显示流程
但存在一个问题,用户第一次访问的时候,不需要经过前端页面,此时的四个参数应该要有一个默认值,因此@RequestParam 注解应当有一个 defaultValue 值。
图 4-5 获取前端参数
- 用户登录
用户登录的请求应该由用户在登录页面发起,因此需要先进入到请求页面。但是由于系统的所有的 JSP 文件都放在了 WEB-INF 下,因此不能直接访问登录页面,需要经过 SpringMVC 配置,才可以通过路径访问到对应页面。
图 4-6 直接配置访问路径
访问到登录页面后,登录页面通过 form 表单将用户账号密码传递到后端的 Controller,Controller 接收到参数后,对账号输入格式、账号密码正确性进行判断,如果不符合账号格式要求或账号密码错误,将异常信息携带在异常中,并将异常抛出,如此便可以跳转到对应页面,显示异常信息。如果输入正确,则将账号信息存入 session 域中保存,便于后续处理,同时页面跳转到主页。
图 4-7 登录正确性检测
- 用户注册
用户注册是通过表单进行的,在用户的属性中,有一个特殊的属性叫用户头像。其余属性都是可以正常处理,但图片例外,在此只说明图片的处理流程。
图 4-8 Employee 实体类
对于图片的处理,我们借助了 SpringMVC 的文件处理机制(需要导入 commons-fileupload 和 commons-io 依赖)。具体步骤如下:
① 配置 SpringMVC
图 4-9 配置文件上传类
② 前端提交文件
图 4-10 前端提交文件
③ 后端接收文件,并对文件类型做判别,防止非法文件上传。
图 4-11 后端处理流程
④ 将文件格式转化为 byte 数组,存入数据库
图 4-12 转化文件格式
其中还涉及到一个问题,用户的 ID 是由系统返回的,即用户提交完信息之后,后端会查询数据库中,最大的 ID 值是多少,然后在这个值上加一,形成新的 ID,返回给用户。但是这样会存在一个问题,当两个用户同时注册的时候,可能会查询到相同的 ID,此时会出现错误。因此我们在添加用户的时候,适用 Java 的 ReentrantLock 对代码块加锁,解决该并发问题。
图 4-13 锁机制
- 关注按钮
前端点击按钮后,请求到对应的 RequestMapping,先判断 session 域中有没有用户信息,然后对数据库进行操作即可。
图 4-14 关注按钮的后端实现
- 后台实现
- 与前台界面一样,后台界面也是严格按照 SSM 框架搭建而成的。设计比较新颖的一点在于,后台界面是无法通过页面跳转访问的,只能够通过 url 地址访问登录界面,这就进一步提高了后台的安全性。后台主要实现的功能为学生用户管理和企业用户管理,其中的管理又细分为增加信息,删除信息,修改信息,查询信息这四类。
图 4-15 通过地址进入后台登录界面
图 4-16 后台主界面
- 显示全部企业信息
在前台,企业信息的显示包括照片等信息的显示,这是为了方便求职者对于企业有更深的了解。在后台,我们选择以更加简明扼要的表格的形式来显示企业的信息。表格的每一行包括了一个企业的所有基本信息,如 ID,名称,类别等。表格的最后两列是修改和删除操作,总体布局比较合理。实现的方法是首先通过调用 AdminHandler 中的 employerMange()方法,在该方法内部继续调用 employerService 中的 searchEmployerByName()函数,以默认参数实现全部企业用户信息的查询。最后通过 PageInfo 实现分页(分条目)传递信息,传递的信息返回 admin-employerManage.jsp 实现信息的显示。
图 4-17 企业信息的显示
- 增加企业用户信息
选择要执行增加企业用户信息后,在后台界面会以一个表单的形式填写相关信息。填写完毕后点击提交按钮,request 对象带着表单信息跳转到 AdminHandler 中的 public ModelAndView addEmployer()函数。在这个函数中,首先获取 request 对象中的所有信息,为执行数据库插入语句做准备。紧接着进行判断,判断该条注册信息是否已经存在。满足判断条件后进行并发性处理,在实现中,我们通过 searchCurrentId()函数以递增的顺序自动为注册用户分配用户 id 的,如果有两个用户同时提交注册信息,那么他们的 id 就会出现错误。为了解决这个问题,我们引入了并发性处理。一旦一个用户的注册信息满足判断条件后,加锁,阻塞其他进程的申请,调用 employerService 中的 addEmployer()方法。在该方法中继续调用 EmployerMapper 中的 insertEmployer()方法操作数据库,完成注册。
直到该用户的注册进程执行完成后,才允许其他进程执行,保证了系统的准确性,鲁棒性。
图 4-18 企业用户添加表
图 4-19 添加成功显示
- 删除企业用户信息
在显示的表格中最后一列是删除操作,单击 button 完成本行信息的删除,也就是删除指定企业的全部信息。实现是通过调用 AdminHandler 中的 deleteEmployer()函数,请求的时候会把该行的 employerId 作为参数一并发送给 deleteEmployer()函数。在该函数中,首先获取传递来的 employerId,再以 employerId 为参数调用 employerService 中的 removeEmployer()函数。该函数再次调用 employerMapper 中的 deleteEmployerById()函数,最终操作数据库实现删除的是 deleteEmployerById()函数。
图 4-20 删除按钮的位置
图 4-21 完成删除
- 修改企业用户信息
在显示的表格中倒数第二列是修改操作,点击后会跳转到一个新的页面,页面以一个表单的形式显示选定企业的全部信息,所有数据都是可以修改的,管理员可以根据需要选择一部分信息进行修改。具体实现首先调用 AdminHandler 中的 showChangeEmployer()函数,该函数获取传递来的 employerId,通过调用 employerService 中的 searchEmployerById()函数查找到该 Id 对应的全部信息,以一个 Employer 对象存储。接着带着 Employer 对象跳转到 admin-changeEmployer.jsp,该页面设定好一个表单,表单的内容通过读取传递来的 Employer 对象的值完成初始化。管理员通过修改表单的值实现修改企业用户的信息,完成修改后调用 AdminHandler 中的 changeEmployer()函数。该函数首先判断表单的数据是否合法,通过判断后调用 employerService 中的 changeEmployer(),在函数内继续调用 employerMapper 中的 updateEmployer()函数实现数据库的更新。
图 4-22 修改页面
- 查找企业用户信息
在企业信息显示的页面最上方添加了一个搜索栏,实现按名字查找企业,查找的结果会在下方显示。具体实现方法与显示全部信息相似,区别是传递了名字作为参数。首先调用 AdminHandler 中的 employerMange()方法,在该方法内部继续调用 employerService 中的 searchEmployerByName()函数,以获取的 employerName 作为参数。最后通过 PageInfo 实现分页(分条目)传递信息,传递的信息返回 admin-employerManage.jsp 实现信息的显示。值得注意的是,我们在 SQL 语句中实现了模糊查询,方便管理员较为简便的查找到想要寻找的企业对象。
图 4-23 查询结果
- 学生用户管理
学生用户管理与企业用户管理基本一致,实现方法与页面布局等都极为相似,在此就不在重复,以截图的形式展示一下后台管理学生用户的基本功能。
图 4-24 学生信息显示
图 4-25 学生用户添加表
图 4-26 学生信息修改表
- 图 4-27 模糊查找
- 功能测试
- 用户登录,用户输入账号密码登录。
- 图 4-28 用户登录
- 主界面,显示企业信息。
- 图 4-29 企业信息显示
- 点击右侧类别,可以按分类显示。
- 图 4-30 分类显示
- 在关注列表查看关注的企业。
- 图 4-31 关注列表
- 修改个人信息
- 图 4-32 修改个人信息
- 搜索企业
- 图 4-33 搜索企业
- 企业登录
- 图 4-34 企业登录
- 查看求职者
- 图 4-35 查看求职者
- 按分类查看
- 图 4-36 分类查看求职者
- 总结及体会
- 这学期的 Web 课程最后以大作业的形式画上了圆满的句号,而最后的这个大作业更是凝聚了我们这一学期所学的全部知识。老师在课程讲授的过程中由浅入深,为我们构建了一个比较完整的 Java Web 开发的框架体系。本着学习的精神,我们这次的大作业采用的就是老师最后讲解的 SSM 框架体系。
- 相比于 MVC 开发模式,SSM 框架体系最大的优点在于简化了开发,降低了 SQL 语句和代码的耦合程度。而经过这一次大作业的学习尝试,我们对于这些优点深有体会。纵观整个程序的开发过程,前端的页面开发一直是一个比较困难的点。因为我们对于前端开发方面的许多新的,方便的技术了解不多,导致前端的开发进度一度十分缓慢,许多 Bug 的调试都是硬拿时间磨出来的。从这点就可以看出,前端的开发是一门十分看重经验的工作。
- 在后端开发方面,有几点我们认为比较精华的部分。一是异常映射机制,异常映射的目的是通过异常映射机制,对异常进行统一处理,当系统抛出异常时,会自动转到指定的页面,并在指定的页面上显示提示信息,杜绝了用户访问网站时出现报错现象,极大程度增强了用户友好性。另一个精华点在于图片信息的上传,图片的上传借助了 SpringMVC 的文件处理机制(需要导入 commons-fileupload 和 commons-io 依赖)。前端提交图片文件后,后端接收文件并对文件的类型做判别,防止非法文件的上传破坏服务器。最后将文件格式转化为 byte 数组,存储在数据库中。
- 总而言之,经过这次大作业,我们不但尝试了一种新的框架模式,而且基本完整地复习了这学期所学的全部知识,实现了所有知识的融会贯通,收获极大。最后也感谢老师这一学期的辛勤付出,老师您辛苦了!
附录:源码
源码地址:
源码过多,此处只贴出管理员的 Controller 代码:
c++
@Controller
@RequestMapping("/admin/service")
public class AdminHandler {
@Autowired
@Qualifier("adminService")
private AdminService adminService;
@Autowired
@Qualifier("employeeService")
private EmployeeService employeeService;
@Autowired
@Qualifier("employerService")
private EmployerService employerService;
private final Lock lock = new ReentrantLock();
@RequestMapping("/login.html")
public String loginAdmin(@RequestParam(value = "username", defaultValue = "") String username,
@RequestParam(value = "password", defaultValue = "") String password,
HttpServletRequest request, HttpServletResponse response) throws IOException {
if (!JobUtils.isInteger(username)) {
throw new AdminLoginFailedException(JobConstant.LOGIN_INPUT_ERROR_MESSAGE);
}
boolean adminLogin = adminService.adminLogin(Integer.parseInt(username), password);
if (!adminLogin) {
throw new AdminLoginFailedException(JobConstant.LOGIN_FAILED_MESSAGE);
}
HttpSession session = request.getSession();
session.setAttribute("adminId", Integer.parseInt(username));
return "admin-main";
}
@RequestMapping("/employeeManage.html")
public ModelAndView employeeManage(@RequestParam(value = "employeeName", defaultValue = "") String employeeName,
@RequestParam(value = "pageNum", defaultValue = "1") String pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") String pageSize,
ModelAndView modelAndView) {
PageInfo<Employee> pageInfo =
employeeService.searchEmployeeByName(Integer.parseInt(pageNum), Integer.parseInt(pageSize),employeeName);
modelAndView.addObject("employeeName", employeeName);
modelAndView.addObject("pageInfo", pageInfo);
modelAndView.setViewName("admin-employeeManage");
return modelAndView;
}
@RequestMapping("/employerManage.html")
public ModelAndView employerManage(@RequestParam(value = "employerName", defaultValue = "") String employerName,
@RequestParam(value = "pageNum", defaultValue = "1") String pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") String pageSize,ModelAndView modelAndView) {
PageInfo<Employer> pageInfo =
employerService.searchEmployerByName(Integer.parseInt(pageNum), Integer.parseInt(pageSize),employerName);
modelAndView.addObject("employerName", employerName);
modelAndView.addObject("pageInfo", pageInfo);
modelAndView.setViewName("admin-employerManage");
return modelAndView;
}
@RequestMapping("/addEmployee.html")
public ModelAndView addEmployee(ModelAndView modelAndView,
@RequestParam(value = "username") String username,
@RequestParam(value = "gender", defaultValue = "男") String gender,
@RequestParam(value = "age", defaultValue = "18") String age,
@RequestParam(value = "majority", defaultValue = "计算机科学与技术") String majority,
@RequestParam(value = "GPA", defaultValue = "3") String GPA,
@RequestParam(value = "picture", defaultValue = "") MultipartFile picture,
@RequestParam(value = "password") String password,
@RequestParam(value = "password2") String password2,
@RequestParam(value = "info", defaultValue = "") String info) throws IOException {
String name = picture.getOriginalFilename();
boolean isPicture = false;
for (String pictureSuffix : JobConstant.PICTURE_SUFFIX) {
if (name != null && name.endsWith(pictureSuffix)) {
isPicture = true;
break;
}
}
if (!isPicture) {
throw new AdminAddEmployeeFailedException(JobConstant.REGISTER_PICTURE_ERROR_MESSAGE);
}
if (!JobUtils.isInteger(age) || !JobUtils.isGPA(GPA)) {
throw new AdminAddEmployeeFailedException(JobConstant.LOGIN_INPUT_ERROR_MESSAGE);
}
if ("".equals(username) || "".equals(password) || "".equals(password2)) {
throw new AdminAddEmployeeFailedException(JobConstant.REGISTER_MESSAGE_LOSS_MESSAGE);
}
if (!password.equals(password2)) {
throw new AdminAddEmployeeFailedException(JobConstant.REGISTER_PASSWORD_DIFFERENT_MESSAGE);
}
String pictureToString = PictureUtils.pictureToString(picture);
Employee employee = new Employee();
employee.setEmployeeName(username);
employee.setEmployeeGender(gender);
employee.setEmployeeAge(Integer.parseInt(age));
employee.setEmployeeMajority(majority);
employee.setEmployeeGPA(Double.parseDouble(GPA));
employee.setEmployeePicture(pictureToString);
employee.setEmployeePassword(password);
employee.setEmployeeInfo(info);
Integer id = null;
boolean success;
lock.lock();
try {
id = employeeService.searchCurrentId();
Integer employeeId = id + 1;
employee.setEmployeeId(employeeId);
success = employeeService.addEmployee(employee);
}
finally {
lock.unlock();
}
if (!success) {
throw new AdminAddEmployeeFailedException(JobConstant.REGISTER_FAILED_MESSAGE);
} else {
modelAndView.addObject(JobConstant.ATTR_EXCEPTION_NAME, new EmployeeRegisterFailedException(JobConstant.REGISTER_SUCCEED_MESSAGE));
}
modelAndView.addObject("id", employee.getEmployeeId());
modelAndView.setViewName("admin-addEmployee");
return modelAndView;
}
@RequestMapping("/addEmployer.html")
public ModelAndView addEmployer(ModelAndView modelAndView,
@RequestParam(value = "username") String username,
@RequestParam(value = "employerClass", defaultValue = "C++开发") String employerClass,
@RequestParam(value = "picture") MultipartFile picture,
@RequestParam(value = "password") String password,
@RequestParam(value = "password2") String password2,
@RequestParam(value = "info", defaultValue = "") String info) throws IOException {
if ("C 开发".equals(employerClass)) {
employerClass = "C++开发";
}
String name = picture.getOriginalFilename();
boolean isPicture = false;
for (String pictureSuffix : JobConstant.PICTURE_SUFFIX) {
if (name != null && name.endsWith(pictureSuffix)) {
isPicture = true;
break;
}
}
if (!isPicture) {
throw new AdminAddEmployerFailedException(JobConstant.REGISTER_PICTURE_ERROR_MESSAGE);
}
if ("".equals(username) || "".equals(password) || "".equals(password2)) {
throw new AdminAddEmployerFailedException(JobConstant.REGISTER_MESSAGE_LOSS_MESSAGE);
}
if (!password.equals(password2)) {
throw new AdminAddEmployerFailedException(JobConstant.REGISTER_PASSWORD_DIFFERENT_MESSAGE);
}
Employer employer = new Employer();
employer.setEmployerName(username);
employer.setEmployerClass(employerClass);
employer.setEmployerPicture(PictureUtils.pictureToString(picture));
employer.setEmployerPassword(password);
employer.setEmployerInfo(info);
Integer id = null;
boolean success;
lock.lock();
try {
id = employerService.searchCurrentId();
Integer employerId = id + 1;
employer.setEmployerId(employerId);
success = employerService.addEmployer(employer);
}
finally {
lock.unlock();
}
if (!success) {
throw new AdminAddEmployerFailedException(JobConstant.REGISTER_FAILED_MESSAGE);
} else {
modelAndView.addObject(JobConstant.ATTR_EXCEPTION_NAME, new EmployerRegisterFailedException(JobConstant.REGISTER_SUCCEED_MESSAGE));
}
modelAndView.addObject("id", employer.getEmployerId());
modelAndView.setViewName("register-success");
return modelAndView;
}
@RequestMapping("/showChangeEmployee.html")
public ModelAndView showChangeEmployee(ModelAndView modelAndView,
@RequestParam("employeeId") String employeeId) {
Employee employee = employeeService.searchEmployeeById(Integer.parseInt(employeeId));
modelAndView.addObject("employee", employee);
modelAndView.setViewName("admin-changeEmployee");
return modelAndView;
}
@RequestMapping("/showChangeEmployer.html")
public ModelAndView showChangeEmployer(ModelAndView modelAndView,
@RequestParam("employerId") String employerId) {
Employer employer = employerService.searchEmployerById(Integer.parseInt(employerId));
modelAndView.addObject("employer", employer);
modelAndView.setViewName("admin-changeEmployer");
return modelAndView;
}
@RequestMapping("/changeEmployee.html")
public void employeeChangeInfo(HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "employeeId") String employeeId,
@RequestParam(value = "username") String username,
@RequestParam(value = "gender", defaultValue = "男") String gender,
@RequestParam(value = "age", defaultValue = "18") String age,
@RequestParam(value = "majority", defaultValue = "计算机科学与技术") String majority,
@RequestParam(value = "GPA", defaultValue = "3") String GPA,
@RequestParam(value = "picture") MultipartFile picture,
@RequestParam(value = "password") String password,
@RequestParam(value = "password2") String password2,
@RequestParam(value = "info", defaultValue = "") String info) throws IOException {
String name = picture.getOriginalFilename();
request.setAttribute("employeeId", employeeId);
if (!"".equals(name)) {
boolean isPicture = false;
for (String pictureSuffix : JobConstant.PICTURE_SUFFIX) {
if (name != null && name.endsWith(pictureSuffix)) {
isPicture = true;
break;
}
}
if (!isPicture) {
throw new AdminChangeEmployeeFailedException(JobConstant.REGISTER_PICTURE_ERROR_MESSAGE);
}
}
if (!JobUtils.isInteger(age) || !JobUtils.isGPA(GPA)) {
throw new AdminChangeEmployeeFailedException(JobConstant.LOGIN_INPUT_ERROR_MESSAGE);
}
if ("".equals(username) || "".equals(password) || "".equals(password2)) {
throw new AdminChangeEmployeeFailedException(JobConstant.REGISTER_MESSAGE_LOSS_MESSAGE);
}
if (!password.equals(password2)) {
throw new AdminChangeEmployeeFailedException(JobConstant.REGISTER_PASSWORD_DIFFERENT_MESSAGE);
}
Employee employee = employeeService.searchEmployeeById(Integer.parseInt(employeeId));
employee.setEmployeeName(username);
employee.setEmployeeGender(gender);
employee.setEmployeeAge(Integer.parseInt(age));
employee.setEmployeeMajority(majority);
employee.setEmployeeGPA(Double.parseDouble(GPA));
employee.setEmployeePassword(password);
if (!"".equals(name)) {
employee.setEmployeePicture(PictureUtils.pictureToString(picture));
}
employee.setEmployeeInfo(info);
boolean success = employeeService.changeEmployee(employee);
if (!success) {
throw new AdminChangeEmployeeFailedException(JobConstant.CHANGE_FAILED_MESSAGE);
}
response.sendRedirect(request.getContextPath() + "/admin/service/showChangeEmployee.html?employeeId=" + employeeId);
}
@RequestMapping("/changeEmployer.html")
public void changeEmployer(HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "employerId") String employerId,
@RequestParam(value = "username") String username,
@RequestParam(value = "employerClass", defaultValue = "C++开发") String employerClass,
@RequestParam(value = "picture") MultipartFile picture,
@RequestParam(value = "password") String password,
@RequestParam(value = "password2") String password2,
@RequestParam(value = "info", defaultValue = "") String info) throws IOException {
if ("C 开发".equals(employerClass)) {
employerClass = "C++开发";
}
request.setAttribute("employerId", employerId);
String name = picture.getOriginalFilename();
if (!"".equals(name)) {
boolean isPicture = false;
for (String pictureSuffix : JobConstant.PICTURE_SUFFIX) {
if (name != null && name.endsWith(pictureSuffix)) {
isPicture = true;
break;
}
}
if (!isPicture) {
throw new AdminChangeEmployerFailedException(JobConstant.REGISTER_PICTURE_ERROR_MESSAGE);
}
}
if ("".equals(username) || "".equals(password) || "".equals(password2)) {
throw new AdminChangeEmployerFailedException(JobConstant.REGISTER_MESSAGE_LOSS_MESSAGE);
}
if (!password.equals(password2)) {
throw new AdminChangeEmployerFailedException(JobConstant.REGISTER_PASSWORD_DIFFERENT_MESSAGE);
}
Employer employer = employerService.searchEmployerById(Integer.parseInt(employerId));
employer.setEmployerName(username);
employer.setEmployerClass(employerClass);
if (!"".equals(name)) {
employer.setEmployerPicture(PictureUtils.pictureToString(picture));
}
employer.setEmployerPassword(password);
employer.setEmployerInfo(info);
boolean success = employerService.changeEmployer(employer);
if (!success) {
throw new AdminChangeEmployerFailedException(JobConstant.CHANGE_FAILED_MESSAGE);
}
response.sendRedirect(request.getContextPath() + "/admin/service/showChangeEmployer.html?employerId=" + employerId);
}
@RequestMapping("/deleteEmployee.html")
public void deleteEmployee(@RequestParam("employeeId") String employeeId,
HttpServletRequest request, HttpServletResponse response) throws IOException {
boolean success = employeeService.removeEmployee(Integer.parseInt(employeeId));
response.sendRedirect(request.getContextPath() + "/admin/service/employeeManage.html");
}
@RequestMapping("/deleteEmployer.html")
public void deleteEmployer(@RequestParam("employerId") String employerId,
HttpServletRequest request, HttpServletResponse response) throws IOException {
boolean success = employerService.removeEmployer(Integer.parseInt(employerId));
response.sendRedirect(request.getContextPath() + "/admin/service/employerManage.html");
}
}
参考文献
- 基于SSH的兼职招聘系统的分析与设计(江西财经大学·陶然)
- 网上招聘信息系统的设计与实现(电子科技大学·文敏)
- 基于J2EE与手机短信平台的高校就业服务系统(山东大学·刘斌)
- 大学生就业管理系统设计与实现(电子科技大学·李德培)
- 基于Web高校就业管理系统的设计与开发(吉林大学·唐焕春)
- 人力资源管理系统的设计与实现(电子科技大学·张恩宽)
- 《JSP动态网页设计》精品课程网站设计与实现(电子科技大学·兰伟)
- 基于JSP的学生就业信息管理系统设计与实现(吉林大学·马骁)
- 《JSP动态网页设计》精品课程网站设计与实现(电子科技大学·兰伟)
- 基于SSH2+AJAX架构的在线招聘求职系统设计与实现(吉林大学·李琦)
- 基于Spring的学生就业求职管理系统的设计与实现(吉林大学·肖慧敏)
- 基于.net的中职院校学生就业系统的设计与实现(天津职业技术师范大学·李立)
- 基于WEB的人才招聘系统的设计与实现(吉林大学·王璐瑶)
- 基于JSP的学生就业信息管理系统设计与实现(吉林大学·马骁)
- 启阳集团人力资源管理系统的设计与实现(电子科技大学·黄慧)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码客栈网 ,原文地址:https://bishedaima.com/yuanma/35933.html