图片来源尚硅谷
ssm整合 大概所需要的依赖
<dependencies>
<!--spring pom.xml依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>${jakarta.annotation-api.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--
springmvc
spring-webmvc 6.0.6
jakarta.jakartaee-web-api 9.1.0
jackson-databind 2.15.0
hibernate-validator / hibernate-validator-annotation-processor 8.0.0.Final
-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-web-api</artifactId>
<version>${jakarta.jakartaee-web-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- jsp需要依赖! jstl-->
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>${jakarta.servlet.jsp.jstl-api.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-databind.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator-annotation-processor -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
<!--
mybatis
mybatis / 3.5.11
mysql / 8.0.25
pagehelper / 5.1.11
-->
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- MySQL驱动 mybatis底层依赖jdbc驱动实现,本次不需要导入连接池,mybatis自带! -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<!-- 整合第三方特殊依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!-- 日志 , 会自动传递slf4j门面-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
</dependencies>
1 管理 controller springmvc配置类
/**
*
* 1 controller
* 2 全局异常处理器
* 3 handlerMapping handlerAdapter
* 4 静态资源管理
* 6 json转化器
* 7 拦截器
* ...
*/
@Configuration
@EnableWebMvc // 3+6
@RestControllerAdvice // 全局异常处理器
@ComponentScan({"cn.javasm.controller","cn.javasm.exception","cn.javasm.interceptor"})
public class WebMVCConfig implements WebMvcConfigurer {
//开启静态资源
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
// 拦截器
@Autowired
private ProjectInterceptor projectInterceptor;
// 如果拦截器 1 是 false 则 后续拦截器就不会执行
// 拦截器 按照配置顺序执行 先进后出原则 1先进 1后出
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(projectInterceptor).addPathPatterns("/user/**").excludePathPatterns("/**");
}
//异常处理
@ExceptionHandler(SystemException.class) //拦截异常
public HashMap<String, Object> doException(SystemException e){
// 记录日志
// 发送消息给运维
// 发送邮件给开发人员
HashMap<String, Object> map = new HashMap<>();
map.put("code",e.getCode());
map.put("msg",e.getMessage());
map.put("data",null);
return map;
}
}
1.1 拦截器 相关 类
// intercepter包 中的配置类
@Component
public class ProjectInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle~~~~~~~~");
return false;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle~~~~~~~");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion~~~~~~~~");
}
}
1.2 exception 包下 异常类
package cn.javasm.exception;
// exception包下配置的异常类
public class SystemException extends RuntimeException{
private Integer code;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public SystemException(String message, Integer code) {
super(message);
this.code = code;
}
public SystemException(String message, Throwable cause, Integer code) {
super(message, cause);
this.code = code;
}
}
2. ServiceJavaConfig 主要配置 service mapper mybatis jdbc相关配置 的类
/**
*
* 1 controller
* 2 全局异常处理器
* 3 handlerMapping handlerAdapter
* 4 静态资源管理
* 6 json转化器
* 7 拦截器
* ...
*/
@Configuration
@EnableWebMvc // 3+6
@RestControllerAdvice // 全局异常处理器
@ComponentScan({"cn.javasm.controller","cn.javasm.exception","cn.javasm.interceptor"})
public class WebMVCConfig implements WebMvcConfigurer {
//开启静态资源
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
// 拦截器
@Autowired
private ProjectInterceptor projectInterceptor;
// 如果拦截器 1 是 false 则 后续拦截器就不会执行
// 拦截器 按照配置顺序执行 先进后出原则 1先进 1后出
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(projectInterceptor).addPathPatterns("/user/**").excludePathPatterns("/**");
}
//异常处理
@ExceptionHandler(SystemException.class) //拦截异常
public HashMap<String, Object> doException(SystemException e){
// 记录日志
// 发送消息给运维
// 发送邮件给开发人员
HashMap<String, Object> map = new HashMap<>();
map.put("code",e.getCode());
map.put("msg",e.getMessage());
map.put("data",null);
return map;
}
}
3.整合配置类 ServletConfig
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
//加载spring相关配置
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{ServiceJavaConfig.class};
}
//加载springMVC相关配置
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebMVCConfig.class};
}
//拦截所有请求
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}