美文网首页
springMVC的thymeleaf示例

springMVC的thymeleaf示例

作者: yinhaijun | 来源:发表于2019-01-11 16:21 被阅读0次

    构建过程

    项目结构如图


    image.png

    pom.xml引入相关jar包

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.haijunyin</groupId>
        <artifactId>springmvcdemo-thymeleaf</artifactId>
        <version>1.0-SNAPSHOT</version>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
        <packaging>war</packaging>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>4.3.8.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.3.8.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.thymeleaf</groupId>
                <artifactId>thymeleaf</artifactId>
                <version>3.0.11.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.thymeleaf</groupId>
                <artifactId>thymeleaf-spring4</artifactId>
                <version>3.0.11.RELEASE</version>
            </dependency>
    
        </dependencies>
    
    </project>
    

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
        <display-name>web02</display-name>
        <!-- 首页定义 -->
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    
        <!-- springmvc的servlet定义 -->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
        <!-- 注册字符集过滤器 -->
        <filter>
            <filter-name>CharacterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>utf-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    </web-app>
    

    springmvc-servlet.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
    
        <!-- 包扫描 -->
        <context:component-scan base-package="com.haijunyin.springmvcdemo"/>
    
        <!-- 静态资源交给默认servlet处理 -->
        <mvc:default-servlet-handler />
        <!--<mvc:resources location="/static/" mapping="/static/**" />-->
        <!-- 启用注解 -->
        <mvc:annotation-driven />
    
        <!-- thymeleaf视图分发器 -->
        <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
            <property name="templateEngine" ref="templateEngine"/>
            <property name="characterEncoding" value="UTF-8"/>
    
            <!-- 该属性控制controller返回的string类型是为结果值还是页面跳转,如果加上此行,则需要return xxx.html格式 -->
            <!--<property name="viewNames" value="*.html,*.xhtml"/>-->
    
        </bean>
    
        <!--使用thymeleaf解析 -->
        <bean id="templateResolver"
              class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
            <property name="prefix" value="/WEB-INF/templates/" />
            <property name="suffix" value=".html" />
            <property name="templateMode" value="HTML5" />
            <property name="characterEncoding" value="UTF-8"/>
            <property name="cacheable" value="false" /> <!-- 页面缓存 -->
        </bean>
    
        <!-- thymeleaf模板引擎 -->
        <bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine" >
            <property name="templateResolver" ref="templateResolver"/>
        </bean>
    
    </beans>
    

    index.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
             pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head></head>
        <body>
            <a href="/hello/ref">hello</a>
        </body>
    </html>
    

    detail.html

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org" >
    <head>
        <meta charset="UTF-8">
        <title>今晚天气好</title>
    </head>
    <body>
    <div>
    </div>
        <a th:text="${title}"></a>
        <ul>
            <li th:text="${user.id}"></li>
            <li th:text="${user.name}"></li>
            <li th:text="${user.age}"></li>
        </ul>
    </body>
    </html>
    

    hello.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head>
            <meta charset="utf-8" />
        </head>
        <body>
            <form action="/hello/show" method="post">
                <input type="text" name="name" value="你好">
                <input type="submit" value="查看">
            </form>
        </body>
    </html>
    
    

    show.html

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org" >
    <head>
        <meta charset="UTF-8">
        <title>今晚天气好</title>
    </head>
    <body>
    <div>
    </div>
        <a th:text="${title}"></a>
        <table border="1">
            <thead>
            <tr>
                <td>ID</td>
                <td>Age</td>
                <td>Name</td>
            </tr>
            </thead>
            <tbody>
            <tr th:if="${userList.size()} eq 0">
                <td colspan="3">没有用户信息!!</td>
            </tr>
            <tr th:each="user : ${userList}">
                <td th:text="${user.id}">1</td>
                <td th:text="${user.age}">11</td>
                <td>
                    <a href="view.html" th:href="@{'/hello/detail/' + ${user.id}}"
                       th:text="${user.name}">wss</a></td>
            </tr>
            </tbody>
    
        </table>
    </body>
    </html>
    

    HelloController.class

    package com.haijunyin.springmvcdemo.xmlconfig.controller;
    
    import com.haijunyin.springmvcdemo.xmlconfig.entities.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Controller
    @RequestMapping("/hello")
    public class HelloController {
    
        //返回String类型代表页面跳转
        @RequestMapping(value = "/ref",method = RequestMethod.GET)
        public String refHello(){
            System.out.println("HelloController...refHello...");
            return "hello";
        }
    
        @RequestMapping(value = "/show",method = RequestMethod.POST)
        public String show(ModelMap modelMap) {
            System.out.println("HelloController...show...");
            List<User> users = new ArrayList<User>();
            users.add(new User(3,"张三",23));
            users.add(new User(4,"李四",24));
            modelMap.addAttribute("userList", users);
            modelMap.addAttribute("title", "列表页");
            return "show";
        }
    
        @RequestMapping(value = "/detail/{id}",method = RequestMethod.GET)
        public String detail(@PathVariable long id, ModelMap modelMap) {
            System.out.println("HelloController...detail...");
            System.out.println("id=" + id);
            if(id == 3){
                modelMap.addAttribute("user", new User(3,"张三",23));
            }else if(id == 4){
                modelMap.addAttribute("user", new User(3,"李四",24));
            }
            modelMap.addAttribute("title", "明细页");
            return "detail";
        }
    
    }
    

    User.class

    package com.haijunyin.springmvcdemo.xmlconfig.entities;
    
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement // mediatype 转为xml
    public class User {
        private long id; // 用户的唯一标识
        private String name;
        private int age;
    
        public User() {
        }
    
        public User(long id, String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    

    运行结果

    启动tomcat运行


    1547194684711.gif

    总结

    在sprigmvc模式中,控制层controller用于处理业务逻辑并返回结果集,controller不会做视图渲染,而是将视图渲染交给视图解析器处理,springmvc有许多视图解析器,如InternalResourceViewResolver、GroovyMarkupViewResolver、FreeMarkerViewResolver、ThymeleafViewResolver,它们是接口ViewResolver的子类,视图解析器用于渲染对应的模板,比如ThymeleafViewResolver渲染thymeleaf模板,本文是thymeleaf的一个demo

    相关文章

      网友评论

          本文标题:springMVC的thymeleaf示例

          本文链接:https://www.haomeiwen.com/subject/ejbxdqtx.html