package com.web.recruit.controller.user;
import com.web.recruit.controller.BaseController;
import com.web.recruit.entity.*;
import com.web.recruit.service.impl.*;
import com.web.recruit.util.MailUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.thymeleaf.util.StringUtils;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author Tracy
* @date 2020/6/5 22:16
*/
@Controller
@RequestMapping("/user")
public class UserController extends BaseController {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private UserServiceImpl userService;
@Autowired
private ResumeServiceImpl resumeService;
@Autowired
private FavorServiceImpl favorService;
@Autowired
private PositionServiceImpl positionService;
@Autowired
private CompanyServiceImpl companyService;
/**
* 用户注册
* @param user
* @param map
* @return
*/
@PostMapping("/register")
public String userRegister(User user, Map<String, Object> map) {
if (StringUtils.isEmpty(user.getUserAccount())|| StringUtils.isEmpty(user.getUserName())
|| StringUtils.isEmpty(user.getUserPassword())
|| user.getUserBirth().toString().equals("1900/00/00")
|| (user.getUserGender().toString()).equals("-1")
|| StringUtils.isEmpty(user.getUserEduDegree())
|| StringUtils.isEmpty(user.getUserGraduation())) {
logger.info("error...");
map.put("err", "请完整输入!");
return "/user/register";
}
logger.info(user.toString());
int result = userService.saveUser(user);
if (result == 0) {
map.put("err", "用户已存在!");
return "/user/register";
}
return "redirect:/login.html";
}
/**
* 用户登录
* @param account
* @param password
* @param session
* @param map
* @return
*/
@RequestMapping("/login")
public String userLogin(@RequestParam("userAccount") String account,
@RequestParam("userPassword") String password,
HttpSession session,
Map<String, Object> map) {
//登录
int result = userService.loginUser(account, password);
if (result == 1) {
session.setAttribute("user", userService.getUserByAccount(account));
return "redirect:/index.html";
}
if (result == 0)
map.put("errMsg", "密码错误");
if (result == -1)
map.put("errMsg", "用户不存在");
return "/user/user_login";
}
/**
* 修改用户的基本信息
* @param user
* @param request
* @return
*/
@RequestMapping("/updateInfo")
public String update(User user, HttpServletRequest request) {
User thisUser = this.getUser(request);
thisUser.setUserName(user.getUserName());
thisUser.setUserPassword(user.getUserPassword());
thisUser.setUserGender(user.getUserGender());
thisUser.setUserGraduation(user.getUserGraduation());
thisUser.setUserEduDegree(user.getUserEduDegree());
thisUser.setUserBirth(user.getUserBirth());
userService.updateUser(thisUser);
return "redirect:/user/toEditResume";
}
/**
* 用户请求编辑简历界面
* @param request
* @param map
* @return
*/
@RequestMapping("/toEditResume")
public String toResume(HttpServletRequest request, Map<String, Object> map) {
User user = this.getUser(request);
map.put("user", user);
Resume resume;
//如果不存在简历则先创建
if (!resumeService.containResume(user.getUserId())) {
resume = new Resume();
resume.setResumeUserId(user.getUserId());
resumeService.saveResume(resume);
} else {
resume = resumeService.getResumeByUserId(user.getUserId());
}
map.put("resume", resume);
//判断用户是否入职
if (user.getUserPositionId() != 0) {
Position position = positionService.getPositionById(user.getUserPositionId());
map.put("entry", position);
}
//获取用户发出的所有申请
List<Favor> favors = favorService.getFavorsByResumeId(resume.getResumeId());
map.put("favors", favors);
logger.info(favors.toString());
//获取用户所有已发出申请的职位
List<Position> positions = new ArrayList<>();
Position position;
for (Favor favor : favors) {
position = positionService.getPositionById(favor.getFavorPositionId());
positions.add(position);
}
map.put("positions", positions);
logger.info(positions.toString());
List<Company> companies = companyService.getAllCompanies();
map.put("companies", companies);
logger.info(companies.toString());
return "forward:/info.html";
}
/**
* 编辑简历
* @param resume
* @return
*/
@RequestMapping("/editResume")
public String userEditResume(Resume resume) {
resumeService.updateResume(resume);
return "redirect:/user/toEditResume";
}
/**
* 用户登出
* @param session
* @return
*/
@RequestMapping("/logout")
public String userLogout(HttpSession session) {
session.removeAttribute("user");
session.invalidate();
return "redirect:/login.html";
}
/**
* 用户入职
* @param positionId
* @param request
* @return
*/
@GetMapping("/entry")
public String entryPosition(@RequestParam("positionId") Integer positionId,
HttpServletRequest request) {
User user = this.getUser(request);
user.setUserPositionId(positionId);
userService.updateUser(user);
request.getSession().setAttribute("user", user);
return "redirect:/user/toEditResume";
}
@Autowired //注入邮件工具类
private MailUtil mailUtil;
@Autowired //java邮件工具类
private JavaMailSenderImpl mailSender;
/**
* 用户提交反馈
* @param title
* @param content
* @param file
* @return
*/
@CrossOrigin
@ResponseBody
@RequestMapping("/sendMsg")
public String sendMsg(String title, String content,
MultipartFile file) {
String res = null;
boolean hasFile = false;
String target = null; //上传文件的路径
//判断邮件及邮件内容是否为空
if (StringUtils.isEmpty(title) || StringUtils.isEmpty(content)) {
if (StringUtils.isEmpty(title)) {
res = "请输入邮件主题!";
}
if (StringUtils.isEmpty(content)) {
res = "请输入邮件内容!";
}
return res;
}
//判断是否上传文件
if (file != null && file.getSize() > 0) {
hasFile = true;
String path = mailUtil.getUploadPath() + mailUtil.getDate() + "/";
File dir = new File(path);
if (!dir.exists(
基于SpringBoot+Thymeleaf的招聘系统.zip


2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)

《基于SpringBoot+Thymeleaf的招聘系统详解》 在现代互联网开发中,SpringBoot以其简洁、高效和快速启动的特点,已经成为Java后端开发的首选框架。而Thymeleaf作为一款强大的模板引擎,与SpringBoot的集成使得前端页面渲染更加灵活。本篇文章将深入探讨基于SpringBoot和Thymeleaf构建的招聘系统,旨在帮助读者理解其核心原理及应用。 SpringBoot是Spring框架的简化版,它通过自动配置和起步依赖,极大地降低了Spring的使用门槛。开发者不再需要繁琐的XML配置,而是可以专注于业务逻辑的实现。在本招聘系统中,SpringBoot负责管理整个应用的生命周期,包括数据库连接、服务注册、日志记录等多个方面,大大提高了开发效率。 SpringBoot内置了SpringMVC,提供了处理HTTP请求的能力。结合Thymeleaf,我们可以构建出动态、交互式的Web界面。Thymeleaf是一个服务器端的HTML模板引擎,它可以将静态的HTML模板与动态数据结合起来,生成最终的HTML响应。Thymeleaf支持多种表达式语言和条件语句,使得开发者可以在HTML中直接编写业务逻辑,降低了前后端的耦合度。 在招聘系统中,Thymeleaf可以用来展示职位信息、应聘者简历等动态数据。例如,通过Thymeleaf的表达式,我们可以动态地显示每个职位的详情,包括职位名称、薪资范围、工作地点等。同时,Thymeleaf还支持条件判断,可以根据用户权限显示不同的操作按钮,如应聘、收藏等。 在数据库方面,SpringBoot通常会配合Spring Data JPA或MyBatis进行数据访问。Spring Data JPA提供了一种简单的方式来访问和操作数据库,通过Repository接口即可完成基本的CRUD操作。而在Thymeleaf中,我们可以利用Model对象将数据库查询结果传递到视图层,方便地展示在页面上。 此外,为了实现用户注册、登录等功能,招聘系统可能还会涉及到Spring Security。这是一个强大的安全框架,能够提供认证、授权等安全控制。结合SpringBoot,我们可以通过简单的配置就能实现基于用户名和密码的身份验证,以及角色权限的管理。 在开发过程中,Spring Boot的Actuator模块也可以提供健康检查、性能监控等实用功能,帮助开发者了解系统的运行状态,及时发现和解决问题。 基于SpringBoot和Thymeleaf的招聘系统融合了后端的高效处理与前端的灵活展示,实现了业务逻辑与界面展示的无缝对接。这个系统的设计和实现涵盖了Java Web开发的多个重要知识点,包括SpringBoot的自动配置、Thymeleaf的模板引擎、数据库操作以及安全控制,对于初学者和有经验的开发者来说,都是一个极好的学习和实践案例。通过深入学习和实践,可以提升开发者在企业级应用开发中的能力,为未来的职业发展打下坚实的基础。





















































































































- 1
- 2
- 3
- 4
- 5
- 6
- 12

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- m0_736965962025-02-11资源不错,对我启发很大,获得了新的灵感,受益匪浅。

- 粉丝: 898
- 资源: 968
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (源码)基于Arduino的机器人玩具狗项目.zip
- 基于JavaScript的智慧物业管理系统设计源码
- 基于博途1200PLC与组态王的起重机仿真控制系统的设计与实现,基于博途1200PLC与组态王的起重机仿真控制系统设计与实现,基于博途1200PLC和组态王的起重机仿真控制系统 ,基于博途1200P
- 基于PHP、JavaScript、HTML的博物馆API设计源码
- (源码)基于jQuery的脚手架配置项目.zip
- 基于SpringBoot和Vue的现代化学生选课系统设计源码
- 基于Vue、JavaScript、HTML的数字化企业管理平台设计源码
- 基于博途1200PLC的智能彩色广告屏流水灯仿真系统设计与实现,基于博途1200PLC技术的先进彩色广告屏流水灯仿真系统设计与实现,No.109.基于博途1200PLC的新型彩色广告屏流水灯仿真系统
- (源码)基于Arduino的家用时钟系统.zip
- 基于微信小程序的图书馆自习室预约系统设计源码
- 基于Java语言的small_dragon_console_system_rbac权限控制设计源码
- 模糊自适应PID控制策略在微电网母线电压稳定控制中的应用:通过精确调节自适应PID参数,实现母线电压的稳定控制程序,基于模糊自适应PID算法的微电网母线电压稳定控制策略与程序实现,模糊自适应PID对微
- (源码)基于嵌入式C语言的物联网设备监控系统.zip
- 博途1200 PLC驱动的邮件高效分拣控制系统的设计与实现:V15软件版本探索,基于博途1200 PLC的邮件分拣控制系统软件V15的设计与实现,基于博途1200 plc的邮件分拣控制系统 软件版本:
- (源码)基于Arduino和PlatformIO的Tony Space IoT教学样板.zip
- MMC模块化多电平换流器仿真研究:7电平闭环控制下的直流电压与有功无功平衡调节技术,含电容电压平衡与环流抑制策略,载波移相调制技术实践参考,MMC模块化多电平换流器仿真研究:包括闭环控制、直流电压外环


