• km之路--009 spring mvc 起手


    一个最简单的HelloWorld

    目录结构

    pom

      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     <modelVersion>4.0.0</modelVersion>
      4     <groupId>com.laolang.km</groupId>
      5     <artifactId>km-blog</artifactId>
      6     <packaging>war</packaging>
      7     <version>0.0.1-SNAPSHOT</version>
      8     <!-- 集中定义依赖版本号 -->
      9     <properties>
     10         <!-- test -->
     11         <junit.version>4.10</junit.version>
     12         <hamcrest.version>1.3</hamcrest.version>
     13 
     14 
     15         <!-- java ee -->
     16         <javaee-api.version>7.0</javaee-api.version>
     17         <servlet-api.version>3.0.1</servlet-api.version>
     18         <persistence-api.version>1.0</persistence-api.version>
     19         <jstl.version>1.2</jstl.version>
     20         <standard.version>1.1.2</standard.version>
     21 
     22 
     23         <!-- spring -->
     24         <spring.version>4.2.0.RELEASE</spring.version>
     25 
     26         <!-- mybatis -->
     27         <mybatis.version>3.2.8</mybatis.version>
     28         <mybatis.spring.version>1.2.2</mybatis.spring.version>
     29         <mybatis.paginator.version>1.2.15</mybatis.paginator.version>
     30         <pagehelper.version>4.0.3</pagehelper.version>
     31         <tk.mapper.version>3.2.2</tk.mapper.version>
     32 
     33 
     34         <mysql.version>5.1.32</mysql.version>
     35 
     36         <!-- log -->
     37         <slf4j.version>1.7.12</slf4j.version>
     38         <logback.version>1.1.3</logback.version>
     39         <logback.ext.version>0.1.2</logback.ext.version>
     40 
     41         <!-- json -->
     42         <jackson.version>2.4.2</jackson.version>
     43         <jackson.mapper.version>1.9.13</jackson.mapper.version>
     44 
     45         <!-- google -->
     46         <gson.version>2.2.2</gson.version>
     47         <guava.version>18.0</guava.version>
     48 
     49         <!-- alibaba -->
     50         <druid.version>1.0.12</druid.version>
     51 
     52         <!-- ehcache -->
     53         <ehcache.version>2.7.5</ehcache.version>
     54 
     55         <!-- apache -->
     56         <httpclient.version>4.5</httpclient.version>
     57         <commons-lang3.version>3.3.2</commons-lang3.version>
     58         <commons-io.version>2.5</commons-io.version>
     59         <commons-fileupload.version>1.3.2</commons-fileupload.version>
     60         <commons-net.version>3.3</commons-net.version>
     61         <commons-codec.version>1.9</commons-codec.version>
     62         <shiro.version>1.3.2</shiro.version>
     63         <activemq.version>5.12.0</activemq.version>
     64 
     65         <!-- beetl -->
     66         <beetl.version>2.7.5</beetl.version>
     67 
     68         <!-- JSR 303 -->
     69         <hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
     70         <validator-api.version>1.1.0.Final</validator-api.version>
     71 
     72         <joda-time.version>2.5</joda-time.version>
     73     </properties>
     74     <dependencies>
     75         <!-- test -->
     76             <dependency>
     77                 <groupId>junit</groupId>
     78                 <artifactId>junit</artifactId>
     79                 <version>${junit.version}</version>
     80                 <scope>test</scope>
     81             </dependency>
     82             <dependency>
     83                 <groupId>org.hamcrest</groupId>
     84                 <artifactId>hamcrest-all</artifactId>
     85                 <version>${hamcrest.version}</version>
     86                 <scope>test</scope>
     87             </dependency>
     88 
     89             <!-- java ee-->
     90             <dependency>
     91                 <groupId>javax</groupId>
     92                 <artifactId>javaee-api</artifactId>
     93                 <version>${javaee-api.version}</version>
     94                 <scope>provided</scope>
     95             </dependency>
     96             <dependency>
     97                 <groupId>javax.servlet</groupId>
     98                 <artifactId>javax.servlet-api</artifactId>
     99                 <version>${servlet-api.version}</version>
    100                 <scope>provided</scope>
    101             </dependency>
    102             <dependency>
    103                 <groupId>javax.persistence</groupId>
    104                 <artifactId>persistence-api</artifactId>
    105                 <version>1.0</version>
    106             </dependency>
    107             <dependency>
    108                 <groupId>jstl</groupId>
    109                 <artifactId>jstl</artifactId>
    110                 <version>${jstl.version}</version>
    111             </dependency>
    112             <dependency>
    113                 <groupId>taglibs</groupId>
    114                 <artifactId>standard</artifactId>
    115                 <version>${standard.version}</version>
    116             </dependency>
    117 
    118             <!-- Spring -->
    119             <dependency>
    120                 <groupId>org.springframework</groupId>
    121                 <artifactId>spring-context</artifactId>
    122                 <version>${spring.version}</version>
    123             </dependency>
    124             <dependency>
    125                 <groupId>org.springframework</groupId>
    126                 <artifactId>spring-oxm</artifactId>
    127                 <version>${spring.version}</version>
    128             </dependency>
    129             <dependency>
    130                 <groupId>org.springframework</groupId>
    131                 <artifactId>spring-tx</artifactId>
    132                 <version>${spring.version}</version>
    133             </dependency>
    134             <dependency>
    135                 <groupId>org.springframework</groupId>
    136                 <artifactId>spring-jdbc</artifactId>
    137                 <version>${spring.version}</version>
    138             </dependency>
    139             <dependency>
    140                 <groupId>org.springframework</groupId>
    141                 <artifactId>spring-beans</artifactId>
    142                 <version>${spring.version}</version>
    143             </dependency>
    144             <dependency>
    145                 <groupId>org.springframework</groupId>
    146                 <artifactId>spring-aop</artifactId>
    147                 <version>${spring.version}</version>
    148             </dependency>
    149             <dependency>
    150                 <groupId>org.springframework</groupId>
    151                 <artifactId>spring-test</artifactId>
    152                 <version>${spring.version}</version>
    153             </dependency>
    154             <dependency>
    155                 <groupId>org.springframework</groupId>
    156                 <artifactId>spring-aspects</artifactId>
    157                 <version>${spring.version}</version>
    158             </dependency>
    159             <dependency>
    160                 <groupId>org.springframework</groupId>
    161                 <artifactId>spring-web</artifactId>
    162                 <version>${spring.version}</version>
    163             </dependency>
    164             <dependency>
    165                 <groupId>org.springframework</groupId>
    166                 <artifactId>spring-webmvc</artifactId>
    167                 <version>${spring.version}</version>
    168             </dependency>
    169             <dependency>
    170                 <groupId>org.springframework</groupId>
    171                 <artifactId>spring-core</artifactId>
    172                 <version>${spring.version}</version>
    173             </dependency>
    174             <!--<dependency>-->
    175                 <!--<groupId>org.springframework</groupId>-->
    176                 <!--<artifactId>spring-jms</artifactId>-->
    177             <!--</dependency>-->
    178             <!--<dependency>-->
    179                 <!--<groupId>org.springframework</groupId>-->
    180                 <!--<artifactId>spring-context-support</artifactId>-->
    181             <!--</dependency>-->
    182 
    183 
    184 
    185             <!-- JSR 303 -->
    186             <dependency>
    187                 <groupId>javax.validation</groupId>
    188                 <artifactId>validation-api</artifactId>
    189                 <version>${validator-api.version}</version>
    190             </dependency>
    191 
    192             <dependency>
    193                 <groupId>org.hibernate</groupId>
    194                 <artifactId>hibernate-validator</artifactId>
    195                 <version>${hibernate-validator.version}</version>
    196             </dependency>
    197 
    198 
    199             <!-- beetl -->
    200             <dependency>
    201                 <groupId>com.ibeetl</groupId>
    202                 <artifactId>beetl</artifactId>
    203                 <version>${beetl.version}</version>
    204             </dependency>
    205 
    206             <!-- Mybatis -->
    207             <dependency>
    208                 <groupId>org.mybatis</groupId>
    209                 <artifactId>mybatis</artifactId>
    210                 <version>${mybatis.version}</version>
    211             </dependency>
    212             <dependency>
    213                 <groupId>org.mybatis</groupId>
    214                 <artifactId>mybatis-spring</artifactId>
    215                 <version>${mybatis.spring.version}</version>
    216             </dependency>
    217             <dependency>
    218                 <groupId>com.github.pagehelper</groupId>
    219                 <artifactId>pagehelper</artifactId>
    220                 <version>${pagehelper.version}</version>
    221             </dependency>
    222             <dependency>
    223                 <groupId>tk.mybatis</groupId>
    224                 <artifactId>mapper</artifactId>
    225                 <version>${tk.mapper.version}</version>
    226             </dependency>
    227 
    228 
    229             <!-- MySql -->
    230             <dependency>
    231                 <groupId>mysql</groupId>
    232                 <artifactId>mysql-connector-java</artifactId>
    233                 <version>${mysql.version}</version>
    234             </dependency>
    235 
    236             <!-- alibaba -->
    237             <dependency>
    238                 <groupId>com.alibaba</groupId>
    239                 <artifactId>druid</artifactId>
    240                 <version>${druid.version}</version>
    241             </dependency>
    242 
    243             <!-- Jackson Json处理工具包 -->
    244             <dependency>
    245                 <groupId>org.codehaus.jackson</groupId>
    246                 <artifactId>jackson-mapper-asl</artifactId>
    247                 <version>${jackson.mapper.version}</version>
    248             </dependency>
    249             <dependency>
    250                 <groupId>com.fasterxml.jackson.core</groupId>
    251                 <artifactId>jackson-core</artifactId>
    252                 <version>${jackson.version}</version>
    253             </dependency>
    254             <dependency>
    255                 <groupId>com.fasterxml.jackson.core</groupId>
    256                 <artifactId>jackson-databind</artifactId>
    257                 <version>${jackson.version}</version>
    258             </dependency>
    259             <dependency>
    260                 <groupId>com.fasterxml.jackson.core</groupId>
    261                 <artifactId>jackson-annotations</artifactId>
    262                 <version>${jackson.version}</version>
    263             </dependency>
    264 
    265             <!-- google -->
    266             <dependency>
    267                 <groupId>com.google.code.gson</groupId>
    268                 <artifactId>gson</artifactId>
    269                 <version>${gson.version}</version>
    270             </dependency>
    271             <dependency>
    272                 <groupId>com.google.guava</groupId>
    273                 <artifactId>guava</artifactId>
    274                 <version>${guava.version}</version>
    275             </dependency>
    276 
    277             <!-- ehcache -->
    278             <dependency>
    279                 <groupId>net.sf.ehcache</groupId>
    280                 <artifactId>ehcache</artifactId>
    281                 <version>${ehcache.version}</version>
    282             </dependency>
    283 
    284             <!-- apache -->
    285             <dependency>
    286                 <groupId>org.apache.commons</groupId>
    287                 <artifactId>commons-lang3</artifactId>
    288                 <version>${commons-lang3.version}</version>
    289             </dependency>
    290             <dependency>
    291                 <groupId>commons-io</groupId>
    292                 <artifactId>commons-io</artifactId>
    293                 <version>${commons-io.version}</version>
    294             </dependency>
    295             <dependency>
    296                 <groupId>commons-fileupload</groupId>
    297                 <artifactId>commons-fileupload</artifactId>
    298                 <version>${commons-fileupload.version}</version>
    299             </dependency>
    300             <dependency>
    301                 <groupId>org.apache.httpcomponents</groupId>
    302                 <artifactId>httpclient</artifactId>
    303                 <version>${httpclient.version}</version>
    304             </dependency>
    305             <dependency>
    306                 <groupId>commons-net</groupId>
    307                 <artifactId>commons-net</artifactId>
    308                 <version>${commons-net.version}</version>
    309             </dependency>
    310             <dependency>
    311                 <groupId>commons-codec</groupId>
    312                 <artifactId>commons-codec</artifactId>
    313                 <version>${commons-codec.version}</version>
    314             </dependency>
    315             <!--<dependency>-->
    316             <!--<groupId>org.apache.shiro</groupId>-->
    317             <!--<artifactId>shiro-core</artifactId>-->
    318             <!--<version>${shiro.version}}</version>-->
    319             <!--</dependency>-->
    320             <!--<dependency>-->
    321             <!--<groupId>org.apache.shiro</groupId>-->
    322             <!--<artifactId>shiro-web</artifactId>-->
    323             <!--<version>${shiro.version}</version>-->
    324             <!--</dependency>-->
    325             <!--<dependency>-->
    326             <!--<groupId>org.apache.shiro</groupId>-->
    327             <!--<artifactId>shiro-cas</artifactId>-->
    328             <!--<version>${shiro.version}</version>-->
    329             <!--</dependency>-->
    330             <!--<dependency>-->
    331             <!--<groupId>org.apache.shiro</groupId>-->
    332             <!--<artifactId>shiro-spring</artifactId>-->
    333             <!--<version>${shiro.version}</version>-->
    334             <!--</dependency>-->
    335             <dependency>
    336                 <groupId>org.apache.shiro</groupId>
    337                 <artifactId>shiro-all</artifactId>
    338                 <version>${shiro.version}</version>
    339             </dependency>
    340             <!--<dependency>-->
    341                 <!--<groupId>org.apache.activemq</groupId>-->
    342                 <!--<artifactId>activemq-all</artifactId>-->
    343                 <!--<version>${activemq.version}</version>-->
    344             <!--</dependency>-->
    345 
    346 
    347 
    348 
    349             <!-- logback -->
    350             <dependency>
    351                 <groupId>org.slf4j</groupId>
    352                 <artifactId>slf4j-api</artifactId>
    353                 <version>${slf4j.version}</version>
    354             </dependency>
    355             <dependency>
    356                 <groupId>org.slf4j</groupId>
    357                 <artifactId>jcl-over-slf4j</artifactId>
    358                 <version>${slf4j.version}</version>
    359             </dependency>
    360             <dependency>
    361                 <groupId>ch.qos.logback</groupId>
    362                 <artifactId>logback-core</artifactId>
    363                 <version>${logback.version}</version>
    364             </dependency>
    365             <dependency>
    366                 <groupId>ch.qos.logback</groupId>
    367                 <artifactId>logback-classic</artifactId>
    368                 <version>${logback.version}</version>
    369             </dependency>
    370             <dependency>
    371                 <groupId>org.logback-extensions</groupId>
    372                 <artifactId>logback-ext-spring</artifactId>
    373                 <version>${logback.ext.version}</version>
    374             </dependency>
    375 
    376 
    377             <!-- 时间操作组件 -->
    378             <dependency>
    379                 <groupId>joda-time</groupId>
    380                 <artifactId>joda-time</artifactId>
    381                 <version>${joda-time.version}</version>
    382             </dependency>
    383 
    384     </dependencies>
    385 
    386     <build>
    387         <finalName>${project.artifactId}</finalName>
    388         <plugins>
    389             <!-- 资源文件拷贝插件 -->
    390             <plugin>
    391                 <groupId>org.apache.maven.plugins</groupId>
    392                 <artifactId>maven-resources-plugin</artifactId>
    393                 <version>2.7</version>
    394                 <configuration>
    395                     <encoding>UTF-8</encoding>
    396                 </configuration>
    397             </plugin>
    398             <!-- java编译插件 -->
    399             <plugin>
    400                 <groupId>org.apache.maven.plugins</groupId>
    401                 <artifactId>maven-compiler-plugin</artifactId>
    402                 <version>3.2</version>
    403                 <configuration>
    404                     <source>1.7</source>
    405                     <target>1.7</target>
    406                     <encoding>UTF-8</encoding>
    407                 </configuration>
    408             </plugin>
    409             <!-- 配置Tomcat插件 -->
    410             <plugin>
    411                 <groupId>org.apache.tomcat.maven</groupId>
    412                 <artifactId>tomcat7-maven-plugin</artifactId>
    413                 <version>2.2</version>
    414                 <configuration>
    415                     <port>8081</port>
    416                     <path>/</path>
    417                     <!-- 防止GET中文乱码 -->
    418                     <uriEncoding>UTF-8</uriEncoding>
    419                 </configuration>
    420             </plugin>
    421         </plugins>
    422     </build>
    423 
    424 
    425 </project>
    View Code

    spring-public.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" xmlns:context="http://www.springframework.org/schema/context"
    4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    5         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    6 
    7     <context:component-scan base-package="com.laolang"></context:component-scan>
    8 </beans>

    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" xmlns:context="http://www.springframework.org/schema/context"
     4     xmlns:mvc="http://www.springframework.org/schema/mvc"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     6         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
     7         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
     8 
     9     <context:component-scan base-package="com.laolang.km.blog.web"></context:component-scan>
    10 
    11     <mvc:annotation-driven />
    12     <mvc:default-servlet-handler />
    13 
    14     <bean
    15         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    16         <property name="prefix" value="/WEB-INF/jsp/" />
    17         <property name="suffix" value=".jsp" />
    18     </bean>
    19 </beans>

    web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3          xmlns="http://java.sun.com/xml/ns/javaee"
     4          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     5          version="3.0">
     6     <display-name>km-blog</display-name>
     7 
     8     <welcome-file-list>
     9         <welcome-file></welcome-file>
    10     </welcome-file-list>
    11 
    12     <!-- 加载配置文件 -->
    13     <context-param>
    14         <param-name>contextConfigLocation</param-name>
    15         <param-value>classpath:spring/spring-*.xml</param-value>
    16     </context-param>
    17 
    18 
    19     <!-- Spring监听器 -->
    20     <listener>
    21         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    22     </listener>
    23     <!-- 防止Spring内存溢出监听器 -->
    24     <listener>
    25         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    26     </listener>
    27 
    28     <!-- 编码过滤器 仅对POST有效-->
    29     <filter>
    30         <filter-name>CharacterEncodingFilter</filter-name>
    31         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    32         <init-param>
    33             <param-name>encoding</param-name>
    34             <param-value>utf-8</param-value>
    35         </init-param>
    36     </filter>
    37     <filter-mapping>
    38         <filter-name>CharacterEncodingFilter</filter-name>
    39         <url-pattern>/*</url-pattern>
    40     </filter-mapping>
    41 
    42     <!-- 解决PUT请求无法提交表单数据的问题 -->
    43     <filter>
    44         <filter-name>HttpMethodFilter</filter-name>
    45         <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
    46     </filter>
    47     <filter-mapping>
    48         <filter-name>HttpMethodFilter</filter-name>
    49         <url-pattern>/*</url-pattern>
    50     </filter-mapping>
    51 
    52     <!-- 配置 HiddenHttpMethodFilter: 把 POST 请求转为 DELETE、PUT 请求 -->
    53     <filter>
    54         <filter-name>HiddenHttpMethodFilter</filter-name>
    55         <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    56     </filter>
    57 
    58     <filter-mapping>
    59         <filter-name>HiddenHttpMethodFilter</filter-name>
    60         <url-pattern>/*</url-pattern>
    61     </filter-mapping>
    62 
    63     <!-- spring servlet -->
    64     <servlet>
    65         <servlet-name>km-blog</servlet-name>
    66         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    67         <init-param>
    68             <param-name>contextConfigLocation</param-name>
    69             <param-value>classpath:spring/spring-mvc.xml</param-value>
    70         </init-param>
    71         <load-on-startup>1</load-on-startup>
    72     </servlet>
    73 
    74     <servlet-mapping>
    75         <servlet-name>km-blog</servlet-name>
    76         <url-pattern>/</url-pattern>
    77     </servlet-mapping>
    78 </web-app>

    IndexController

     1 package com.laolang.km.blog.web;
     2 
     3 
     4 import org.springframework.stereotype.Controller;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 import org.springframework.web.bind.annotation.RequestMethod;
     7 import org.springframework.web.servlet.ModelAndView;
     8 
     9 @Controller
    10 public class IndexController {
    11 
    12 
    13     @RequestMapping(value = { "/" }, method = RequestMethod.HEAD, produces = "text/html")
    14     public String head() {
    15         return "index";
    16     }
    17 
    18     @RequestMapping(value = { "/", "index" }, method = RequestMethod.GET, produces = "text/html")
    19     public ModelAndView index() {
    20         ModelAndView mv = new ModelAndView("index");
    21         mv.addObject("info","hello spring mvc");
    22         return mv;
    23     }
    24 }

    index.jsp

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%
     4     String path = request.getContextPath();
     5     String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
     6             + path + "/";
     7 %>
     8 <!DOCTYPE html>
     9 <html lang="zh-CN">
    10 <head>
    11 <meta charset="UTF-8">
    12 <title>Title</title>
    13 </head>
    14 <body>
    15 info:${info}
    16 <br />
    17 path:<%=path %>
    18 <br />
    19 basePath:<%=basePath %>
    20 
    21 
    22 <script type="text/javascript" charset="UTF-8" src="<%=path %>/assets/js/jquery-2.1.4/jquery.min.js"></script>
    23 <script type="text/javascript">
    24     $(function(){
    25         console.log('hello spring mvc!');
    26     });
    27 </script>
    28 </body>
    29 </html>

    运行效果

    加入beetl

    修改spring-mvc

    把jsp的配置修改为如下配置:

    1 <!-- beetl 配置 -->
    2 <bean id="beetlConfig" class="org.beetl.ext.spring.BeetlGroupUtilConfiguration"
    3     init-method="init" />
    4 <bean id="viewResolver" class="org.beetl.ext.spring.BeetlSpringViewResolver">
    5     <property name="contentType" value="text/html;charset=UTF-8" />
    6 </bean>

    修改Controller

    1 @RequestMapping(value = { "/", "index" }, method = RequestMethod.GET, produces = "text/html")
    2 public ModelAndView index() {
    3     ModelAndView mv = new ModelAndView("index.html");
    4     mv.addObject("info","hello spring mvc");
    5     return mv;
    6 }

    添加bettl.properties

      1 # classpath 跟路径
      2 RESOURCE.root=/WEB-INF/views
      3 # 是否检测文件变化
      4 RESOURCE.autoCheck= true
      5 
      6 #######默认配置
      7 #ENGINE=org.beetl.core.engine.FastRuntimeEngine
      8 #DELIMITER_PLACEHOLDER_START=${
      9 #DELIMITER_PLACEHOLDER_END=}
     10 #DELIMITER_STATEMENT_START=<%
     11 #DELIMITER_STATEMENT_END=%>
     12 #DIRECT_BYTE_OUTPUT = FALSE
     13 #HTML_TAG_SUPPORT = true
     14 #HTML_TAG_FLAG = #
     15 #HTML_TAG_BINDING_ATTRIBUTE = var
     16 #NATIVE_CALL = TRUE
     17 #TEMPLATE_CHARSET = UTF-8
     18 #ERROR_HANDLER = org.beetl.core.ConsoleErrorHandler
     19 #NATIVE_SECUARTY_MANAGER= org.beetl.core.DefaultNativeSecurityManager
     20 #RESOURCE_LOADER=org.beetl.core.resource.ClasspathResourceLoader
     21 #MVC_STRICT = FALSE
     22 #
     23 #### 资源配置,resource后的属性只限于特定ResourceLoader ####
     24 ##classpath 跟路径
     25 #RESOURCE.root= /
     26 ##是否检测文件变化
     27 #RESOURCE.autoCheck = TRUE
     28 ##自定义脚本方法文件位置
     29 #RESOURCE.functionRoot = functions
     30 ##自定义脚本方法文件的后缀
     31 #RESOURCE.functionSuffix = html
     32 ##自定义标签文件位置
     33 #RESOURCE.tagRoot = htmltag
     34 ##自定义标签文件后缀
     35 #RESOURCE.tagSuffix = tag
     36 #
     37 ##如果采用beetl集成的web应用,可以在渲染模板前调用如下类,此类必须实现WebRenderExt接口
     38 #WEBAPP_EXT =
     39 #
     40 ##允许html function or Tag 使用特殊的定界符
     41 #FUNCTION_TAG_LIMITER=
     42 #
     43 ######  扩展 ##############
     44 ### 内置的方法
     45 #FN.date = org.beetl.ext.fn.DateFunction
     46 #FN.nvl = org.beetl.ext.fn.NVLFunction
     47 #FN.debug = org.beetl.ext.fn.DebugFunction
     48 ##兼容以前版本,用has代替
     49 #FN.exist = org.beetl.ext.fn.CheckExistFunction
     50 #FN.has = org.beetl.ext.fn.CheckExistFunction
     51 #FN.printf = org.beetl.ext.fn.Printf
     52 #FN.decode = org.beetl.ext.fn.DecodeFunction
     53 #FN.assert = org.beetl.ext.fn.AssertFunction
     54 #FN.print = org.beetl.ext.fn.Print
     55 #FN.println = org.beetl.ext.fn.Println
     56 #FN.trunc = org.beetl.ext.fn.TruncFunction
     57 ##兼容以前版本 empty,用isEmpty代替
     58 #FN.empty = org.beetl.ext.fn.EmptyFunction
     59 #FN.qmark = org.beetl.ext.fn.QuestionMark
     60 #FN.isEmpty = org.beetl.ext.fn.EmptyExpressionFunction
     61 #FN.isNotEmpty = org.beetl.ext.fn.IsNotEmptyExpressionFunction
     62 #FN.parseInt = org.beetl.ext.fn.ParseInt
     63 #FN.parseLong = org.beetl.ext.fn.ParseLong
     64 #FN.parseDouble= org.beetl.ext.fn.ParseDouble
     65 #FN.range = org.beetl.ext.fn.Range
     66 #FN.flush = org.beetl.ext.fn.Flush
     67 #FN.json = org.beetl.ext.fn.Json
     68 #FN.pageCtx = org.beetl.ext.fn.PageContextFunction
     69 #FN.type.new=org.beetl.ext.fn.TypeNewFunction
     70 #FN.type.name=org.beetl.ext.fn.TypeNameFunction
     71 #FN.global=org.beetl.ext.fn.DynamicGlobalValueFunction
     72 #
     73 ###内置的功能包
     74 #FNP.strutil = org.beetl.ext.fn.StringUtil
     75 #FNP.reg = org.beetl.ext.fn.RegxFunctionUtil
     76 #
     77 #FNP.array = org.beetl.ext.fn.ArrayUtil
     78 #
     79 ###内置的格式化函数
     80 #FT.dateFormat =  org.beetl.ext.format.DateFormat
     81 #FT.numberFormat =  org.beetl.ext.format.NumberFormat
     82 ###内置的默认格式化函数
     83 #FTC.java.util.Date = org.beetl.ext.format.DateFormat
     84 #FTC.java.sql.Date = org.beetl.ext.format.DateFormat
     85 #FTC.java.sql.Time = org.beetl.ext.format.DateFormat
     86 #FTC.java.sql.Timestamp = org.beetl.ext.format.DateFormat
     87 #FTC.java.lang.Short = org.beetl.ext.format.NumberFormat
     88 #FTC.java.lang.Long = org.beetl.ext.format.NumberFormat
     89 #FTC.java.lang.Integer = org.beetl.ext.format.NumberFormat
     90 #FTC.java.lang.Float = org.beetl.ext.format.NumberFormat
     91 #FTC.java.lang.Double = org.beetl.ext.format.NumberFormat
     92 #FTC.java.math.BigInteger = org.beetl.ext.format.NumberFormat
     93 #FTC.java.math.BigDecimal = org.beetl.ext.format.NumberFormat
     94 #FTC.java.util.concurrent.atomic.AtomicLong = org.beetl.ext.format.NumberFormat
     95 #FTC.java.util.concurrent.atomic.AtomicInteger = org.beetl.ext.format.NumberFormat
     96 #
     97 ###虚拟属性 无
     98 ### 标签类
     99 #TAG.include= org.beetl.ext.tag.IncludeTag
    100 #TAG.includeFileTemplate= org.beetl.ext.tag.IncludeTag
    101 #TAG.layout= org.beetl.ext.tag.LayoutTag
    102 #TAG.delete= org.beetl.ext.tag.DeleteTag
    103 #TAG.htmltag= org.beetl.ext.tag.HTMLTagSupportWrapper
    104 #TAG.htmltagvar= org.beetl.ext.tag.HTMLTagVarBindingWrapper
    105 #TAG.cache= org.beetl.ext.tag.cache.CacheTag

    在WEB-INF/views下添加index.html

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta charset="UTF-8">
     5 <title>Insert title here</title>
     6 </head>
     7 <body>
     8 info:${info}
     9 
    10 <script type="text/javascript" charset="UTF-8" src="/assets/js/jquery-2.1.4/jquery.min.js"></script>
    11 <script type="text/javascript">
    12     $(function(){
    13         console.log('hello spring mvc!');
    14         
    15     });
    16 </script>
    17 </body>
    18 </html>

    加入logback【日志文件有重复输出】

    添加logback.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <configuration>
     4 
     5     <property name="LOG_HOME" value="c:/projectpath/km/km-blog/log"/>
     6     <property name="LOG_FILE_NAME" value="km-blog-log"/>
     7 
     8     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
     9         <!-- encoder的默认实现类是ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    10         <encoder>
    11             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -[%file]:[%line] - %msg%n</pattern>
    12         </encoder>
    13     </appender>
    14 
    15     <appender name="pullLog"
    16               class="ch.qos.logback.core.rolling.RollingFileAppender">
    17         <file>${LOG_HOME}/${LOG_FILE_NAME}.log</file>
    18 
    19         <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
    20             <fileNamePattern>${LOG_HOME}/${LOG_FILE_NAME}.%i.log.gz</fileNamePattern>
    21             <!-- 当归档文件超过三个后,覆盖最早的日志 -->
    22             <minIndex>1</minIndex>
    23             <maxIndex>500</maxIndex>
    24         </rollingPolicy>
    25 
    26         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    27             <!-- 当文件超过500KB时进行压缩 -->
    28             <maxFileSize>10MB</maxFileSize>
    29         </triggeringPolicy>
    30         <encoder>
    31             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -[%file]:[%line] - %msg%n</pattern>
    32         </encoder>
    33     </appender>
    34 
    35     <!-- mybatis show sql -->
    36     <logger name="dao" level="DEBUG" additivity="true">
    37         <appender-ref ref="pullLog" />
    38     </logger>
    39 
    40     <!-- name值可以是包名或具体的类名:该包(包括子包)下的类或该类将采用此logger
    41         additivity 设置为true可在控制台看到pulllog日志,但是文件中会输出两次,设置为false文件输出正常,控制台看不到日志 
    42     -->
    43     <logger name="com.laolang" level="INFO" additivity="true">
    44         <appender-ref ref="pullLog"/>
    45     </logger>
    46 
    47     <!-- root的默认level是DEBUG -->
    48     <root level="DEBUG">
    49         <appender-ref ref="STDOUT"/>
    50         <appender-ref ref="pullLog"/>
    51     </root>
    52 </configuration>

    在Controller中使用

     1 package com.laolang.km.blog.web;
     2 
     3 import org.slf4j.Logger;
     4 import org.slf4j.LoggerFactory;
     5 import org.springframework.stereotype.Controller;
     6 import org.springframework.web.bind.annotation.RequestMapping;
     7 import org.springframework.web.bind.annotation.RequestMethod;
     8 import org.springframework.web.servlet.ModelAndView;
     9 
    10 @Controller
    11 public class IndexController {
    12 
    13     Logger log = LoggerFactory.getLogger(IndexController.class);
    14 
    15     @RequestMapping(value = { "/" }, method = RequestMethod.HEAD, produces = "text/html")
    16     public String head() {
    17         return "index";
    18     }
    19 
    20     @RequestMapping(value = { "/", "index" }, method = RequestMethod.GET, produces = "text/html")
    21     public ModelAndView index() {
    22         log.info("打开首页");
    23         ModelAndView mv = new ModelAndView("index.html");
    24         mv.addObject("info", "hello spring mvc");
    25         return mv;
    26     }
    27 }

    控制台输出

    文件输出

    输出json

    User.java

     1 package com.laolang.km.blog.domain;
     2 
     3 import java.util.Date;
     4 
     5 import com.fasterxml.jackson.annotation.JsonFormat;
     6 
     7 public class User {
     8     
     9         // 省略 getter,setter,toString,构造方法
    10 
    11     private Long id;
    12     
    13     private String uNum;
    14     
    15     private String nickName;
    16     
    17     @JsonFormat(pattern = "yyyy-MM-dd")
    18     private Date birthday;
    19     
    20     private String blogHome;
    21     
    22     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    23     private Date created;
    24     
    25     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    26     private Date updated;
    27 }

    controller

     1 package com.laolang.km.blog.web;
     2 
     3 import java.util.Date;
     4 
     5 import org.springframework.http.ResponseEntity;
     6 import org.springframework.stereotype.Controller;
     7 import org.springframework.web.bind.annotation.PathVariable;
     8 import org.springframework.web.bind.annotation.RequestMapping;
     9 import org.springframework.web.bind.annotation.RequestMethod;
    10 
    11 import com.laolang.km.blog.domain.User;
    12 
    13 @RequestMapping("user")
    14 @Controller
    15 public class UserController {
    16 
    17     @RequestMapping(value="id/{id}",method=RequestMethod.GET,produces="application/json; charset=utf-8")
    18     public ResponseEntity<User> findById(@PathVariable("id") Long id){
    19     
    20         User user = new User();
    21         user.setBirthday(new Date());
    22         user.setCreated(new Date());
    23         user.setUpdated(user.getCreated());
    24         
    25         if( null == id || 1L == id ) {
    26             user.setBlogHome("http://km.blog.com/userOne");
    27             user.setId(1L);
    28             user.setuNum("u1001");
    29             user.setNickName("xiaodaima");
    30         }else if( 2L == id ) {
    31             user.setBlogHome("http://km.blog.com/userOne");
    32             user.setId(1L);
    33             user.setuNum("u1001");
    34             user.setNickName("xiaodaima");
    35         }
    36         
    37         return ResponseEntity.ok(user);
    38     }
    39 }

    postman测试

    khl
  • 相关阅读:
    abap程序之间调用
    java-response-乱码解决
    java-servlet:response/request
    同平台不允许同时登陆的方案(不同平台可同时登陆)
    @Async 异步http请求,汇总数据处理
    ABAP-VOFM FOR MM-PO PRICE
    ABAP-CDS
    PI-Custom adapter module
    Vue中在移动端如何判断设备是安卓还是ios
    v-show在select中选择bug
  • 原文地址:https://www.cnblogs.com/khlbat/p/8193893.html
Copyright © 2020-2023  润新知