实验目的:
- 掌握SSM三大框架整合
- 掌握简单的前后台交互逻辑
实验内容:
参考上课教材书本第15章,完成15.4的用户登录模块的功能
实验仪器设备(实验环境):
运行环境:Windows 10
开发工具:IntelliJ IDEA 或 Eclipse
运行环境:JDK1.8
项目结构
Controller 层
UserController 类
package com.spring.ssm.controller;
import com.spring.ssm.domain.User;
import com.spring.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/login")
public String login(User user, HttpServletRequest request) {
try {
User u = userService.login(user);
if (u != null) {
request.getSession().setAttribute("USER_SESSION", u);
return "redirect:/admin/main.jsp";
}
request.setAttribute("msg", "用户名或密码错误");
return "forward:/admin/login.jsp";
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("msg", "系统错误");
return "forward:/admin/login.jsp";
}
}
@RequestMapping("/tomainpage")
public String tomainpage() {
return "main";
}
@RequestMapping("/main")
public String main(){
return "/admin/main.jsp";
}
@RequestMapping("/logout")
public String logout(HttpServletRequest request){
try{
HttpSession session= request.getSession();
session.invalidate();
return "forward:/admin/login.jsp";
}catch (Exception e){
e.printStackTrace();
request.setAttribute("msg", "系统错误");
return "forward:/admin/login.jsp";
}
}
}
Dao层:
UserMapper类:
package com.spring.ssm.dao;
import com.spring.ssm.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Service;
@Mapper
public interface UserMapper {
@Select("select * from user where email = #{email} and password = #{password} and status != '1'")
@Results(id = "userMap", value = {
@Result(id = true,column = "id", property = "id"),
@Result(column = "name",property = "name"),
@Result(column = "password",property = "password"),
@Result(column = "email",property = "email"),
@Result(column = "role",property = "role"),
@Result(column = "status",property = "status"),
})
User login(User user);
}
Domain 实体类:
User 类:
package com.spring.ssm.domain;
public class User {
private int id;
private String name;
private String password;
private String email;
private String role;
private String status;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
interceptor 拦截器层
ResourceInterceptor类:
package com.spring.ssm.interceptor;
import com.spring.ssm.domain.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class ResourseInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
User user = (User) request.getSession().getAttribute("USER_SESSION");
String uri = request.getRequestURI();
if (user != null) {
return true;
}
if (uri.indexOf("login") > 0) {
return true;
}
request.setAttribute("msg", "请先登录");
request.getRequestDispatcher("/admin/login.jsp").forward(request, response);
return false;
}
}
Service层
UserService接口:
package com.spring.ssm.service;
import com.spring.ssm.domain.User;
public interface UserService {
public User login(User user);
}
UseServiceImpl类:
package com.spring.ssm.service.impl;
import com.spring.ssm.dao.UserMapper;
import com.spring.ssm.domain.User;
import com.spring.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService
{
@Autowired
private UserMapper userMapper;
@Override
public User login(User user) {
return userMapper.login(user);
}
}
配置文件方面:
resource文件夹
application-dao.xml:数据库连接配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.spring.ssm.dao"/>
</bean>
</beans>
application-service:spring Service注解 解析
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.spring.ssm.service"/>
</beans>
配置文件 jdbc.properties
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=root
spring-mvc.xml : mvc配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.spring.ssm.controller"/>
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/images/**" location="/img/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<!-- 排除哪些请求不经过这个拦截器 -->
<mvc:exclude-mapping path="/css/**"/>
<mvc:exclude-mapping path="/js/**"/>
<mvc:exclude-mapping path="/img/**"/>
<!-- 装配具体的拦截器 -->
<bean class="com.spring.ssm.interceptor.ResourseInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
实验结果/运行图:
登录页面
登录成功
注销登录之后 又回到了登录页面
在URL 上继续输入 /tomainpage
出现拦截器 被拦截了
实验总结(包括结果分析、问题与解决办法、心得体会、意见与建议等):
本次实验旨在深入理解和掌握SSM三大框架(Spring、SpringMVC、MyBatis)的整合,以及前后台交互逻辑的实现。SSM框架是Java企业级开发中常用的技术组合,通过本次实验,我们将能够熟练地在实际项目中应用这些技术。 实验内容主要围绕书本第15章的15.4节,即实现用户登录模块。以下是实验的主要步骤: 首先,我们需要搭建起Spring、SpringMVC和MyBatis这三个框架的基本结构,确保它们能够协同工作。 包括数据库的连接配置、Spring的IoC容器配置、MyBatis的映射器配置等。设计用户登录模块的数据模型、业务逻辑接口及其实现、控制器等。 实现前端页面的表单提交,以及后端对用户名和密码的验证逻辑。 通过实验,成功实现了用户登录模块。用户可以在前端输入用户名和密码,提交后由后端进行验证,并返回相应的登录结果。