SSM小项目(会议管理系统)四 实现登录和修改notification(图解超详细)

这是上一篇博客地址:https://blog.csdn.net/qq_41115379/article/details/114292502
这是下一篇博客地址:https://blog.csdn.net/qq_41115379/article/details/114334907
实现业务登录:
目标就是:访问http://localhost:8080/meeting 默认访问login.jsp,输入用户名和密码,点击登录,并且登录成功之后,跳转到index.jsp页面,失败依然到login.jsp页面
先把那些静态文件拷贝到ftl下面
在这里插入图片描述
再做两件事,首先是将login.html改成 login.ftl
在这里插入图片描述
其次就是把images和styles移到webapp下面
在这里插入图片描述
然后在spring-servlet这边配置静态资源

<mvc:resources mapping="/**" location="/"/>

在controller包里创建loginController

package org.javaboy.meeting.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class loginController {
    
    
    @RequestMapping("/")
    public String login(){
    
    
        return "login";
    }
}

这样子直接运行,会出现ftl不能显示css等图片的问题,重启就行了
在这里插入图片描述
model下创建Employee

package org.javaboy.meeting.model;

public class Employee {
    
    
    private Integer employeeid;
    private String employeename;
    private String username;
    private String phone;
    private String email;
    private Integer status;
    private Integer departmentid;
    private String password;
    private Integer role;

    public Integer getEmployeeid() {
    
    
        return employeeid;
    }

    public void setEmployeeid(Integer employeeid) {
    
    
        this.employeeid = employeeid;
    }

    public String getEmployeename() {
    
    
        return employeename;
    }

    public void setEmployeename(String employeename) {
    
    
        this.employeename = employeename;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public String getPhone() {
    
    
        return phone;
    }

    public void setPhone(String phone) {
    
    
        this.phone = phone;
    }

    public String getEmail() {
    
    
        return email;
    }

    public void setEmail(String email) {
    
    
        this.email = email;
    }

    public Integer getStatus() {
    
    
        return status;
    }

    public void setStatus(Integer status) {
    
    
        this.status = status;
    }

    public Integer getDepartmentid() {
    
    
        return departmentid;
    }

    public void setDepartmentid(Integer departmentid) {
    
    
        this.departmentid = departmentid;
    }

    public String getPassword() {
    
    
        return password;
    }

    public void setPassword(String password) {
    
    
        this.password = password;
    }

    public Integer getRole() {
    
    
        return role;
    }

    public void setRole(Integer role) {
    
    
        this.role = role;
    }
}

在mapper文件夹下,创建EmployeeMapper接口和EmployeeMapper.xml

package org.javaboy.meeting.mapper;

public interface EmployeeMapper {
    
    
}
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="org.javaboy.meeting.mapper.EmployeeMapper">

</mapper>

还有在serveice这边创建EmployeeService

package org.javaboy.meeting.service;

import org.springframework.stereotype.Service;

@Service
public class EmployeeService {
    
    
}

可以把model.atturibute 理解为:按照spring一般的编码习惯,model
应该是contrller里面的Map结构吧。Map里面添加key=“student”,value=“student对象”的意思,最后把这个model返回一个jsp,在jsp页面上就能得到这个student对象了
然后是关于 forward和redirect 一个是请求转发,一个是重定位

loginController

package org.javaboy.meeting.controller;

import org.javaboy.meeting.model.Employee;
import org.javaboy.meeting.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class loginController {
    
    
    @Autowired
    EmployeeService employeeService;
    @RequestMapping("/")
    public String login(){
    
    
        return "login";
    }

    @PostMapping("/dologin")
    public String dologin(String username, String password, Model model){
    
    
        Employee employee=employeeService.dologin(username,password);
        if(employee==null){
    
    
            //如果不存在的话
            //所以model 到底是干啥的 好像是往前台传数据的按照spring一般的编码习惯,model 应该是contrller里面的Map结构吧。Map里面添加key=“student”,value=“student对象”的意思,最后把这个model返回一个jsp,在jsp页面上就能得到这个student对象了
            model.addAttribute("error","用户名或密码输入错误");
            return "forward:/";
        }else if(employee.getStatus()==0){
    
    
            model.addAttribute("error","用户待审批");
            return "forward:/";
        }else if(employee.getStatus()==2){
    
    
            model.addAttribute("error","用户审批未通过");
            return "forward:/";
        }else{
    
    
            //这个就是正常了
            return "redirect:/notifications";
        }
    }
}

再在EmployeeService 这边补充的dologin方法

package org.javaboy.meeting.service;

import org.javaboy.meeting.mapper.EmployeeMapper;
import org.javaboy.meeting.model.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {
    
    
    @Autowired
    EmployeeMapper employeeMapper;
    public Employee dologin(String username, String password) {
    
    
      Employee employee= employeeMapper.loadEmpByUsername(username);
      //首先排除用户名不存在或者密码输入错误
        if(employee==null||!employee.getPassword().equals(password)){
    
    
            return null;
        }
        return employee;
    }

}

再开始写mapper下面的EmployeeMapper和EmployeeMapper.xml
EmployeeMapper

package org.javaboy.meeting.mapper;

import org.javaboy.meeting.model.Employee;

public interface EmployeeMapper {
    
    
    Employee loadEmpByUsername(String username);
}

EmployeeMapper.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="org.javaboy.meeting.mapper.EmployeeMapper">
    <select id="loadEmpByUsername" resultType="org.javaboy.meeting.model.Employee">
        select * from employee where username=#{username};
    </select>
</mapper>

然后修改login.ftl的对应位置

<div class="page-content">
    <div class="content-nav">
        登录
    </div>
    <form action="/dologin" method="post">
        <fieldset>
            <legend>登录信息</legend>
            <table class="formtable" style="width:50%">
                <tr>
                    <td>账号名:</td>
                    <td>
                        <input name="username" id="accountname" type="text" />
                    </td>
                </tr>
                <tr>
                    <td>密码:</td>
                    <td>
                        <input name="password" id="new" type="password" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2" class="command">
                        <input type="submit" value="登录" class="clickbutton" onclick="window.location.href='notifiactions.html';"/>
                        <input type="button" value="返回" class="clickbutton" onclick="window.history.back();"/>
                    </td>
                </tr>
            </table>
            <div style="color: red">${error!''}</div>
        </fieldset>
    </form>
</div>

再启动一下
就会有各种情况了
在这里插入图片描述
在这里插入图片描述
当然,输入正确的,会跳转到404,因为还没写好

最后,要把自己登陆的信息传到session里面去
https://www.cnblogs.com/yuyu666/p/9743979.html HttpSession的作用

package org.javaboy.meeting.controller;

import org.javaboy.meeting.model.Employee;
import org.javaboy.meeting.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Controller
public class LoginController {
    
    
    @Autowired
    EmployeeService employeeService;
    @RequestMapping("/")
    public String login(){
    
    
        return "login";
    }

    @PostMapping("/dologin")
    public String dologin(String username, String password, Model model, HttpSession httpSession){
    
    
        Employee employee=employeeService.dologin(username,password);
        if(employee==null){
    
    
            //如果不存在的话
            //所以model 到底是干啥的 好像是往前台传数据的按照spring一般的编码习惯,model 应该是contrller里面的Map结构吧。Map里面添加key=“student”,value=“student对象”的意思,最后把这个model返回一个jsp,在jsp页面上就能得到这个student对象了
            model.addAttribute("error","用户名或密码输入错误");
            return "forward:/";
        }else if(employee.getStatus()==0){
    
    
            model.addAttribute("error","用户待审批");
            return "forward:/";
        }else if(employee.getStatus()==2){
    
    
            model.addAttribute("error","用户审批未通过");
            return "forward:/";
        }else{
    
    
            //这个就是正常了
            //并且保存下来
            httpSession.setAttribute("currentuser",employee);
            return "redirect:/notifications";
        }
    }
}

(ps 这里我把loginController 改成了LoginController 看上去更格式了,所以出现问题的话,改一下名字就可以了)

开始修改notification
首先了解:getmapping,postmapping和requestmapping之间的区别https://blog.csdn.net/qq_41973208/article/details/85008962
然后是了解一下get和post的一点点区别https://www.cnblogs.com/logsharing/p/8448446.html:

  1. 当浏览器发出一个GET请求时,就意味着要么是用户自己在浏览器的地址栏输入,要不就是点击了html里a标签的href中的url
  2. 浏览器的POST请求都来自表单提交。每次提交,表单的数据被浏览器用编码到HTTP请求的body里。

首先在controller这边创建NotificationsController

package org.javaboy.meeting.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class NotificationsController {
    
    
    @GetMapping("/notifications")
    //这里是get 也就意味着,是需要在浏览器中输入xx/notifications 之后return一个网页
    public String notifications(){
    
    
        return "notifications";
    }
}

然后把ftl文件夹下面的notification.html改成.ftl
在这里插入图片描述
然后启动访问一下:
http://localhost:8080/notifications
在这里插入图片描述
然后试试看登录一个username和密码输入成功的,就会发现可以了
但是有个小瑕疵就是
在这里插入图片描述
这边登录成功之后,应该是显示登录的用户
所以需要在notifications.ftl这边修改一下
这段代码的意思是:if currentuser 不等于null的话,就显示他的姓名

<div class="page-header">
    <div class="header-banner">
        <img src="images/header.png" alt="CoolMeeting"/>
    </div>
    <div class="header-title">
        欢迎访问Cool-Meeting会议管理系统
    </div>
    <div class="header-quicklink">
        欢迎您,
        <#if currentuser??>
            <strong>${currentuser.employeename!''}</strong>
        </#if>
        <a href="changepassword.html">[修改密码]</a>
    </div>
</div>

而由于这一段东西,在很多地方都有存在的必要,就索性把他单独拉出来写一个
top.ftl

<div class="page-header">
    <div class="header-banner">
        <img src="images/header.png" alt="CoolMeeting"/>
    </div>
    <div class="header-title">
        欢迎访问Cool-Meeting会议管理系统
    </div>
    <div class="header-quicklink">
        欢迎您,
        <#if currentuser??>
            <strong>${currentuser.employeename!''}</strong>
        </#if>
        <a href="changepassword.html">[修改密码]</a>
    </div>
</div>

并在login.ftl和notifications.ftl的对应位置 改成

<#include 'top.ftl'>

在这里插入图片描述
在这里插入图片描述
运行一下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这些就都正常了

然后就辛苦自己一下,把剩下的html文件都换成ftl,然后把里面的page-header那一部分 都换成<#include ‘top.ftl’>
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41115379/article/details/114334194
今日推荐