目录:
(1)整合Freemarker
(2)用户登录
(3)提取头部
(4)提取菜单抽取
(1)整合Freemarker
在pom.xml中加入Freemark依赖:

创建freemark-var.properties:

声明变量,在freemark中可能会用到这个变量:

在spring-servlet.xml中配置视图解析器、


创建ftl页面:
修改HelloController:

以上SSM+Freemark架构已经搭建好了
(2)用户登录
首先把静态文件拷贝到目录下:

把静态资源放在webapp下面,那么在mvc:配置文件spring-servlet.xml进行放行

把login.html修改后缀为ftl:
创建LoginController:

就可以访问到登录页面:

创建Employee实体类:

创建EmployeeMapper接口,和 EmployeeMapper.xml:

创建EmployeeService:

在LoginController:书写登录请求:
登录成功时重定向,登录失败服务端跳转,返回的String,既可以服务端跳转既可以重定向

注入EmployeeService:
- @Autowired
- private EmployeeService employeeService;
- //登录请求
- @PostMapping("/doLogin")
- public String doLogin(String username, String password, Model model, HttpSession httpSession){
- Employee employee = employeeService.doLogin(username,password);
- if (employee == null){
- 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);//存入session
- return "redirect:/notifications";//跳转到登录成功的页面
- }
- }
- }
Controller调用EmployeeService:书写EmployeeService方法:

注入Mapper:
- @Autowired
- private EmployeeMapper employeeMapper;
EmployeeService调用EmployeeMapper接口方法
- //登录请求
- public Employee doLogin(String username, String password) {
- Employee employee = employeeMapper.loadEmpByUsername(username);//根据用户姓名查询方法
- if (employee == null || !employee.getPassword().equals(password)){
- return null;
- }
- return employee;
- }
在EmployeeMapper中创建登录方法:

- //根据用户姓名查询方法
- Employee loadEmpByUsername(String username);
在EmployeeMapper.xml中书写sql语句:注意di要和接口方法对应

- <!--根据用户姓名查询方法-->
- <select id="loadEmpByUsername" resultType="com.xzb.meeting.model.Employee">
- select *
- from employee
- where username = #{username}
- </select>
在Login.ftl修改:给form加action:写controller方法的请求方式

再加一个失败的提示信息:

注意表单的要有name属性,在controller来接收这个输入的内容的:

输入错误的密码:

输入一个未通过的用户:


输入正确的密码:登录成功跳转到notifications,这里只是还未写这个页面,所以报404

我们把用户信息存入到session里面去
(3)提取头部
创建NoatificationsController:来进行跳转到登录页面

修改后缀为ftl:

修改notifications页面:

所有页面都有这个可以把这些提取出来,提取成一个ftl页面。top.ftl

然后在notifications.ftl中引入这个页面:
所有页面都要更改成top.ftl:

刷新一下:

登录成功之后:
可以先把所有的html页面修改后缀为ftl:
在每个页面上面再更改top.ftl
(4)提取菜单抽取
添加一个权限判断的,角色为管理员2的才显示这个菜单:

没有登录看到的菜单:
在每个页面加入左侧菜单,需要把它提取出来:leftMenu.ftl

leftMenu.ftl:这里是最终的代码,添加了新的菜单栏
- <div class="page-sidebar">
- <div class="sidebar-menugroup">
- <div class="sidebar-grouptitle">个人中心</div>
- <ul class="sidebar-menu">
- <li class="sidebar-menuitem"><a href="/notifications">最新通知</a></li>
- <li class="sidebar-menuitem active"><a href="/mybookings">我的预定</a></li>
- <li class="sidebar-menuitem"><a href="/mymeetings">我的会议</a></li>
- <li class="sidebar-menuitem"><a href="/changepassword">修改密码</a></li>
- </ul>
- </div>
- <div class="sidebar-menugroup">
- <div class="sidebar-grouptitle">人员管理</div>
- <ul class="sidebar-menu">
- <li class="sidebar-menuitem"><a href="/register">员工注册</a></li>
- <#if currentuser?? && (currentuser.role==2)>
- <li class="sidebar-menuitem"><a href="/admin/approveaccount">注册审批</a></li>
- <li class="sidebar-menuitem"><a href="/admin/searchemployees?status=1">搜索员工</a></li>
- </#if>
-
- </ul>
- </div>
- <div class="sidebar-menugroup">
- <div class="sidebar-grouptitle">部门管理</div>
-
- <ul class="sidebar-menu">
- <#if currentuser?? && (currentuser.role==2)>
- <li class="sidebar-menuitem"><a href="/admin/departments">部门管理</a></li>
- </#if>
- </ul>
- </div>
-
- <div class="sidebar-menugroup">
- <div class="sidebar-grouptitle">会议室管理</div>
-
- <ul class="sidebar-menu">
- <#if currentuser?? && (currentuser.role==2)>
- <li class="sidebar-menuitem"><a href="/admin/addmeetingroom">添加会议室</a></li>
- <li class="sidebar-menuitem"><a href="/meetingrooms">查看会议室</a></li>
- </#if>
- </ul>
- </div>
-
- <div class="sidebar-menugroup">
- <div class="sidebar-grouptitle">会议预定</div>
- <ul class="sidebar-menu">
- <li class="sidebar-menuitem"><a href="/bookmeeting">线上预定会议</a></li>
- <li class="sidebar-menuitem"><a href="/bookmeeting2">线下预定会议</a></li>
- <li class="sidebar-menuitem"><a href="/searchmeetings">搜索会议</a></li>
- </ul>
- </div>
- </div>
然后再在每个页面进行引入菜单栏:
管理员登录看到就多了:

左侧菜单:a标签添href以后添加对应的controller进行访问就可以了: