Spring MVC Tiles示例
spring mvc tiles示例
spring提供了与apache tile框架的集成支持。因此,我们可以借助spring tile支持简单地管理spring mvc应用程序的布局。
spring mvc支持tiles的优势
可重用性: : 我们可以在多个页面中重复使用单个组件,例如页眉和页脚组件。
集中式控件: 我们可以通过单个模板页面来控制页面的布局
易于更改布局: : 借助单个模板页面,我们可以随时更改页面的布局。因此,您的网站可以轻松采用新技术,例如引导程序,jquery等。
spring mvc tiles示例
1、将依赖项添加到pom.xml文件。
pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupid>org.springframework</groupid>
<artifactid>spring-webmvc</artifactid>
<version>5.1.1.release</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>servlet-api</artifactid>
<version>3.0-alpha-1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>jstl</artifactid>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper -->
<dependency>
<groupid>org.apache.tomcat</groupid>
<artifactid>tomcat-jasper</artifactid>
<version>9.0.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-jsp -->
<dependency>
<groupid>org.apache.tiles</groupid>
<artifactid>tiles-jsp</artifactid>
<version>3.0.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-servlet -->
<dependency>
<groupid>org.apache.tiles</groupid>
<artifactid>tiles-servlet</artifactid>
<version>3.0.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-core -->
<dependency>
<groupid>org.apache.tiles</groupid>
<artifactid>tiles-core</artifactid>
<version>3.0.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-el -->
<dependency>
<groupid>org.apache.tiles</groupid>
<artifactid>tiles-el</artifactid>
<version>3.0.5</version>
</dependency>
2、创建bean类
contact.java
package com.yapf.form;
public class contact {
private string firstname;
private string lastname;
private string email;
private string telephone;
public string getemail() {
return email;
}
public string gettelephone() {
return telephone;
}
public void setemail(string email) {
this.email = email;
}
public void settelephone(string telephone) {
this.telephone = telephone;
}
public string getfirstname() {
return firstname;
}
public string getlastname() {
return lastname;
}
public void setfirstname(string firstname) {
this.firstname = firstname;
}
public void setlastname(string lastname) {
this.lastname = lastname;
}
}
3、创建控制器类
helloworldcontroller.java
package com.yapf.controller;
import org.springframework.stereotype.controller;
import org.springframework.ui.model;
import org.springframework.web.bind.annotation.requestmapping;
@controller
public class helloworldcontroller {
@requestmapping("/hello")
public string helloworld(model m) {
string message = "hello world, spring mvc @ yapf";
m.addattribute("message", message);
return "hello";
}
}
contactcontroller.java
package com.yapf.controller;
import org.springframework.stereotype.controller;
import org.springframework.ui.model;
import org.springframework.validation.bindingresult;
import org.springframework.web.bind.annotation.modelattribute;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestmethod;
import org.springframework.web.bind.annotation.sessionattributes;
import com.yapf.form.contact;
@controller
@sessionattributes
public class contactcontroller {
@requestmapping(value = "/addcontact", method = requestmethod.post)
public string addcontact(@modelattribute("contact") contact contact, bindingresult result) {
//write the code here to add contact
return "redirect:contact.html";
}
@requestmapping("/contact")
public string showcontacts(model m) {
m.addattribute("command", new contact());
return "contact";
}
}
4、在web.xml文件中提供控制器的条目
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_2_5.xsd" id="webapp_id" version="2.5">
<display-name>springtiles</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.dispatcherservlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
5、在xml文件中定义bean
spring-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemalocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="com.yapf.controller" />
<bean id="viewresolver" class="org.springframework.web.servlet.view.tiles3.tilesviewresolver"/>
<bean id="tilesconfigurer" class="org.springframework.web.servlet.view.tiles3.tilesconfigurer">
<property name="definitions">
<list>
<value>/web-inf/tiles.xml</value>
</list>
</property>
</bean>
</beans>
6、提供tile.xml文件
tiles.xml
<?xml version="1.0" encoding="utf-8" ?>
<!doctype tiles-definitions public
"-//apache software foundation//dtd tiles configuration 2.0//en"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="base.definition"
template="/web-inf/jsp/layout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header" value="/web-inf/jsp/header.jsp" />
<put-attribute name="menu" value="/web-inf/jsp/menu.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/web-inf/jsp/footer.jsp" />
</definition>
<definition name="contact" extends="base.definition">
<put-attribute name="title" value="contact manager" />
<put-attribute name="body" value="/web-inf/jsp/contact.jsp" />
</definition>
<definition name="hello" extends="base.definition">
<put-attribute name="title" value="hello spring mvc" />
<put-attribute name="body" value="/web-inf/jsp/hello.jsp" />
</definition>
</tiles-definitions>
7、创建请求的页面
index.jsp
<a href="hello.html">hello spring</a> | <a href="contact.html">contact</a>
8、创建其他视图组件
hello.jsp
<html>
<head>
<title>spring mvc example</title>
</head>
<body>
<h1>welcome to spring mvc</h1>
<p>message is: ${message}</p>
</body>
</html>
contact.jsp
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
<title>spring tiles contact form</title>
</head>
<body>
<h2>contact manager</h2>
<form:form method="post" action="addcontact.html">
<table>
<tr>
<td><form:label path="firstname">first name</form:label></td>
<td><form:input path="firstname" /></td>
</tr>
<tr>
<td><form:label path="lastname">last name</form:label></td>
<td><form:input path="lastname" /></td>
</tr>
<tr>
<td><form:label path="lastname">email</form:label></td>
<td><form:input path="email" /></td>
</tr>
<tr>
<td><form:label path="lastname">telephone</form:label></td>
<td><form:input path="telephone" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="add contact"/>
</td>
</tr>
</table>
</form:form>
</body>
</html>
header.jsp
<h2>header</h2> <hr/>
footer.jsp
<hr/> <p>copyright 2010-2014 yapf.com.</p>
menu.jsp
<p>menu 1</p> <p>menu 2</p>
layout.jsp
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en"
"http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title><tiles:insertattribute name="title" ignore="true" /></title>
</head>
<body>
<div><tiles:insertattribute name="header" /></div>
<div style="float:left;padding:10px;width:15%;"><tiles:insertattribute name="menu" /></div>
<div style="float:left;padding:10px;width:80%;border-left:1px solid pink;">
<tiles:insertattribute name="body" /></div>
<div style="clear:both"><tiles:insertattribute name="footer" /></div>
</body>
</html>


