SpringMVC学习笔记
三层架构和MVC
三层架构
表现层:也就是我们常说的web层,它负责接收客户端请求,向客户端相应结果,,通常客户端使用http请求web层。
业务层:也就是我们说的service层,负责逻辑业务处理,和我们开发项目的需求息息相关,web层依赖于业务层,但业务层不依赖于web层。
持久层:也就是我们常说的dao层,负责数据持久化。通俗的讲,持久层就是和数据库交互,对数据库表进行增删改查。
MVC模型
- 全名Model View Controller,是模型,视图,和控制器的缩写,是一种用于设计创建web应用程序表现层的模式。是一种软件设计规范。
- 是将业务逻辑,数据,显示分离的方式来阻止代码。
- MVC的主要作用是降低视图和业务逻辑之间的双向耦合
- MVC不是一种设计模式,是一种架构模式
Model(模型):通常指我们的数据模型,作用一般情况下用于封装数据。
View(视图):负责进行模型的展示,通常指我们的jsp或者html。
Controller(控制器):接收请求,委托给模型处理,,处理完毕后把返回的模型数据返回给视图,由视图负责展示。
SpringMVC

Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。
SpringMVC的特点:
- 轻量级,简单易学
- 高效,基于请求的相应的MVC框架
- 与Spring兼容性好,无缝结合
- 约定大于配置
- 功能强大:restful、数据验证、格式化、本地化、主题等
- 简单灵活
SpringMVC和Structs2的优略分析
共同点:
他们都是表现层框架,都是基于MVC模型编写的。
他们的底层都离不开原始的ServletAPI
它们处理请求的机制都是一个核心控制器
区别:
SpringMVC的入口是Servlet和Structs2是Filter
SpringMVC基于方法设计的,而Structs是基于类,Structs2每次执行都会创建一个动作类,所有SpringMVC会稍比Structs2快些。
SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。
SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱。
pring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高
入门程序
修改web.xml,配置DispatherServlet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<filter> <filter-name>encodingFilter</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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter>
<filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
|
注意:/ 和 /* 的区别
< url-pattern > / </ url-pattern > 不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类 。< url-pattern > /* </ url-pattern > 会匹配 *.jsp,会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错
配置mvc配置文件 mvc.xml类似于spring配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| <?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" 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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:annotation-driven/>
<context:component-scan base-package="com.gem.controller"/>
<mvc:default-servlet-handler/>
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/test/**"/> <mvc:exclude-mapping path="/test/test2"/> <bean class="com.gem.interceptor.MyInterceptor" id="myInterceptor"/> </mvc:interceptor> </mvc:interceptors>
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"> <property name="maxUploadSize" value="5242880"/> </bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean>
</beans>
|
创建Controller,打上@Controller和@RequestMapping注解
测试
@RequestMapping注解
@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
属性
- value表示映射路径
- method表示触发该路径的方式,指定哪种方式就只能通过该方式触发,触发方法不对,报405异常。
- params表示请求中必须含有的参数,如果没有该参数则报400异常。
注意:可以使用XXXMapping来替代RequestMapping(method=XXX)
1 2 3 4 5 6 7
| @RequestMapping(value = "/index", method = RequestMethod.GET, params = {"id"}) public String index(Long id) { System.out.println("请求中的参数为: " + id); return "index"; }
|
可以接收基本类型,String类型和pojo类型,如果我们传入一个实体类,SpringMVC会自动帮我们封装成一个对象(参数列表必须要和实体类字段对应,不然为null)。
静态资源过滤问题
1 2
| <mvc:resources mapping="/asserts/**" location="/asserts/"/>
|
1
| <mvc:default-servlet-handler/>
|
1 2 3 4
| <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping>
|
表单提交乱码问题
post方式提交表单会出现中文乱码问题,这时候我们想要配置springMVC自带的过滤器,可以在web.xml中配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <filter> <filter-name>CharacterEncodingFilter</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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
|
处理日期类型参数
在需要处理的实体类字段打上@DateTimeFormat注解,pattern属性传入要格式化的字符串。
1 2 3
| @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate createDate;
|
常用注解
RequestParam
修饰绑定的参数
value 表示参数名称,用来对应方法的形参,默认和方法的形参同名
required 表示参数是否是必须参数,默认值为true,表示该参数必须要有
defaultValue 表示如果没有传入该参数,则使用默认值。
required=false,defaultValue = “XXX”连用
1 2 3 4 5 6
| @GetMapping("/index4") public String index4(@RequestParam(value = "sname", required = false, defaultValue = "admin") String name, int age) { System.out.println(name); System.out.println(age); return"success"; }
|

运行结果

RequestBody
修饰属性,用来获取请求体中的数据,即参数键值
required 表示是否是必须的,默认是true
注意:此注解只能通过post请求触发才能获取响应数据,不支持get请求
1 2 3 4 5
| @PostMapping("/index5") public String index5(@RequestBody(required = false) String body) { System.out.println(body); return "success"; }
|
PathVariable
表示在URL中使用占位符来指定方法形参,它是后面我们使用Restful风格URL的基础
1 2 3 4 5
| @GetMapping("/index6/{id}") public String index6(@PathVariable("id") Long id) { System.out.println(id); return "success"; }
|

运行结果

获取请求头中指定key对应的value值
1 2 3 4 5
| @GetMapping("/header") public String header(@RequestHeader("User-Agent") String header) { System.out.println(header); return "success"; }
|
访问路径
localhost:8888/mvc/hello/header
运行结果

CookieValue
表示获取Cookie中指定名称的值
1 2 3 4 5
| @GetMapping("/cookie") public String cookie(@CookieValue("JSESSIONID") String cookieValue) { System.out.println(cookieValue); return "success"; }
|
ModelAttribute
该注解是SpringMVC4.3版本后新加入的,它可以用于修饰方法和参数。
出现在方法上,表示当前方法会在控制器的方法执行前执行,它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。
出现在参数上,获取指定的数据给参数赋值。当表单提交数据不是完整的实体类数据时,保证没有提交数据字段使用数据库原来对象的数据。
1 2 3 4 5 6 7 8 9 10 11 12
| @ModelAttribute public void showModel(User user) { System.out.println("HelloMvc.testModelAttribute"); System.out.println(user); System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); }
@GetMapping("/testma") public String testModelAttribute(@ModelAttribute("user") User user) { System.out.println(user); return "success"; }
|
model对象
多个页面中数据共享使用Model对象。
它相当于request请求作用域,如果想要联动操作session,则可以在类上面使用@SessionAttributes注解,该注解可以把放入到model中的数据,同等的放入到session中
1 2 3 4 5 6 7 8 9 10 11
| @SessionAttributes({"message"}) public class HelloMvc { @RequestMapping("/index10") public ModelAndView index10(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message","Hello"); modelAndView.setViewName("success"); return modelAndView; } }
|
jsp使用el表达式提取
1 2
| ${requestScope.message} ${sessionScope.message}
|
结果

如果要在控制器的方法中获取session,则可以使用model.get(“”)来获取如果要清空session,则可以在控制器方法参数中传入SessionStatus对象,然后调用该对象的setComplete()方法即可
restful风格url
由于浏览器的form表单只支持GET与POST请求,而delete、put等方法不支持,Spring3.0添加了一个过滤器,可以将浏览器请求改为指定的请求方式,使得支持get、post、put、delete请求
使用方法:
1.在web.xml中配置该过滤器
1 2 3 4 5 6 7 8 9
| <filter> <filter-name>hiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>hiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
|
2.请求方式必须使用post请求
3.按照要求提供_method请求参数,该参数的取值就是我们的请求方式
1 2 3 4 5 6 7 8 9 10
| <form action="user/1" method="post"> <%--<input type="text" name="username"/> <input type="password" name="password"/>--%>
<%--设置请求方式--%> <input type="hidden" name="_method" value="delete">
<input type="text" name="id"/> <input type="submit" value="提交"> </form>
|
4.对应Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| package com.gem.controller;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping;
@Controller @RequestMapping("/user") public class RestController {
@GetMapping("/{id}") public String select(@PathVariable("id") Long id) { System.out.println("执行查询操作的id:" + id); return "success"; }
@PostMapping public String add() { System.out.println("执行添加操作"); return "success"; }
@DeleteMapping("/{id}") public String delete(@PathVariable("id") Long id) { System.out.println("执行删除操作的id:" + id); return "success"; } }
|
SpringMVC方法返回Json数据
1.导入jackson jar包(Spring内置转换就是基于jackson)
1 2 3 4 5
| <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.2</version> </dependency>
|
2.在控制器对应方法上添加注解@ResponseBody
@ResponseBody放在方法上,表示该方法返回纯数据,即不是视图名称
@ResponseBody放在类上,则表示该类中所有的方法返回的都是纯数据
@ResponseBody + @Controller = @RestController
1 2 3 4 5 6 7 8 9
| @RestController public class JsonController {
@GetMapping("/json") public User getData() { User user = new User(1L, "admin", "123456"); return user; } }
|
访问http://localhost:8888/mvc/json
运行结果

SpringMVC文件上传
- 引入maven依赖(commons-fileupload+commons-io)
1 2 3 4 5 6
| <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency>
|
- 提供form表单(post,multipart/form-data,file表单控件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <%@ page contentType="text/html; charset=UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>SpringMVC文件上传</title> </head> <body> <form action="upload" method="post" enctype="multipart/form-data"> 图片:<input type="file" name="uploadFile"/><br/> <input type="submit" value="上传"/> </form> </body> </html>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Controller public class UploadController {
@PostMapping("/upload") public String upload(MultipartFile uploadFile) throws IOException { String fileName = ""; String uploadFileName = uploadFile.getOriginalFilename(); String extendName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1, uploadFileName.length()); String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase(); fileName = uuid + "." + extendName; File file = new File("D:/a_dmeo/img/" + fileName); uploadFile.transferTo(file); return "success"; }
|
1 2 3 4
| <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="5242880"/> </bean>
|
全局异常处理
1 2 3 4 5
| <error-page> <error-code>500</error-code> <location>/WEB-INF/pages/error.jsp</location> </error-page>
|
1 2 3 4 5 6 7 8 9 10 11 12
| @ControllerAdvice public class ExceptionAdvice { @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler(ArithmeticException.class) public String showInfo(Exception e) { System.out.println(e.getMessage()); return "error"; } }
|
拦截器
SpringMVC的拦截器类似于Servlet开发中的过滤器Filter,拦截器只会拦截访问控制器的方法,不会拦截静态资源。
步骤
- 编写一个普通的实现类实现HandlerInterceptor接口


可以配置要剔除的路径。
多个拦截器的执行顺序
两个拦截器同时拦截一个请求

SSM整合
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> <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>com.gem</groupId> <artifactId>ssmdemo</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging>
<name>ssmdemo Maven Webapp</name> <url>http://www.example.com</url>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <spring.version>5.2.9.RELEASE</spring.version> <tomcat.version>7.0.86</tomcat.version> </properties>
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</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-orm</artifactId> <version>${spring.version}</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.5</version> </dependency>
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.0</version> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency>
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency>
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.2</version> </dependency>
<dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version> </dependency>
<dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.9.1</version> </dependency>
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.30</version> </dependency>
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
<dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency>
<dependency> <scope>compile</scope> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>2.7.19</version> </dependency> </dependencies>
<build> <finalName>ssmdemo</finalName>
<resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources>
<pluginManagement> <plugins>
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/ssm</path> <port>8888</port> <uriEncoding>UTF-8</uriEncoding> <staticContextPath>/img</staticContextPath> <staticContextDocbase>D:\a_demo\img</staticContextDocbase> <contextReloadable>false</contextReloadable> <useTestClasspath>true</useTestClasspath> </configuration> <dependencies> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-util</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-coyote</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-api</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-dbcp</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-servlet-api</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jsp-api</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper-el</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-el-api</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-catalina</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-tribes</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-catalina-ha</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-annotations-api</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-juli</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-logging-juli</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-logging-log4j</artifactId> <version>${tomcat.version}</version> </dependency> </dependencies> </plugin>
<plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin>
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin>
</plugins> </pluginManagement> </build> </project>
|
spring配置文件 spring.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| <?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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:property-placeholder location="classpath:db.properties"/>
<context:component-scan base-package="com.gem.service"/>
<aop:aspectj-autoproxy/>
<tx:annotation-driven/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${mysql_driver}"/> <property name="jdbcUrl" value="${mysql_url}"/> <property name="user" value="${mysql_user}"/> <property name="password" value="${mysql_password}"/> </bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configuration"> <bean class="org.apache.ibatis.session.Configuration"> <property name="lazyLoadingEnabled" value="true"/> <property name="aggressiveLazyLoading" value="false"/> <property name="cacheEnabled" value="true"/> </bean> </property> <property name="typeAliasesPackage" value="com.gem.entity"/> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"/> </array> </property> <property name="defaultEnumTypeHandler" value="org.apache.ibatis.type.EnumOrdinalTypeHandler"/> </bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.gem.mapper"/> </bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> </beans>
|
mvc配置文件 mvc.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| <?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" 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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:annotation-driven/>
<context:component-scan base-package="com.gem.controller"/>
<mvc:view-controller path="/" view-name="user/login"/>
<mvc:resources mapping="/asserts/**" location="/asserts/"/>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="5242880"/> </bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
|
log4j配置文件log4j.properties
1 2 3 4 5 6 7 8
| log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
log4j.logger.com.gem.mapper=DEBUG
|
mybatis缓存配置文件ehcache.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <ehcache> <diskStore path="D:\java\ehcache"/>
<defaultCache maxElementsInMemory="1000" maxElementsOnDisk="10000000" eternal="false" overflowToDisk="true" timeToIdleSeconds="120" timeToLiveSeconds="600" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> </defaultCache> </ehcache>
|
数据库配置文件db.properties
1 2 3 4
| mysql_driver=com.p6spy.engine.spy.P6SpyDriver mysql_url=jdbc:p6spy:mysql:///ssm?serverTimezone=GMT%2B8 mysql_user=root mysql_password=root
|
p6spy配置文件spy.properties
1 2 3 4
| mysql_driver=com.p6spy.engine.spy.P6SpyDriver mysql_url=jdbc:p6spy:mysql:///ssm?serverTimezone=GMT%2B8 mysql_user=root mysql_password=root
|
web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<session-config> <session-timeout>30</session-timeout> </session-config>
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param>
<servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<filter> <filter-name>CharacterEncodingFilter</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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<filter> <filter-name>hiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>hiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
|