狂神员工管理系统(没链接数据库)

练习一下SpringBoot

首先新建一个springboot项目

  1. 这里选择Spring Initializr

  2. 改一下文件名和路径,java版本选择java8

  3. 依赖这里勾选Spring Web

  4. 多余的东西删掉

  5. 等待依赖加载完成即可(过程很慢,在网上下载)

狂神员工管理系统(没链接数据库)
狂神员工管理系统(没链接数据库)
狂神员工管理系统(没链接数据库)

导入我们需要的依赖包

本项目比较小,没有实现数据库层面,所以只导入了lombok和thymeleaf

<!--        lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
<!--        import thymeleaf-->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

导入静态资源

这几个html文件我们拷贝到templates里面,asserts下面的资源拷贝到static里面
狂神员工管理系统(没链接数据库)
狂神员工管理系统(没链接数据库)

接下来伪造一部分数据,因为我们没有链接数据库

  1. 新建pojo文件夹,写入Department和Employee类
  2. Department两个属性,id和name,使用注解加入有/无参构造
  • @Data : 注解在类上, 为类提供读写属性, 此外还提供了 equals()、hashCode()、toString() 方法
  1. Employee也同理
  2. 新建dao文件夹,编造一部分数据
  3. 新建DepartmentDao和EmployeeDao
@Repository // 给spring托管
  1. 实现DepartmentDao和EmployeeDao

至此准备工作完毕

实现登录界面

  1. 导入thymeleaf,万物都可被thymeleaf接管
xmlns:th="http://www.thymeleaf.org"
  1. 更改href标签让thymeleaf接管,具体方法查看thymeleaf文档
  2. 新建config文件夹,新建MyMvcConfig.java
  3. 在这里配置首页内容,直接转发到index.html页面,继承WebMvcConfigurer

addViewControllers:页面跳转

以前写SpringMVC的时候,如果需要访问一个页面,必须要写Controller类,然后再写一个方法跳转到页面,其实重写WebMvcConfigurer中的addViewControllers方法即可达到效果了

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/toLogin").setViewName("login");
    }

值的指出的是,在这里重写addViewControllers方法,并不会覆盖WebMvcAutoConfiguration(Springboot自动配置)中的addViewControllers(在此方法中,Spring Boot将“/”映射至index.html),这也就意味着自己的配置和Spring Boot的自动配置同时有效,这也是我们推荐添加自己的MVC配置的方式

用户登录

  1. 主要就是判断密码是否正确
@Controller
public class LoginController {
    @RequestMapping("/user/login")
    public String login(@RequestParam("username") String username,
                        @RequestParam("password") String password,
                        Model model, HttpSession session){
        if(!StringUtils.isEmpty(username) && "123456".equals(password)){
            session.setAttribute("loginUser",username);
            return "redirect:/main.html";
        }else {
            model.addAttribute("msg","用户名或者密码错误");
            return "index";
        }
    }
}
  1. 在index.html中 给input标签设置两个名字 name=“username” / name=“password”

国际化

  1. 这里会涉及到中文乱码问题,具体解决方法如下!

    setting 里面搜索 File Encoding 都改成utf-8 即可解决

  2. 在 resources 新建一个i18n文件夹,

    1. login.properties
    2. login_en_US.properties
    3. login_zh_CN.properties
  3. 更改index.html

    主要就是对每个有文字的地方加一个 th:text="#{login.remember}"

    最后中英文那里 th:href="@{/index.html(l=‘zh_CN’)}"

  4. 在config下新建MyLocalResolver.java写一个自己的LocaleResolver

  5. 在application.properties中加入

# 关闭默认缓存机制
spring.thymeleaf.cache=false
spring.messages.basename=i18n/login
  1. 在MyMvcConfig中注入
@Bean
    public LocaleResolver localeResolver(){
        return new MyLocalResolver();
    }
  1. 注意:MyMvcConfig中一定要加@Configuration注解,不然跳转不过来

拦截器

在config下新建LoginHandlerInterceptor.java

public class LoginHandlerInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object loginUser = request.getSession().getAttribute("loginUser");
        if(loginUser==null){
            request.setAttribute("msg","没有权限,请先登录");
            request.getRequestDispatcher("/index.html").forward(request,response);
            return false;
        }else {
            return true;
        }
    }
}

同时在MyMvcConfig.java下配置拦截器

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/index.html","/","/user/login","/css/*","/js/**","/img/**");
    }

展示员工列表

  1. 在EmployeeDao中加入返回所有的方法

    public Collection<Employee> getAll(){
            return employees.values();
        }
    
  2. 新建EmployeeController.java

@RequestMapping("/emps")
    public String list(Model model){
        Collection<Employee> employees = employeeDao.getAll();
        model.addAttribute("emps",employees);
        return "emp/list";
    }
  1. 新建emp文件夹,将list.html加入其中, 如上所示

  2. 修改原有展示的内容

    <table class="table table-striped table-sm">
    							<thead>
    								<tr>
    									<th>id</th>
    									<th>lastName</th>
    									<th>email</th>
    									<th>gender</th>
    									<th>department</th>
    									<th>birth</th>
    									<th>操作</th>
    								</tr>
    							</thead>
    							<tbody>
    								<tr th:each="emp:${emps}">
    									<td th:text="${emp.getId()}"></td>
    									<td th:text="${emp.getLastName()}"></td>
    									<td th:text="${emp.getEmail()}"></td>
    									<td th:text="${emp.getGender()}"></td>
    									<td th:text="${emp.getDepartment()}"></td>
    									<td th:text="${emp.getBirth()}"></td>
    								</tr>
    							</tbody>
    						</table>
    
    1. 修改list.html和dashboard.html, 更改员工展示映射地址,并加入点击高亮
    <a class="nav-link" th:class="${active=='list.html'? 'nav-link active':'nav-link'}" th:href="@{/emps}">
    

    这里把html*同的代码放到common里面,设置成函数的模式,维护的时候方便

增加员工列表

  1. 在Dao层写一个添加的方法
  2. 在emp中新建一个add.html
  3. 在add中添加一个表单用来收集信息
  4. 在controller层添加一个返回给表单’‘部门’'信息的方法
@GetMapping("/emp")
    public String toAddpage(Model model){
        Collection<Department> departments = departmentDao.getDepartments();
        model.addAttribute("departments",departments);
        return "emp/add";
    }
  1. 再添加一个post请求用于添加员工
@PostMapping("/emp")
    public String addEmp(Employee employee){
        // 添加的操作 forward
        employee.setBirth(new Date());
        employeeDao.save(employee);
        return "redirect:/emps";
    }
  1. list.html中加一个跳转到添加页面的按钮
<h2><a class="btn btn-sm btn-success" th:href="@{/emp}">添加员工</a></h2>

修改和删除基本上也是大同小异

404处理

404的话 直接在templates下新建一个error把404放进去即可

注销操作

在LoginController中加一个关闭session方法即可

<a class="nav-link" th:href="@{/user/logout}">注销</a>

展示一下界面截图
狂神员工管理系统(没链接数据库)

狂神员工管理系统(没链接数据库)
狂神员工管理系统(没链接数据库)
狂神员工管理系统(没链接数据库)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EvKXjxJi-1637900550431)(C:\Users\MissLiuAndMrWang\AppData\Roaming\Typora\typora-user-images\image-20211126121452175.png)]
项目链接:https://pan.baidu.com/s/1RckRekY3mpnAdJoLPEP1GA
提取码:wlfd

上一篇:[java] springboot thymeleaf模板文件未生效


下一篇:7 — 简单了解thymeleaf