最近接触到Sitemesh这个工具,感觉用起来还是比较方便,比我们直接使用include要方便点,下面就将该工具的使用情况记录下来。
一.准备工具
1.sitemesh-2.4.jar:sitemesh的核心jar包,里面包含了基本的tld标签文件
2.servlet-api.jar :web项目需要的
二.编码
1. sitemesh主要是通过过滤器来进行拦截我们的请求,然后将公用的信息附加到返回的信息中,所以先要配置过滤器,在web.xml中加上如下信息:
<filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2. 在WEB-INF目录下面创建decorators.xml文件来定义我们具体的配置,比如定义那些请求需要进行单独的配置等。
<?xml version="1.0" encoding="UTF-8"?> <!-- 默认目录 --> <decorators defaultdir="/decorators"> <!-- 缺省装饰页 --> <decorator name="default" page="default.jsp"> <pattern>/*</pattern> </decorator> <!-- 自定义装饰页 --> <decorator name="index" page="default.jsp"> <pattern>/index.do</pattern> </decorator> </decorators>
其中defaultdir定义我们装饰页面的目录,缺省配置是所有的请求都会装饰到default.jsp页面中,也可以单独配置index.do请求道default.jsp页面中,根据自己的需要来进行配置。
3.创建我们的装饰页面
在decorators目录下面创建default.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>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page" %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h2 align="center">网站头部信息</h2>
<hr>
<decorator:body></decorator:body>
<hr/>
<p align="center">网站底部信息</p>
</body>
</html>
这里需要将sitemesh的标签导入,我这里只将body位置留出来,然后被装饰的页面的body信息就会被装饰到这里进行完整显示出来,从而不需要关心头部和底部信息。
4.创建被装饰页面test.jsp
在WEB-INF目录下面创建jsp目录,然后再创建test.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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
这里存放具体的内容,不用关心头部和底部内容
</body>
</html>
就在body里面存放具体的内容
5.编写servlet来访问test.jsp
创建一个servlet:
package com.jacksoft.sitemesh.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class IndexServlet extends HttpServlet{
/**
* @Fields serialVersionUID : TODO
*/
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.getRequestDispatcher("WEB-INF/jsp/test.jsp").forward(req, resp);
}
}
然后再web.xml中配置servlet,当然现在高版本的容器已经支持注解的形式来配置servlet。
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.jacksoft.sitemesh.servlet.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/index.do</url-pattern>
</servlet-mapping>
6. OK,到这里已经差不多了,启动server,访问http://127.0.0.1:8080/test/index.do
当前Sitemesh还有很多其他的标签,比如head啊之类的,具体可以到http://wiki.sitemesh.org/pages/recentlyupdated.action?key=sitemesh这里去查看,有对应的文档
附上对应的jar