前言:ssm整合框架就是将mybatis,spring,springMVC进行整合,得到一个完整的可迁移的项目框架,在以后的项目中可以按照这套框架进行开发。
在整合前创建一个数据库smbms,然后添加user表。
ssm整合步骤:
1.首先创建一个空白模板的maven项目,然后导入相应的jar包,主要的jar包,有
mysql驱动、c3p0连接池、mybatis、springmvc、spring-mybatis、spring-jdbc、aop、lombok
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>ssmDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--junit测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--servlet依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<!--jsp-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
<!--standard标签库依赖-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!--jstl表达式依赖-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!--mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version> 5.1.47</version>
</dependency>
<!-- 数据库连接池c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.19</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--springMVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<!--mybatis-spring整合-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!--spring-jdbc:使用spring来连接操作数据库-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.9</version>
</dependency>
<!--aop-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
<!--lombok给实体类设置注解-->
<dependency>
<groupId>io.github.qsy7.java.dependencies</groupId>
<artifactId>lombok</artifactId>
<version>0.1.0</version>
</dependency>
</dependencies>
<!--maven过滤资源文件-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering><!--开启过滤的意思-->
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering><!--开启过滤的意思-->
</resource>
</resources>
</build>
</project>
注意:需要配置maven资源过滤文件,如果不配置这个,java目录下的配置文件无法被识别。
2.整合mybatis
在整合之前先在java目录下创建包,创建 pojo,mapper(dao),services,controller,filter,utils,在pojo中添加User类,在mapper包下添加UserMapper的接口和UserMapper的xml文件,并且在resources目录下创建mybatis的核心配置文件mybatis-config.xml,以及数据库资源配置文件database.properties.
pojo.User实体类
package com.wp.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.ibatis.type.Alias;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @author wp
* @PackageName:com.jskj.pojo
* @ClassName:User
* @Description:
* @date:2021/9/16 16:38
*/
@Data /*代替了原来的get,set和tostring*/
@AllArgsConstructor /*全部的参数构造函数*/
@NoArgsConstructor /*无参构造*/
@Component /*将User注入到spring中*/
public class User {
private int id;//id
private String userCode;//用户编码
private String userName;//用户姓名
private String userPassword;//用户密码
private Integer gender;//性别
private Date birthday;//出生日期
private String phone;//电话
private String address;//用户地址
private Integer userRole;//用户角色
private Integer createBy;//创建者
private Date createDate;//创建日期
private Integer modifyBy;//修改人
private Date modifyDate;//修改时间
}
mapper.UserMapper的接口
package com.wp.mapper;
import com.wp.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper {
public User getUser(int id);
public List<User> getAllUser();
public int inserUser(User user);
public int deleteUser(int id);
public int updateUser(User user);
}
注意:如果接口有多个值类型参数,必须在参数类型前加上@param(‘xml文件中使用的值名,也就是#{}中的值名’)
mapper.UserMapper.xml配置文件
<?xml version="1.0" encoding="UTF8"?>
<!--注意:原来encoding="UTF-8",下面使用中文注释项目运行会报错,需要将'UTF-8'改为'UTF8'-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wp.mapper.UserMapper">
<select id="getUser" parameterType="int" resultType="com.wp.pojo.User">
select * from user where id=#{id}
</select>
<select id="getAllUser" resultType="com.wp.pojo.User">
select * from user
</select>
<insert id="inserUser" parameterType="com.wp.pojo.User">
insert into user(userCode,userName,userPassword,gender,birthday,phone,address,userRole,createBy,modifyBy) values (#{userCode},#{userName},#{userPassword},#{gender},#{birthday},#{phone},#{address},#{userRole},#{createBy},#{modifyBy})
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
<update id="updateUser" parameterType="com.wp.pojo.User">
update user set userName#{userName},userPassword#{userPassword},phone=#{phone} where id=#{id}
</update>
</mapper>
resources下的数据库资源配置文件database.properties
jdbc.driver=com.mysql.jdbc.Driver
# 如果使用的是mysql8.0,则需要在url中加一个时区的配置
jdbc.url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc.name=root
jdbc.password=Mysql@3306
resources下的mybatis核心配置文件mybatis-config.xml
<?xml version="1.0" encoding="UTF8"?>
<!--注意:原来encoding="UTF-8",下面使用中文注释项目运行会报错,需要将'UTF-8'改为'UTF8'-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--别名设置-->
<typeAliases>
<!--允许这个包下自己设置别名-->
<package name="com.wp.pojo"/>
<!--<!–直接别名设置–>
<typeAlias type="com.wp.pojo.User" alias="User"></typeAlias>-->
</typeAliases>
<!--注册mapper,注意:在spring中注册了所有的Mapper.xml文件,这里就不用再注册了-->
<!--<mappers>
<mapper class="com.wp.mapper.UserMapper"></mapper>
</mappers>-->
</configuration>
注意:mybatis-config.xml实际上可以不需要,后面可以在spring中配置,比如说注册Mapper.xml,后面可以在spring中完成注册。这里为了使整合思路更加清楚,故而先加上,后续做项目中可以考虑删除。
3.整合spring
整合spring前先添加一下services包下的接口和实现类,UserServices接口和UserServicesImpl实现类,然后在resources资源目录下添加spring的核心配置文件applicationContext.xml,为了使整合过程更加的清晰,增加了spring-dao.xml,spring-services.xml。
services.UserServices接口
package com.wp.services;
import com.wp.pojo.User;
import java.util.List;
public interface UserServices {
public User getUser(int id);
public List<User> getAllUser();
public int inserUser(User user);
public int deleteUser(int id);
public int updateUser(User user);
}
services.UserServices实现类
package com.wp.services;
import com.wp.mapper.UserMapper;
import com.wp.pojo.User;
import org.junit.Test;
import java.util.List;
/**
* @author wp
* @PackageName:com.wp.services
* @ClassName:UserServicesImpl
* @Description:
* @date:2021/10/21 16:21
*/
public class UserServicesImpl implements UserServices {
private UserMapper userMapper;
/*setUserMapper方法和spring文件中注入的userServicesImpl可以删掉,
使用@services作用在类上,@autoWire作用在引用类属性UserMapper上来实现*/
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
public User getUser(int id) {
return userMapper.getUser(id);
}
public List<User> getAllUser() {
return userMapper.getAllUser();
}
public int inserUser(User user) {
return userMapper.inserUser(user);
}
public int deleteUser(int id) {
return userMapper.deleteUser(id);
}
public int updateUser(User user) {
return userMapper.updateUser(user);
}
}
dao层的spring配置文件spring-dao.xml
<?xml version="1.0" encoding="UTF8"?>
<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.wp.pojo"></context:component-scan>
<context:component-scan base-package="com.wp.mapper"></context:component-scan>
<!--导入数据库配置文件database.properties-->
<context:property-placeholder location="classpath:database.properties"></context:property-placeholder>
<!--配置数据源datasource-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.name}"></property>
<property name="password" value="${jdbc.password}"></property>
<!--配置C3p0的私有属性-->
<property name="maxPoolSize" value="30" /> <!--最大连接数30-->
<property name="initialPoolSize" value="10"/> <!--初始化连接数10-->
<property name="minPoolSize" value="10" /> <!--最小连接数10-->
<property name="autoCommitOnClose" value="false" /> <!--关闭连接后不自动commit-->
<property name="acquireRetryAttempts" value="2"/> <!--数据库连接失败后的重新尝试连接的次数-->
<property name="acquireRetryDelay" value="1000" /> <!--两次连接中间隔时间,单位毫秒,默认为1000-->
<property name="checkoutTimeout" value="10000" /> <!--获取连接超时时间-->
</bean>
<!--配置sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入dataSource-->
<property name="dataSource" ref="dataSource"></property>
<!--绑定mybatis配置文件,mybatis-config.xml配置文件可以完全省略的,在这里可以配置mybatis的所有东西,但还是保留一下,刷一下mybatis的存在感-->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!--注册mapper映射文件,使用*.xml就可以匹配所有的映射文件,就可以不用在mybatis-config.xml中去注册mapper了-->
<property name="mapperLocations" value="classpath*:com/wp/mapper/*.xml"></property>
</bean>
<!--配置dao自动扫描包,动态的实现了将包下的接口自动注入的spring容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--将sqlSessionFactory注入到sqlSessionFactoryBeanName中-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<!--扫描mapper包-->
<property name="basePackage" value="com.wp.mapper"></property>
</bean>
</beans>
注意:1.绑定mybatis配置文件,在这个标签的父标签下可以配置mybatis的所有内容,所以mybatis的核心配置文件可以删除,但是保留条理会更加清晰
2.注册mapper映射文件,有了这个配置,本来应该在mybatis核心配置文件中注册的mapper可以省略掉。
3.自动扫描包,动态的实现了将包下的接口自动注入的spring容器中
以前services层想要调用mapper包的接口方法,需要在mapper包下增加一个mapper接口的实现类mapperImpl,在实现类mapperImpl中需要sqlSession的参数,来获取mapper接口,从而调用mapper接口的方法。以前获取sqlSession,有两种方式,一种是在spring中注入SqlSessionTemplate类,装配sqlSessionFactory来实现,另一种是实现类继承SqlSessionDaoSupport类,并通过getSqlSession()来实现获取sqlSession。然后在spring中手动注入mapperImpl类,最后就可以在service中调用mapper包的接口方法。
现在有了这个自动扫描包,就省去了mapper接口实现类,以及省去了在spring中注入mapper的实现类。
services层的spring配置文件spring-service.xml
<?xml version="1.0" encoding="UTF8"?>
<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"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
">
<!--扫描services下的包,services包下只要有注解,就可以扫描到spring中-->
<context:component-scan base-package="com.wp.services"></context:component-scan>
<!--将services下的实体类注入到spring中,可以通过配置,也可以通过注解达到同样效果@services作用在实体类,@autoWire作用在实体类的引用参数上-->
<bean id="userServicesImpl" class="com.wp.services.UserServicesImpl">
<property name="userMapper" ref="userMapper"></property>
</bean>
<!--声明式事务-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入dataSource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--aop织入事务-->
<!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--给方法配置事务-->
<tx:method name="add"/>
<tx:method name="delete"/>
<tx:method name="update"/>
<tx:method name="query"/>
<!--给所有的方法配置事务-->
<!--配置事务的传播特性,REQUIRED:支持当前事务,如果当前没有事务,则创建一个事务-->
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--配置事务的切入-->
<aop:config>
<!--切入点在包com.wp.mapper下所有类的方法中切入-->
<aop:pointcut id="txPointCut" expression="execution(* com.wp.services.*.*(..))"/>
<!--事务正式在切入点切入-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"></aop:advisor>
</aop:config>
</beans>
注意:services的spring配置文件,主要是用来注入services层的实现类,并装配services层实现类的mapper接口。还可以用来配置声明式事务。
1.使用aop织入事务,很好的解决了降低代码的耦合性,有了这个aop织入事务的配置,可以不用去修改services实现类的代码,也能实现services层业务逻辑的事务性处理。以前为了实现某个业务的事务性处理,必须修改业务代码,有了这个配置就完全不用修改代码了,非常实用,方便。
3.整合springMVC
整合springmvc主要是对控制层的web资源的调用,首先项目导入web框架的支持,如下步骤图;然后配置web.xml,增加controller层的spring配置文件spring-mvc.xml.新增controller类,并测试一个获取用户的方法。
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--DispatcherServlet提供springMVC的集中访问点,可以跟springIOC进行无缝对接,获得spring的所有好处-->
<servlet>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--绑定spring配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<!--启动级别:跟tomcat一块启动-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--
"/":匹配所有的请求,不包括页面
"/*":匹配所有的请求,包括页面
-->
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--过滤乱码-->
<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--设置编码-->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--session过时,时间单位分钟-->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
<!--登录验证-->
<filter>
<filter-name>adminFilter</filter-name>
<filter-class>com.wp.filter.AdminFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>adminFilter</filter-name>
<url-pattern>/jsp/*</url-pattern>
</filter-mapping>
</web-app>
注意:绑定spring配置文件时,applicationContext.xml一定要将spring-dao.xml、spring-service.xml、spring-mvc.xml三个文件导入,否则项目运行时会报错找不到bean,之前绑定的spring-mvc.xml就导致项目运行时找不到相关的bean。
contextConfigLocation
classpath:applicationContext.xml
controller层的spring-mvc.xml配置文件
<?xml version="1.0" encoding="UTF8"?>
<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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--指定要扫描的包,表示这个包下的注解会生效-->
<context:component-scan base-package="com.wp.controller"></context:component-scan>
<!--过滤掉静态资源文件,使其不被视图解析器解析,否则解析该类静态资源文件会出问题 比如:css/js/mp3/mp4-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<!--
支持mvc注解驱动:
在spring中,一般使用@RequestMapping注解来完成映射关系,为了使@RequestMapping生效,必须
向上下文中注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter,使用mvc:annotation-driven,
就是代替了注册上述两个实例处理器映射器和处理器适配器,
-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--添加视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
注意:1.视图解析器的前缀和后缀随着项目的实际情况而改变。
2.上述所有的配置文件的头文件的’UTF-8’一律改为‘UTF8’,去掉中间的横杠,否则项目运行会有问题
3.在项目结构Project structure的Artifacts的项目发布的结构中,在WEB-INF的目录下添加lib目录,并将Libraries下的包文件copy到lib目录下。否则项目在tomcat中运行找不到包资源。
框架整合完成后,需要测试一下项目,来验证搭建的框架是否成功
验证框架是否成功
1.在controller包下添加UserController实体类
package com.wp.controller;
import com.wp.pojo.User;
import com.wp.services.UserServices;
import com.wp.utils.Constant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpSession;
/**
* @author wp
* @PackageName:com.wp.controller
* @ClassName:UserController
* @Description:
* @date:2021/10/21 17:04
*/
@Controller /*将实体类注入到spring,表示可以接收http请求*/
/*@RestController*//*如果作用在类上,视图解析器就无效,就表示类中的方法无法返回页面,
返回的将是原来的值,一般是字符串,作用在方法上,表示该方法无法返回页面,返回的将是原来的值*/
@RequestMapping("/user")
public class UserController {
@Autowired/*注解实现自动装配,自动给userServices赋值*/
//@Qualifier("userServicesImpl") /*如果实现类比较多,指定具体的实现类,单个实现类也可以不指定*/
private UserServices userServices;
@RequestMapping("/login.do")
public String login(@RequestParam("userName") String name, @RequestParam("userPassword") String password, Model model, HttpSession session){
User user= userServices.getUser(1);
model.addAttribute("user",user);
//将user加到session中,后续可以在登录验证过滤器中使用
session.setAttribute(Constant.USER_SESSION,user);
return "hello";
}
}
注意:1.model是用来向前端页面返回值的,通过model.addAttribute来实现
2.返回值string,是前端页面名,会和视图解析器中的前缀和后缀拼接成一个完整路径下的前端页面
2.在WEB-INF路径下添加jsp文件,并添加hello.jsp文件
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/10/21
Time: 17:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
ssm组合框架大功告成,以后就是套用固定的框架即可
${user}
</body>
</html>
3.为了使其他请求必须在登录成功后,才能访问,需要使用过滤器,添加filter包,并在包下添加AdminFilter实体类,
AdminFilter继承servlet包下的Filter.
AdminFilter实体类
package com.wp.filter;
import com.wp.pojo.User;
import com.wp.utils.Constant;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author wp
* @PackageName:com.wp.filter
* @ClassName:AdminFilter
* @Description:
* @date:2021/10/20 21:36
*/
public class AdminFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;
HttpServletResponse httpServletResponse=(HttpServletResponse) servletResponse;
User user=(User) httpServletRequest.getSession().getAttribute(Constant.USER_SESSION);
if(user!=null){
filterChain.doFilter(servletRequest,servletResponse);
}
else {
httpServletResponse.sendRedirect("/smbms/login.jsp");
}
}
public void destroy() {
}
}
在web.xml中注册AdminFilter
<!--登录验证-->
<filter>
<filter-name>adminFilter</filter-name>
<filter-class>com.wp.filter.AdminFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>adminFilter</filter-name>
<url-pattern>/jsp/*</url-pattern>
</filter-mapping>
注意:这里的过滤器请求范围一定要把登陆界面给排除在外,否则过滤器方法会进入到死循环中,项目也跑不起来
到这里,整个ssm框架的搭建以及验证就完成了,这篇博客原计划用一个小时搞定,没想到用了3个小时。也是为了以后做项目更加快速吧,多花些时间理解以及遇到的问题解决办法。