索引:
参看代码 GitHub:
一、要点讲解
1.引入构建 spring 、spring mvc 的框架类库
spring-context:因依赖 会自动引入 spring-aop spring-beans spring-core spring-expression 四个包
spring-context-support
spring-aspects
spring-tx
jackson-annotations:Jackson 用来解析数据,如json 或者 httpmessage 等
jackson-databind
jackson-core
jackson-dataformat-xml
mybatis-spring:为了在spring中使用 mybatis orm 的 bean
mybatis
mysql-connector-java:链接mysql数据库的驱动
druid:数据库链接池
2.在Tomcat中启动 Web 的必要配置
web-app:使用 servlet 3.0 的配置
context-param:上下文环境配置
listener:监听配置
servlet:核心 servlet 配置,决定了 spring MVC 框架的启用
3.Spring 、Spring MVC 运行相关必要配置
mvc:annotation-driven:
启用spring mvc 注解, 默认的注解映射的支持
自动注册 RequestMappingHandlerMapping RequestMappingHandlerAdapter 两个 bean,这是 Spring mvc 分发请求所必须的
并提供了数据绑定支持:读写XML支持、读写Json支持
mvc:default-servlet-handler:
对静态资源文件的访问,
将无法mapping到Controller的path 交给default servlet handler处理
context:annotation-config:
开启注解处理器
context:component-scan:
自动扫描包,注册 @Controller @Service @Repository @Component 等注解的类成为 bean
二、详细使用及代码
1.solution/pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 5 <groupId>lm.solution</groupId> 6 <artifactId>solution</artifactId> 7 <version>1.0-SNAPSHOT</version> 8 <modules> 9 <module>webapi</module> 10 <module>web</module> 11 <module>common</module> 12 <module>service</module> 13 <module>mapper</module> 14 <module>pojo</module> 15 <module>console</module> 16 <module>webservice</module> 17 </modules> 18 <packaging>pom</packaging> 19 20 <name>solution</name> 21 <url>http://maven.apache.org</url> 22 23 <properties> 24 <!--编译字符集--> 25 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 26 <!-- spring --> 27 <spring.version>4.3.13.RELEASE</spring.version> 28 <!-- log4j --> 29 <slf4j.version>1.7.7</slf4j.version> 30 <log4j.version>1.2.17</log4j.version> 31 <!-- jackson --> 32 <jackson.version>2.9.4</jackson.version> 33 <!-- junit --> 34 <junit.version>4.12</junit.version> 35 <!-- aspectj --> 36 <aspectj.version>1.8.13</aspectj.version> 37 <!-- cglib --> 38 <cglib.version>3.1</cglib.version> 39 <!-- mybatis --> 40 <mybatis.version>3.4.5</mybatis.version> 41 <!-- mybatis-spring --> 42 <mybatisSpring.version>1.3.1</mybatisSpring.version> 43 <!--mysql-connector--> 44 <mysql.version>5.1.34</mysql.version> 45 <!--druid--> 46 <druid.version>1.0.5</druid.version> 47 <!--javax.servlet--> 48 <javaxServlet.version>3.0.1</javaxServlet.version> 49 <!--jsp-api--> 50 <jspApi.version>2.2</jspApi.version> 51 <!--jstl--> 52 <jstl.version>1.2</jstl.version> 53 <!--json-lib--> 54 <jsonLib.version>2.1</jsonLib.version> 55 <!--jackson old--> 56 <jacksonOld.version>1.9.13</jacksonOld.version> 57 <!--dom4j--> 58 <dom4j.version>1.6.1</dom4j.version> 59 <!--ehcache core--> 60 <ehcacheCore.version>2.6.9</ehcacheCore.version> 61 <!--ehcache web--> 62 <ehcacheWeb.version>2.0.4</ehcacheWeb.version> 63 <!--commons-fileupload--> 64 <commonsFileupload.version>1.3.1</commonsFileupload.version> 65 <!--commons-io--> 66 <commonsIo.version>2.4</commonsIo.version> 67 <!--commons-codec--> 68 <commonsCodec.version>1.9</commonsCodec.version> 69 <!--commons-collections4--> 70 <commonsCollections4.version>4.0</commonsCollections4.version> 71 <!--commons-beanutils--> 72 <commonsBeanutils.version>1.7.0</commonsBeanutils.version> 73 <!--freemarker--> 74 <freemarker.version>2.3.19</freemarker.version> 75 <!-- poi poi-ooxml --> 76 <poi.version>3.9</poi.version> 77 <!--org.apache.httpcomponents--> 78 <httpcore.version>4.4.8</httpcore.version> 79 <httpclient.version>4.5.4</httpclient.version> 80 <!-- jaxws-rt --> 81 <jaxwsRt.version>2.3.0</jaxwsRt.version> 82 <!-- jedis --> 83 <jedis.version>2.9.0</jedis.version> 84 <!-- rabbitmq --> 85 <amqpClient.version>5.1.2</amqpClient.version> 86 <!--fastjson--> 87 <fastjson.version>1.2.46</fastjson.version> 88 <!-- jsr250 --> 89 <jsr250.version>1.0</jsr250.version> 90 </properties> 91 92 <dependencies> 93 <!--单元测试依赖 --> 94 <dependency> 95 <groupId>junit</groupId> 96 <artifactId>junit</artifactId> 97 <version>RELEASE</version> 98 <!--test 说明这个包的存活是在test周期,也就是发布时将不包含这个jar包--> 99 <scope>test</scope> 100 </dependency> 101 <!--spring单元测试依赖 --> 102 <dependency> 103 <groupId>org.springframework</groupId> 104 <artifactId>spring-test</artifactId> 105 <version>${spring.version}</version> 106 <scope>test</scope> 107 </dependency> 108 <!-- spring --> 109 <dependency> 110 <groupId>org.springframework</groupId> 111 <!-- 因依赖 会自动引入 spring-aop spring-beans spring-core spring-expression 四个包 --> 112 <artifactId>spring-context</artifactId> 113 <version>${spring.version}</version> 114 </dependency> 115 <dependency> 116 <groupId>org.springframework</groupId> 117 <artifactId>spring-context-support</artifactId> 118 <version>${spring.version}</version> 119 </dependency> 120 <dependency> 121 <groupId>org.springframework</groupId> 122 <artifactId>spring-aspects</artifactId> 123 <version>${spring.version}</version> 124 </dependency> 125 <dependency> 126 <groupId>org.springframework</groupId> 127 <artifactId>spring-tx</artifactId> 128 <version>${spring.version}</version> 129 </dependency> 130 <dependency> 131 <groupId>org.springframework</groupId> 132 <artifactId>spring-jdbc</artifactId> 133 <version>${spring.version}</version> 134 </dependency> 135 <!-- aspectj AOP --> 136 <dependency> 137 <groupId>org.aspectj</groupId> 138 <artifactId>aspectjrt</artifactId> 139 <version>${aspectj.version}</version> 140 </dependency> 141 <dependency> 142 <groupId>org.aspectj</groupId> 143 <artifactId>aspectjweaver</artifactId> 144 <version>${aspectj.version}</version> 145 </dependency> 146 <!-- 映入JSON jackson --> 147 <dependency> 148 <groupId>com.fasterxml.jackson.core</groupId> 149 <artifactId>jackson-annotations</artifactId> 150 <version>${jackson.version}</version> 151 </dependency> 152 <dependency> 153 <groupId>com.fasterxml.jackson.core</groupId> 154 <artifactId>jackson-databind</artifactId> 155 <version>${jackson.version}</version> 156 </dependency> 157 <dependency> 158 <groupId>com.fasterxml.jackson.core</groupId> 159 <artifactId>jackson-core</artifactId> 160 <version>${jackson.version}</version> 161 </dependency> 162 <dependency> 163 <groupId>com.fasterxml.jackson.dataformat</groupId> 164 <artifactId>jackson-dataformat-xml</artifactId> 165 <version>${jackson.version}</version> 166 </dependency> 167 <!-- 日志文件管理包 --> 168 <dependency> 169 <groupId>log4j</groupId> 170 <artifactId>log4j</artifactId> 171 <version>${log4j.version}</version> 172 </dependency> 173 <dependency> 174 <groupId>org.slf4j</groupId> 175 <artifactId>slf4j-api</artifactId> 176 <version>${slf4j.version}</version> 177 </dependency> 178 <dependency> 179 <groupId>org.slf4j</groupId> 180 <artifactId>slf4j-log4j12</artifactId> 181 <version>${slf4j.version}</version> 182 </dependency> 183 </dependencies> 184 185 <dependencyManagement> 186 <dependencies> 187 <!--spring web--> 188 <dependency> 189 <groupId>org.springframework</groupId> 190 <artifactId>spring-web</artifactId> 191 <version>${spring.version}</version> 192 </dependency> 193 <dependency> 194 <groupId>org.springframework</groupId> 195 <artifactId>spring-webmvc</artifactId> 196 <version>${spring.version}</version> 197 </dependency> 198 <!--cglib--> 199 <dependency> 200 <groupId>cglib</groupId> 201 <artifactId>cglib</artifactId> 202 <version>${cglib.version}</version> 203 </dependency> 204 <!-- mybatis --> 205 <dependency> 206 <groupId>org.mybatis</groupId> 207 <artifactId>mybatis</artifactId> 208 <version>${mybatis.version}</version> 209 </dependency> 210 <dependency> 211 <groupId>org.mybatis</groupId> 212 <artifactId>mybatis-spring</artifactId> 213 <version>${mybatisSpring.version}</version> 214 </dependency> 215 <!-- Mysql数据库驱动包 --> 216 <dependency> 217 <groupId>mysql</groupId> 218 <artifactId>mysql-connector-java</artifactId> 219 <version>${mysql.version}</version> 220 </dependency> 221 <!-- connection pool --> 222 <dependency> 223 <groupId>com.alibaba</groupId> 224 <artifactId>druid</artifactId> 225 <version>${druid.version}</version> 226 <!--<scope>runtime</scope>--> 227 </dependency> 228 <!--servlet--> 229 <dependency> 230 <groupId>javax.servlet</groupId> 231 <artifactId>javax.servlet-api</artifactId> 232 <version>${javaxServlet.version}</version> 233 <scope>provided</scope> 234 </dependency> 235 <dependency> 236 <groupId>javax.servlet.jsp</groupId> 237 <artifactId>jsp-api</artifactId> 238 <version>${jspApi.version}</version> 239 <scope>provided</scope> 240 </dependency> 241 <dependency> 242 <groupId>javax.servlet</groupId> 243 <artifactId>jstl</artifactId> 244 <version>${jstl.version}</version> 245 </dependency> 246 <!-- 映入JSON lib --> 247 <dependency> 248 <groupId>net.sf.json-lib</groupId> 249 <artifactId>json-lib</artifactId> 250 <version>${jsonLib.version}</version> 251 <classifier>jdk15</classifier> 252 </dependency> 253 <!-- jackson old --> 254 <dependency> 255 <groupId>org.codehaus.jackson</groupId> 256 <artifactId>jackson-core-asl</artifactId> 257 <version>${jacksonOld.version}</version> 258 </dependency> 259 <dependency> 260 <groupId>org.codehaus.jackson</groupId> 261 <artifactId>jackson-mapper-asl</artifactId> 262 <version>${jacksonOld.version}</version> 263 </dependency> 264 <!-- 用dom4j解析xml文件 --> 265 <dependency> 266 <groupId>dom4j</groupId> 267 <artifactId>dom4j</artifactId> 268 <version>${dom4j.version}</version> 269 </dependency> 270 <!-- ehcache --> 271 <dependency> 272 <groupId>net.sf.ehcache</groupId> 273 <artifactId>ehcache-core</artifactId> 274 <version>${ehcacheCore.version}</version> 275 </dependency> 276 <dependency> 277 <groupId>net.sf.ehcache</groupId> 278 <artifactId>ehcache-web</artifactId> 279 <version>${ehcacheWeb.version}</version> 280 </dependency> 281 <!-- 上传组件包 --> 282 <dependency> 283 <groupId>commons-fileupload</groupId> 284 <artifactId>commons-fileupload</artifactId> 285 <version>${commonsFileupload.version}</version> 286 </dependency> 287 <dependency> 288 <groupId>commons-io</groupId> 289 <artifactId>commons-io</artifactId> 290 <version>${commonsIo.version}</version> 291 </dependency> 292 <dependency> 293 <groupId>commons-codec</groupId> 294 <artifactId>commons-codec</artifactId> 295 <version>${commonsCodec.version}</version> 296 </dependency> 297 <dependency> 298 <groupId>org.apache.commons</groupId> 299 <artifactId>commons-collections4</artifactId> 300 <version>${commonsCollections4.version}</version> 301 </dependency> 302 <dependency> 303 <groupId>org.apache.commons</groupId> 304 <artifactId>commons-lang3</artifactId> 305 <version>3.3.2</version> 306 </dependency> 307 <!-- commons-beanutils --> 308 <dependency> 309 <groupId>commons-beanutils</groupId> 310 <artifactId>commons-beanutils</artifactId> 311 <version>${commonsBeanutils.version}</version> 312 <exclusions> 313 <exclusion> 314 <groupId>commons-logging</groupId> 315 <artifactId>commons-logging</artifactId> 316 </exclusion> 317 </exclusions> 318 </dependency> 319 <!-- freemarker --> 320 <dependency> 321 <groupId>org.freemarker</groupId> 322 <artifactId>freemarker</artifactId> 323 <version>${freemarker.version}</version> 324 </dependency> 325 <!-- poi --> 326 <dependency> 327 <groupId>org.apache.poi</groupId> 328 <artifactId>poi</artifactId> 329 <version>${poi.version}</version> 330 </dependency> 331 <dependency> 332 <groupId>org.apache.poi</groupId> 333 <artifactId>poi-ooxml</artifactId> 334 <version>${poi.version}</version> 335 </dependency> 336 <!-- org.apache.httpcomponents --> 337 <dependency> 338 <groupId>org.apache.httpcomponents</groupId> 339 <artifactId>httpcore</artifactId> 340 <version>${httpcore.version}</version> 341 </dependency> 342 <dependency> 343 <groupId>org.apache.httpcomponents</groupId> 344 <artifactId>httpclient</artifactId> 345 <version>${httpclient.version}</version> 346 </dependency> 347 <!-- com.sun.xml.ws/jaxws-rt --> 348 <dependency> 349 <groupId>com.sun.xml.ws</groupId> 350 <artifactId>jaxws-rt</artifactId> 351 <version>${jaxwsRt.version}</version> 352 </dependency> 353 <!-- redis.clients/jedis --> 354 <dependency> 355 <groupId>redis.clients</groupId> 356 <artifactId>jedis</artifactId> 357 <version>${jedis.version}</version> 358 </dependency> 359 <!-- com.rabbitmq/amqp-client --> 360 <dependency> 361 <groupId>com.rabbitmq</groupId> 362 <artifactId>amqp-client</artifactId> 363 <version>${amqpClient.version}</version> 364 </dependency> 365 <!-- com.alibaba/fastjson --> 366 <dependency> 367 <groupId>com.alibaba</groupId> 368 <artifactId>fastjson</artifactId> 369 <version>${fastjson.version}</version> 370 </dependency> 371 <!-- javax.annotation/jsr250-api --> 372 <dependency> 373 <groupId>javax.annotation</groupId> 374 <artifactId>jsr250-api</artifactId> 375 <version>${jsr250.version}</version> 376 </dependency> 377 </dependencies> 378 </dependencyManagement> 379 380 <!--<!– tomcat8-maven-plugin 中央仓没有,所以配置 plugin 仓地址 –>--> 381 <!--<pluginRepositories>--> 382 <!--<pluginRepository>--> 383 <!--<id>alfresco-public</id>--> 384 <!--<url>https://artifacts.alfresco.com/nexus/content/groups/public</url>--> 385 <!--</pluginRepository>--> 386 <!--<pluginRepository>--> 387 <!--<id>alfresco-public-snapshots</id>--> 388 <!--<url>https://artifacts.alfresco.com/nexus/content/groups/public-snapshots</url>--> 389 <!--<snapshots>--> 390 <!--<enabled>true</enabled>--> 391 <!--<updatePolicy>daily</updatePolicy>--> 392 <!--</snapshots>--> 393 <!--</pluginRepository>--> 394 <!--<pluginRepository>--> 395 <!--<id>beardedgeeks-releases</id>--> 396 <!--<url>http://beardedgeeks.googlecode.com/svn/repository/releases</url>--> 397 <!--</pluginRepository>--> 398 <!--</pluginRepositories>--> 399 400 <build> 401 <plugins> 402 <!-- java编译插件 --> 403 <plugin> 404 <groupId>org.apache.maven.plugins</groupId> 405 <artifactId>maven-compiler-plugin</artifactId> 406 <version>3.2</version> 407 <configuration> 408 <source>1.8</source> 409 <target>1.8</target> 410 <encoding>UTF-8</encoding> 411 </configuration> 412 </plugin> 413 </plugins> 414 415 <pluginManagement> 416 <plugins> 417 <!-- 配置Tomcat插件 --> 418 <plugin> 419 <groupId>org.apache.tomcat.maven</groupId> 420 <artifactId>tomcat8-maven-plugin</artifactId> 421 <version>3.0-r1756463</version> 422 </plugin> 423 </plugins> 424 </pluginManagement> 425 </build> 426 427 </project>
2.solution/webapi/pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 4 <parent> 5 <artifactId>solution</artifactId> 6 <groupId>lm.solution</groupId> 7 <version>1.0-SNAPSHOT</version> 8 </parent> 9 10 <modelVersion>4.0.0</modelVersion> 11 <groupId>lm.solution</groupId> 12 <artifactId>webapi</artifactId> 13 <packaging>war</packaging> 14 <version>1.0-SNAPSHOT</version> 15 <name>webapi Maven Webapp</name> 16 <url>http://maven.apache.org</url> 17 18 <dependencies> 19 <!--Module--> 20 <dependency> 21 <groupId>lm.solution</groupId> 22 <artifactId>service</artifactId> 23 <version>1.0-SNAPSHOT</version> 24 </dependency> 25 <dependency> 26 <groupId>lm.solution</groupId> 27 <artifactId>common</artifactId> 28 <version>1.0-SNAPSHOT</version> 29 </dependency> 30 31 <!--Libary--> 32 <dependency> 33 <groupId>cglib</groupId> 34 <artifactId>cglib</artifactId> 35 </dependency> 36 37 <!--mybatis spring 插件 --> 38 <dependency> 39 <groupId>org.mybatis</groupId> 40 <artifactId>mybatis-spring</artifactId> 41 </dependency> 42 <dependency> 43 <groupId>javax.servlet</groupId> 44 <artifactId>javax.servlet-api</artifactId> 45 <scope>provided</scope> 46 </dependency> 47 <dependency> 48 <groupId>javax.servlet.jsp</groupId> 49 <artifactId>jsp-api</artifactId> 50 <scope>provided</scope> 51 </dependency> 52 <dependency> 53 <groupId>javax.servlet</groupId> 54 <artifactId>jstl</artifactId> 55 </dependency> 56 <!-- 映入JSON lib --> 57 <dependency> 58 <groupId>net.sf.json-lib</groupId> 59 <artifactId>json-lib</artifactId> 60 <classifier>jdk15</classifier> 61 </dependency> 62 <!-- 用dom4j解析xml文件 --> 63 <dependency> 64 <groupId>dom4j</groupId> 65 <artifactId>dom4j</artifactId> 66 </dependency> 67 <!-- ehcache --> 68 <dependency> 69 <groupId>net.sf.ehcache</groupId> 70 <artifactId>ehcache-core</artifactId> 71 </dependency> 72 <dependency> 73 <groupId>net.sf.ehcache</groupId> 74 <artifactId>ehcache-web</artifactId> 75 </dependency> 76 <!-- 上传组件包 --> 77 <dependency> 78 <groupId>commons-fileupload</groupId> 79 <artifactId>commons-fileupload</artifactId> 80 </dependency> 81 <dependency> 82 <groupId>commons-io</groupId> 83 <artifactId>commons-io</artifactId> 84 </dependency> 85 <dependency> 86 <groupId>commons-codec</groupId> 87 <artifactId>commons-codec</artifactId> 88 </dependency> 89 <dependency> 90 <groupId>org.apache.commons</groupId> 91 <artifactId>commons-collections4</artifactId> 92 </dependency> 93 <dependency> 94 <groupId>org.apache.commons</groupId> 95 <artifactId>commons-lang3</artifactId> 96 </dependency> 97 <!-- commons-beanutils --> 98 <dependency> 99 <groupId>commons-beanutils</groupId> 100 <artifactId>commons-beanutils</artifactId> 101 <exclusions> 102 <exclusion> 103 <groupId>commons-logging</groupId> 104 <artifactId>commons-logging</artifactId> 105 </exclusion> 106 </exclusions> 107 </dependency> 108 <!-- freemarker --> 109 <dependency> 110 <groupId>org.freemarker</groupId> 111 <artifactId>freemarker</artifactId> 112 </dependency> 113 114 </dependencies> 115 116 <build> 117 <finalName>webapi</finalName> 118 119 <plugins> 120 <plugin> 121 <groupId>org.apache.tomcat.maven</groupId> 122 <artifactId>tomcat8-maven-plugin</artifactId> 123 </plugin> 124 </plugins> 125 </build> 126 </project>
3.solution/mapper/pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <parent> 4 <artifactId>solution</artifactId> 5 <groupId>lm.solution</groupId> 6 <version>1.0-SNAPSHOT</version> 7 </parent> 8 <modelVersion>4.0.0</modelVersion> 9 10 <groupId>lm.solution</groupId> 11 <artifactId>mapper</artifactId> 12 <version>1.0-SNAPSHOT</version> 13 <packaging>jar</packaging> 14 15 <name>mapper</name> 16 <url>http://maven.apache.org</url> 17 18 <properties> 19 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 20 </properties> 21 22 <dependencies> 23 <!--Module--> 24 <dependency> 25 <groupId>lm.solution</groupId> 26 <artifactId>pojo</artifactId> 27 <version>1.0-SNAPSHOT</version> 28 </dependency> 29 30 <!--Libary--> 31 <dependency><!-- mybatis核心包 --> 32 <groupId>org.mybatis</groupId> 33 <artifactId>mybatis</artifactId> 34 </dependency> 35 <dependency><!-- Mysql数据库驱动包 --> 36 <groupId>mysql</groupId> 37 <artifactId>mysql-connector-java</artifactId> 38 </dependency> 39 <dependency><!-- connection pool --> 40 <groupId>com.alibaba</groupId> 41 <artifactId>druid</artifactId> 42 <scope>runtime</scope> 43 </dependency> 44 </dependencies> 45 </project>
4.web.xml
1 <!DOCTYPE web-app PUBLIC 2 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 3 "http://java.sun.com/dtd/web-app_2_3.dtd" > 4 5 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 6 xmlns="http://java.sun.com/xml/ns/javaee" 7 xsi:schemaLocation=" 8 http://java.sun.com/xml/ns/javaee 9 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 10 id="WebApp_ID" 11 version="3.0"> 12 13 <context-param> 14 <description>配置Spring配置文件路径</description> 15 <param-name>contextConfigLocation</param-name> 16 <param-value>classpath:spring-context.xml</param-value><!-- 如果是监听多个文件,可用‘,’隔开 --> 17 </context-param> 18 <context-param><!--log4j配置文件加载--> 19 <param-name>log4jConfigLocation</param-name> 20 <param-value>classpath:log4j.properties</param-value> 21 </context-param> 22 <context-param><!--启动一个watchdog线程每1800秒扫描一下log4j配置文件的变化--> 23 <param-name>log4jRefreshInterval</param-name> 24 <param-value>1800000</param-value> 25 </context-param> 26 27 <listener> 28 <description>配置Spring上下文监听器</description> 29 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 30 </listener> 31 <listener> 32 <description>Introspector缓存清除监听器</description> 33 <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 34 </listener> 35 <listener> 36 <description>request监听器</description> 37 <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 38 </listener> 39 <listener><!--spring log4j监听器--> 40 <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 41 </listener> 42 43 <filter><!-- 配置Spring字符编码过滤器 --> 44 <filter-name>encodingFilter</filter-name> 45 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 46 <init-param> 47 <param-name>encoding</param-name> 48 <param-value>UTF-8</param-value> 49 </init-param> 50 <init-param> 51 <param-name>forceEncoding</param-name> 52 <param-value>true</param-value> 53 </init-param> 54 </filter> 55 <filter-mapping> 56 <filter-name>encodingFilter</filter-name> 57 <url-pattern>/*</url-pattern> 58 </filter-mapping> 59 60 <servlet><!-- Spring MVC 核心控制器 DispatcherServlet 配置 --> 61 <servlet-name>SpringMVC</servlet-name> 62 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 63 <init-param><!--以下init-param是自定义SpringMVC的配置文件的位置 --> 64 <param-name>contextConfigLocation</param-name> 65 <param-value>classpath:spring-mvc.xml</param-value> 66 </init-param> 67 <load-on-startup>1</load-on-startup> 68 </servlet> 69 <servlet-mapping><!-- 拦截设置 --> 70 <servlet-name>SpringMVC</servlet-name> 71 <url-pattern>/</url-pattern> 72 </servlet-mapping> 73 74 <session-config><!-- session 时间 --> 75 <session-timeout>30</session-timeout> 76 </session-config> 77 78 <welcome-file-list> 79 <welcome-file>/WEB-INF/index.html</welcome-file> 80 </welcome-file-list> 81 82 </web-app>
5.spring-mvc.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xmlns:mvc="http://www.springframework.org/schema/mvc" 7 xsi:schemaLocation=" 8 http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 10 http://www.springframework.org/schema/context 11 http://www.springframework.org/schema/context/spring-context-4.0.xsd 12 http://www.springframework.org/schema/mvc 13 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 14 15 <!-- 16 启用spring mvc 注解, 默认的注解映射的支持 17 自动注册 RequestMappingHandlerMapping RequestMappingHandlerAdapter 两个 bean 18 这是 Spring mvc 分发请求所必须的 19 并提供了数据绑定支持 20 读写XML支持 21 读写Json支持 22 --> 23 <mvc:annotation-driven/> 24 <!-- 25 对静态资源文件的访问, 26 将无法mapping到Controller的path 27 交给default servlet handler处理 28 --> 29 <mvc:default-servlet-handler /> 30 31 <context:annotation-config/><!-- 开启注解处理器 --> 32 <context:component-scan base-package="lm.solution"/>
<!-- 自动扫描包,注册 @Controller @Service @Repository @Component 等注解的类成为 bean --> 33 34 <bean id="mappingJacksonHttpMessageConverter" 35 class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<!-- 支持返回json(避免IE在ajax请求时,返回json出现下载文件 ) --> 36 <property name="supportedMediaTypes"> 37 <list> 38 <value>text/html;charset=UTF-8</value> 39 <value>text/json;charset=UTF-8</value> 40 <value>application/json;charset=UTF-8</value> 41 </list> 42 </property> 43 </bean> 44 45 46 47 </beans>
6.spring-context.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xmlns:aop="http://www.springframework.org/schema/aop" 7 xsi:schemaLocation=" 8 http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 10 http://www.springframework.org/schema/context 11 http://www.springframework.org/schema/context/spring-context-4.0.xsd 12 http://www.springframework.org/schema/tx 13 http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 14 http://www.springframework.org/schema/aop 15 http://www.springframework.org/schema/aop/spring-aop-4.0.xsd" 16 default-lazy-init="true"> 17 18 <context:property-placeholder location="classpath:dbconfig.properties" /> 19 20 <!-- dataSource 配置数据源 --> 21 <bean id="dataSource" 22 class="com.alibaba.druid.pool.DruidDataSource" 23 init-method="init" 24 destroy-method="close"> 25 <!-- 基本属性 url、user、password --> 26 <property name="url" value="${jdbc.url}" /> 27 <property name="username" value="${jdbc.username}" /> 28 <property name="password" value="${jdbc.password}" /> 29 <!-- 配置初始化大小、最小、最大 --> 30 <property name="initialSize" value="1" /> 31 <property name="minIdle" value="1" /> 32 <property name="maxActive" value="20" /> 33 <!-- 配置获取连接等待超时的时间 --> 34 <property name="maxWait" value="60000" /> 35 <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> 36 <property name="timeBetweenEvictionRunsMillis" value="60000" /> 37 <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> 38 <property name="minEvictableIdleTimeMillis" value="300000" /> 39 <property name="validationQuery" value="SELECT 'x'" /> 40 <property name="testWhileIdle" value="true" /> 41 <property name="testOnBorrow" value="false" /> 42 <property name="testOnReturn" value="false" /> 43 <!-- 打开PSCache,并且指定每个连接上PSCache的大小 --> 44 <property name="poolPreparedStatements" value="false" /> 45 <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> 46 <!-- 配置监控统计拦截的filters --> 47 <property name="filters" value="stat" /> 48 </bean> 49 50 <!-- mybatis和spring完美整合,不需要mybatis的配置映射文件 --> 51 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 52 <property name="dataSource" ref="dataSource"/> 53 </bean> 54 55 <!-- DAO接口所在包名,Spring会自动查找其下的类 --> 56 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 57 <property name="basePackage" value="lm.solution"/> 58 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 59 </bean> 60 61 <!-- 对dataSource 数据源进行事务管理 --> 62 <bean id="transactionManager" 63 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 64 <property name="dataSource" ref="dataSource"></property> 65 </bean> 66 67 <!-- 事务管理 通知 --> 68 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 69 <tx:attributes> 70 <!-- 对insert,create,update,modify,delete,remove 开头的方法进行事务管理,只要有异常就回滚 --> 71 <tx:method name="insert*" propagation="REQUIRED" rollback-for="java.lang.Throwable" read-only="false"/> 72 <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Throwable" read-only="false"/> 73 <tx:method name="create*" propagation="REQUIRED" rollback-for="java.lang.Throwable" read-only="false"/> 74 <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Throwable" read-only="false"/> 75 <tx:method name="modify*" propagation="REQUIRED" rollback-for="java.lang.Throwable" read-only="false"/> 76 <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Throwable" read-only="false"/> 77 <tx:method name="remove*" propagation="REQUIRED" rollback-for="java.lang.Throwable" read-only="false"/> 78 <!-- find,get,select,count开头的方法,开启只读,提高数据库访问性能 --> 79 <tx:method name="find*" read-only="true" /> 80 <tx:method name="get*" read-only="true" /> 81 <tx:method name="select*" read-only="true" /> 82 <tx:method name="count*" read-only="true" /> 83 <!-- 对其他方法 使用默认的事务管理 --> 84 <tx:method name="*" /> 85 </tx:attributes> 86 </tx:advice> 87 88 <!-- 配置 Annotation 驱动,扫描@Transactional注解的类定义事务 --> 89 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> 90 91 <!-- 事务 aop 配置 --> 92 <aop:config> 93 <aop:pointcut id="serviceMethods" expression="execution(public * lm.solution.service.mysql.impl..*(..))" /> 94 <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" /> 95 </aop:config> 96 97 <!-- 开启基于@AspectJ切面的注解处理器 --> 98 <aop:aspectj-autoproxy proxy-target-class="true" /> 99 100 </beans>
7.dbconfig.properties
1 #MySQL 2 jdbc.driver=com.mysql.jdbc.Driver 3 jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true 4 jdbc.username=root 5 jdbc.password=liumeng
8.log4j.properties
1 #日志输出级别 2 log4j.rootLogger=debug,stdout,D,E 3 4 #设置stdout的日志输出控制台 5 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 #输出日志到控制台的方式,默认为System.out 7 log4j.appender.stdout.Target = System.out 8 #设置使用灵活布局 9 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 10 #灵活定义输出格式 11 log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} -[%p] method:[%c (%rms)] - %m%n 12 13 #每天产生一个日志文件 14 log4j.appender.D=org.apache.log4j.DailyRollingFileAppender 15 #设置的输出日志 16 log4j.appender.D.File=F:/ideaSpace/springmvc/logs/log.txt 17 #设置的日志最大限制 18 log4j.appender.D.MaxFileSize=6000KB 19 #最多只保存20个备份文件 20 log4j.appender.D.MaxBackupIndex=20 21 #输出INFO级别以上的日志 22 og4j.appender.D.Threshold=debug 23 log4j.appender.D.Append = true 24 log4j.appender.D.ImmediateFlush = true 25 #log4j.appender.D.DatePattern ='.'yyyy-MM-dd 26 #设置使用灵活布局 27 log4j.appender.D.layout=org.apache.log4j.PatternLayout 28 #灵活定义输出格式 29 log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} -[%p] method:[%l (%rms)] - %m%n 30 31 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender 32 log4j.appender.E.File =F:/ideaSpace/springmvc/logs/error/error.txt 33 log4j.appender.E.Append = true 34 log4j.appender.E.Threshold = ERROR 35 #log4j.appender.E.DatePattern = '_'yyyyMMdd'.log' 36 log4j.appender.E.layout = org.apache.log4j.PatternLayout 37 log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS} -[%p] method:[%l (%rms)] - %m%n
9.RESTfulController.java
1 package lm.solution.webapi; 2 3 import lm.solution.pojo.entity.User; 4 import lm.solution.service.mysql.UserService; 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.beans.factory.annotation.Qualifier; 7 import org.springframework.http.HttpHeaders; 8 import org.springframework.http.HttpStatus; 9 import org.springframework.http.MediaType; 10 import org.springframework.http.ResponseEntity; 11 import org.springframework.web.bind.annotation.RestController; 12 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.RequestMethod; 14 import org.springframework.web.bind.annotation.PathVariable; 15 import org.springframework.web.bind.annotation.RequestBody; 16 import org.springframework.web.util.UriComponentsBuilder; 17 18 import java.util.List; 19 /** 20 * @RestController 是一个组合注解,相当于 @Controller 与 @ResponseBody 的结合体 21 * */ 22 @RestController 23 @RequestMapping(value = "/api") 24 public class RESTfulController { 25 26 @Autowired 27 @Qualifier("userService") 28 private UserService userService; 29 30 //-------------------Retrieve All Users-------------------------------------------------------- 31 @RequestMapping( 32 value = "/user", 33 method = RequestMethod.GET, 34 produces={"application/json;;charset=UTF-8"}) 35 public ResponseEntity<List<User>> listAllUsers() { 36 37 List<User> users = userService.findAllUsers(); 38 if (users.isEmpty()) { 39 return new ResponseEntity<List<User>>(HttpStatus.NO_CONTENT); 40 } 41 return new ResponseEntity<List<User>>(users, HttpStatus.OK); 42 43 } 44 45 //-------------------Retrieve Single User-------------------------------------------------------- 46 @RequestMapping( 47 value = "/user/{id}", 48 method = RequestMethod.GET, 49 produces = MediaType.APPLICATION_JSON_VALUE) 50 public ResponseEntity<User> getUser(@PathVariable("id") long id) { 51 52 System.out.println("Fetching User with id " + id); 53 54 User user = userService.findById(id); 55 56 if (user == null) { 57 System.out.println("User with id " + id + " not found"); 58 return new ResponseEntity<User>(HttpStatus.NOT_FOUND); 59 } 60 61 return new ResponseEntity<User>(user, HttpStatus.OK); 62 63 } 64 65 //-------------------Create a User-------------------------------------------------------- 66 @RequestMapping( 67 value = "/user", 68 method = RequestMethod.POST) 69 public ResponseEntity<Void> createUser( 70 @RequestBody User user, 71 UriComponentsBuilder ucBuilder) { 72 73 System.out.println("Creating User " + user.getName()); 74 75 if(userService.isUserExist(user)){ 76 System.out.println("A User with name " + user.getName() + " already exist"); 77 return new ResponseEntity<Void>(HttpStatus.CONFLICT); 78 } 79 80 userService.saveUser(user); 81 82 HttpHeaders headers=new HttpHeaders(); 83 headers.setLocation(ucBuilder.path("/api/user/{id}").buildAndExpand(user.getId()).toUri()); 84 return new ResponseEntity<Void>(headers,HttpStatus.CREATED); 85 86 } 87 88 //------------------- Update a User -------------------------------------------------------- 89 @RequestMapping(value = "/user/{id}",method = RequestMethod.PUT) 90 public ResponseEntity<User> updateUser( 91 @PathVariable("id") long id, 92 @RequestBody User user){ 93 94 System.out.println("Updating User " + id); 95 96 User currentUser=userService.findById(id); 97 98 if(currentUser==null){ 99 System.out.println("User with id " + id + " not found"); 100 return new ResponseEntity<User>(HttpStatus.NOT_FOUND); 101 } 102 103 currentUser.setName(user.getName()); 104 currentUser.setAge(user.getAge()); 105 currentUser.setSalary(user.getSalary()); 106 107 userService.updateUser(user); 108 return new ResponseEntity<User>(currentUser, HttpStatus.OK); 109 110 } 111 112 //------------------- Delete a User -------------------------------------------------------- 113 @RequestMapping(value = "/user/{id}",method = RequestMethod.DELETE) 114 public ResponseEntity<User> deleteUser(@PathVariable("id") long id){ 115 116 System.out.println("Fetching & Deleting User with id " + id); 117 118 User user=userService.findById(id); 119 if(user==null){ 120 System.out.println("Unable to delete. User with id " + id + " not found"); 121 return new ResponseEntity<User>(HttpStatus.NOT_FOUND); 122 } 123 124 userService.deleteUser(id); 125 return new ResponseEntity<User>(HttpStatus.NO_CONTENT); 126 127 } 128 129 //------------------- Delete All Users -------------------------------------------------------- 130 @RequestMapping(value="/user",method = RequestMethod.DELETE) 131 public ResponseEntity<User> deleteAllUsers() { 132 133 System.out.println("Deleting All Users"); 134 135 userService.deleteAllUsers(); 136 return new ResponseEntity<User>(HttpStatus.NO_CONTENT); 137 138 } 139 140 }
蒙
2018-05-13 18:55 周日