SpringMVC4+thymeleaf3的一个简单实例(篇二:springMVC与thymeleaf的整合)
延续前篇内容。
开始之前,我们首先要准备以下12个jar文件:
spring-aop-4.3.3.RELEASE.jar
spring-beans-4.3.3.RELEASE.jar
spring-context-4.3.3.RELEASE.jar
spring-core-4.3.3.RELEASE.jar
spring-expression-4.3.3.RELEASE.jar
spring-web-4.3.3.RELEASE.jar
spring-webmvc-4.3.3.RELEASE.jar
thymeleaf-3.0.2.RELEASE.jar
thymeleaf-spring4-3.0.2.RELEASE.jar
attoparser-2.0.1.RELEASE.jar
slf4j-api-1.6.6.jar
commons-logging-1.2.jar
它们来自于spring-framework-4.3.3.RELEASE-dist.zip,thymeleaf-3.0.2.RELEASE-dist.zip,commons-logging-1.2-bin.tar.gz,请从官网下载
spring: http://repo.spring.io/release/org/springframework/spring/
thymeleaf: https://dl.bintray.com/thymeleaf/downloads/thymeleaf/
common log: http://commons.apache.org/proper/commons-logging/download_logging.cgi
1: 把12个jar文件拷贝到WEB-INF的lib目录下(eclipse支持鼠标拖拽),并添加到build path下:

查看项目所在硬盘路径:鼠标右击项目 zoo,下拉菜单->Properties,弹出对话框即可查看:

2: 修改web.xml文件,添加spring的dispatcherServlet;指定spring的配置文件:classpath下的com/xmlconfig/spring-mvc.xml文件;过滤所有以.html结尾的请求。
load-on-startup参数设置为1,表示web应用启动的时候就会实例化这个servlet,数值必须是整数,如果是负整数或者没有设置,那么web容器自己会选择它的初始化时机,如果是大于等于0的整数,那么这个servlet会在web应用启动的时候初始化,并且数字越小越先被初始化,对于值相等的servlet,web容器会选择初始化顺序。
内容如下:
<?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>zoo</display-name> <servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:com/xmlconfig/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
3: 在src目录下新建package:com.xmlconfig(其实就是硬盘里的文件夹src/com/config),并在这个package下面新建xml文件:
spring-mvc.xml,内容为:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- spring扫描com.zoo.web.controller下面所有带注解的类 --> <context:component-scan base-package="com.zoo.web.controller"/>
<!-- 这个标签表示使用注解来驱动 -->
<mvc:annotation-driven/> <!-- 使用thymeleaf解析 -->
<bean id="templateResolver"
class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML" />
<property name="cacheable" value="false" />
</bean> <bean id="templateEngine"
class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean> <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
</bean> </beans>
解释:
prefix,用于指定template所在目录;
suffix,过滤请求,这里是处理所有以.html结尾的请求;
templateMode,设置为html;
cacheable,是否缓存页面,开发时设置为false,这样就可以在不重启服务器的情况下刷新页面即可查看修改效果;
4: 在src目录下添加package:com.zoo.web.controller,并新建类ZooController,其内容是:
package com.zoo.web.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class ZooController {
@RequestMapping(path = "/list", method = RequestMethod.GET)
public String showZooList(){
return "zoolist";
}
}
类上面的注解@Controller表示这个类是一个Controller类型的组件,spring根据这个注解就可以扫描到并将其注册到容器中,在有http请求过来的时候spring会根据url找到匹配的controller并执行对应的方法。
@RequestMapping注解的是方法showZooList(),当浏览器访问http://localhost:8080/zoo/list.html地址时就会调用此函数。函数返回的是个字符串,这个字符串对应的是/WEB-INF/pages/下的文件名,记住是不带扩展名的,这个是在spring-mvc.xml中<property name="prefix" value="/WEB-INF/pages/" />配置的。其中method=RequestMethod.GET表示只响应get请求,如果同样的url换成post请求就不会触发这个方法。
5: 在WEB-INF下新建文件夹pages,并在pages里新建文件zoolist.html,添加一些静态数据,内容为:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>zoo list</title>
</head>
<body>
<table border="1">
<tr>
<th>序号</th>
<th>动物名称</th>
<th>数量</th>
<th>备注</th>
</tr>
<tr>
<td>1</td>
<td>大马猴</td>
<td>10</td>
<td>机灵古怪,俏皮活泼</td>
</tr>
<tr>
<td>2</td>
<td>大熊猫</td>
<td>80</td>
<td>体型笨重,喜欢吃竹子</td>
</tr>
<tr>
<td>3</td>
<td>澳洲羊驼</td>
<td>13</td>
<td>长相奇特,大国人俗称其草泥马</td>
</tr>
<tr>
<td>4</td>
<td>峨眉山猴</td>
<td>90</td>
<td>不怕人,有时候发贱抢游客面包吃</td>
</tr>
</table>
</body>
</html>
到此为止所需的材料基本上就全都整好啦,现在我们的项目结构大概是这个样子

让我们启动tomcat试一试吧!

启动完成后看看你的Console是不是一切正常,如果有出错信息,请自行排查。
打开浏览器输入http://localhost:8080/zoo/list.html

哎呀!怎么都是问号呀!?
别担心,小问题,我们只需在spring-mvc.xml中添加一句话就ok啦拉拉,
把<property name="characterEncoding" value="UTF-8"/>加进去,放在哪里呀?请使劲看:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.zoo.web.controller"/>
<mvc:annotation-driven/> <!-- 使用thymeleaf解析 -->
<bean id="templateResolver"
class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML" />
<property name="cacheable" value="false" />
</bean> <bean id="templateEngine"
class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean> <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
<!--解决中文乱码-->
<property name="characterEncoding" value="UTF-8"/>
</bean> </beans>
完成后记得重新启动tomcat,再用浏览器看一看:

哇,正常了,终于看到大马猴和草泥马啦拉拉!
等一等,我们是不是忘记了什么?对了,我们再访问一下首页http://localhost:8080/zoo看看

咿呀呀,搞什么飞机,怎么出错啦,还是404,怎么找不到页面啦,让阿拉想想怎么解决......
好,有了,同样在spring-mvc.xml中添加一句话就ok,
把<mvc:default-servlet-handler />加进去就能解决。这句话怎么这么列害!为什么呢?
让我们想一想整个流程,当http://localhost:8080/zoo这个请求来到tomcat server时,实际上请求的是http://localhost:8080/zoo/index.html或者http://localhost:8080/zoo/default.jsp,总之是wellcome-file-list中的某个页面,可实际上在我们的应用中没有哪个类的哪个方法来响应/index.html或者default.jsp等,所以这句话的意思就是在这条路走不通的情况下使用默认servlet来处理,这个标签对应的是
org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 这个handler,它转而调用当前web容器默认的servlet,让当前默认servlet来处里。
最后的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.zoo.web.controller"/>
<mvc:annotation-driven/>
<!-- 默认servlet -->
<mvc:default-servlet-handler /> <!-- 使用thymeleaf解析 -->
<bean id="templateResolver"
class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML" />
<property name="cacheable" value="false" />
</bean> <bean id="templateEngine"
class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean> <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
<!--解决中文乱码-->
<property name="characterEncoding" value="UTF-8"/>
</bean> </beans>
重启服务器再试试看,是不是好了呢。
本篇的内容到此也就结束了,下一篇介绍页面参数获取。
END.
SpringMVC4+thymeleaf3的一个简单实例(篇二:springMVC与thymeleaf的整合)的更多相关文章
- SpringMVC4+thymeleaf3的一个简单实例(篇三:页面参数获取)
本篇将通过示例介绍页面参数是如何传递到后台的.我们继续沿用之前搭好的程序结构,如果你不知道,请参照前两篇.为方便跳转页面,我们在首页以及zoolist.html页面都加上彼此地址的链接:首页: zoo ...
- SpringMVC4+thymeleaf3的一个简单实例(篇一:基本环境)
首语:用SpringMVC和thymeleaf实现一个简单的应用,包括基本环境搭建,SpringMVC4和thymeleaf3的整合,页面参数的获取,页面参数验证,以及用MySQL保存数据.我会把步骤 ...
- SpringMVC4+thymeleaf3的一个简单实例(篇五:页面和MySql的数据交互-展示以及存储)
这一篇将介绍怎样把页面数据保存的MySQL数据库,并将数据库内容展示到页面上.首先做一个基础工作,添加以下jar到lib:1: mysql-connector-Java-5.1.40-bin.jar ...
- SpringMVC4+thymeleaf3的一个简单实例(篇四:form表单数据验证)
关于表单数据验证有很多中方法,这里我仅介绍JSR303注解验证.JSR303仅仅是一个规范,这里我们要用到它的一个实现:hibernate-validator. 注意在spring的配置文件sprin ...
- (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)
hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...
- 【SSH进阶之路】Hibernate搭建开发环境+简单实例(二)
Hibernate是很典型的持久层框架,持久化的思想是很值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和原理 ...
- 自己制作一个简单的操作系统二[CherryOS]
自己制作一个简单的操作系统二[CherryOS] 我的上一篇博客 自己制作一个简单的操作系统一[环境搭建], 详细介绍了制作所需的前期准备工作 一. 一点说明 这个操作系统只是第一步, 仅仅是开机显示 ...
- C++ 容器的综合应用的一个简单实例——文本查询程序
C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...
- Ajax实现局部数据交互的一个简单实例
想要实现的功能:利用Ajax技术通过点击一个<button>按钮,然后在指定的文本框中输出想要的值. 1.使用Jsp创建一个前端页面. <body> <div style ...
随机推荐
- Volatile总结
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...
- 【转】android官方侧滑菜单DrawerLayout详解
原文网址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0925/1713.html drawerLayout是Support ...
- 【转】Ubuntu下搭建SVN环境-Apache
原文网址:http://www.cnblogs.com/candle806/archive/2012/12/20/2826280.html 环境描述:ubuntu server 12.04 / sv ...
- Objective-c初始化和便利构造
1.创建一个Student这个类 2.声明和实现 1).在Studnet.h文件中对属性和方法的声明 其中这个方法是带参初始化 而这个方法是便利构造.注意与上边的区别 2.在Studnet.m中实现 ...
- udev:renamed network interface eth0 to eth1
删除/etc/udev/rules.d/70-persistent-net.rules这个文件,重启
- Anjuta 调试无输出 warning: GDB: Failed to set controlling terminal
调试无输出,起初以为是那个warning的问题,后来才知道这个系统printf直到遇到'\n'换行符才输出,VC6用习惯了没想到还有这样的,网上说这样是节省系统资源. 那个warning暂时还没看到影 ...
- c++重点知识点
- const加强 在变量前加const,说明变量是常量只读属性.假如用指针去修改const常量会用什么结果.上例子: //a 是一个只读的常量,按照理论应该不能被修改 ;//内存中为a分配地址,赋值 ...
- 无法将类型“System.Collections.Generic.IEnumerable<EmailSystem.Model.TemplateInfo>”隐式转换为“System.Collections.Generic.List<EmailSystem.Model.TemplateInf
List<Model.Template> templateList = templateBLL.RecommendTemplateByOrder(modelEbay); List<M ...
- .net web 开发平台- 表单设计器 一(web版)
如今为了适应需求的不断变化,动态表单设计器应运而生.它主要是为了满足界面的不断变化和提高开发速度.比如:一些页面客户可能也无法确定页面的终于布局,控件的位置,在哪种情况下显示或不显示等可能须要随时改动 ...
- mybatis0206 延迟加载
延迟加载 1.1使用延迟加载意义 在进行数据查询时,为了提高数据库查询性能,尽量使用单表查询,因为单表查询比多表关联查询速度要快. 如果查询单表就可以满足需求,一开始先查询单表,当需要关联信息时,再关 ...