zoukankan      html  css  js  c++  java
  • Spring MVC 的 XML 配置方式

    索引:

    目录索引

    参看代码 GitHub:

    solution/pom.xml

    solution/webapi/pom.xml

    solution/mapper/pom.xml

    web.xml

    spring-mvc.xml

    spring-context.xml

    dbconfig.properties

    log4j.properties

    RESTfulController.java

    一、要点讲解

      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     <!--&lt;!&ndash; tomcat8-maven-plugin 中央仓没有,所以配置 plugin 仓地址 &ndash;&gt;-->
    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 周日

  • 相关阅读:
    DNS
    报文组成
    简单的转义字符
    普通字符
    正则表达式介绍
    Mybatis_HelloWorld
    Mybatis介绍
    基本概念
    EGit应用
    EGit
  • 原文地址:https://www.cnblogs.com/Meng-NET/p/9032965.html
Copyright © 2011-2022 走看看