`

tiles2 jsp Servlet单独使用配置

 
阅读更多

Java基于WEB的开发中,在用户界面方面简化开发的工具上,大家的选择习惯性的受一些知名框架的影响去左右。我也不例外,最早时受struts的影响,使用了tiles,并且很愿意使用这种Tiles的用户界面开发习惯,并且在我的开发团队当中推广这种模式。我觉得采用这种界面开发方法会给我们团队带来一些便利:

 

1、美工界面工作可以让更懂用户感受的商务人员与美工交流;
2、技术人员专注于业务模型的实现;
3、使WBS做得可以更细,测试也可以做得很细;
4、以上所有工作可以并行
5、有效的组织项目Views层文件管理,方便团队协作。

 

也许是因为鼎鼎大名的WebWork使用了SiteMesh、鼎鼎大名的Struts在2也使用了SiteMesh,我发现网上对于Tiles2的应用交流相对较少了,而对于SiteMesh的推荐较多。而我在前期研发J10引擎过程中,对于SiteMesh和Tiles2都进行了应用和比较,以便于把这一种我偏爱的方式能够继续在我的团队当中采用,在测试和应用了几个案例后,我最后确定加入了Tiles2的开源框架作为用户界面的项目组“标准模式”,基于:

 

1、项目团队成员一直使用Struts 1的tiles,有助于让成员低培训成本进入应用状态;
2、tiles2的配置相对于SiteMesh更加快捷简单;
3、tiles2的应用更加简单。

 

tiles可以方便的应用在任何jsp、servlet的项目中,下面我对tiles的应用进行一下介绍,如果有不足的地方,欢迎朋友们进行交流。

 

1、准备
我比较建议大家先到http://tiles.apache.org花十分钟时间读一下他的Getting Started和quickstart文档,很有益。然后点击http://www.apache.org/dyn/closer.cgi/tiles/v2.0.5/tiles-2.0.5-bin.tar.gz下载这份tiles-2.0.5(GA)版本。

 

2、配置tiles-def.xml
如果你曾经使用过tiles,下面这个配置文件很熟吧?如果你没用过,呵,对你来说也是很好理解的吧。

[xhtml] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <BR><!DOCTYPE tiles-definitions PUBLIC  
  3. <BR>       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"  
  4. <BR>       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">  
  5. <BR>  
  6. <BR><tiles-definitions>  
  7. <BR>  
  8. <BR>  <!-- 全局配置  -->  
  9. <BR>  <definition name="layout" template="/views/layout/layout.jsp">  
  10. <BR>      <put-attribute name="title"  value="tiles2用户界面简单示例"/>  
  11. <BR>      <put-attribute name="header" value="/views/layout/header.jsp"/>  
  12. <BR>      <put-attribute name="info" value="/views/layout/info.jsp"/>  
  13. <BR>      <put-attribute name="body"   value="/views/layout/body.jsp"/>  
  14. <BR>      <put-attribute name="footer"   value="/views/layout/footer.jsp"/>  
  15. <BR>  </definition>  
  16. <BR>  <!--示例进行一个扩展配置-->  
  17. <BR>  <definition name="business.list" extends="layout">  
  18. <BR>      <put-attribute name="title" value="广告效果分析"/>  
  19. <BR>      <put-attribute name="body" value="/views/business/adEffect.jsp"/>  
  20. <BR>  </definition>  
  21. <BR></tiles-definitions>  
  22. <BR>  

<tiles-definitions>标签内主要的子节点就是<definition>标签,这个标签属性如下:

 

 

属性
名称 是否必须 值必须 值类型 说明
name true true java.lang.String

指定将要创建的一个definition bean的访问名称。这个必须有的。

template false true java.lang.String

哪一个文件是模板文件,这个模板文件后面会介绍。

role false true java.lang.String

如果配置了这个值的话,需要role的值相等,这个definition才被有效访问,这个功能我没有深究,也不推荐使用,建议大家建立自己更完善的权限控制管理。当然欢迎朋友们完善role应用的示例,tiles自带role的示例,有兴趣的人去读一下就明白了。

extends false true java.lang.String

继承哪一个definition,值是你要继承的definition的name的值。高使用率的属性。

preparer false true java.lang.String

呵,我没使用,如果你要使用的话,要写一个实现他的Prepare接口的类,作用就是在展现你定义的页面前会先执行你的prepare。

 

实际上一般按我的例子中的就足够用了,OK,我们继续吧。

 

3、配置web.xml

多么easy的事情啊,打开你的web.xml,用你的鼠标copy & paster下面的代码并放到你的web.xml的<web-app>节点下。

[xhtml] view plaincopy
 
  1.     <context-param>  
  2. <BR>      <param-name>  
  3. <BR>          org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG  
  4. <BR>      </param-name>  
  5. <BR>      <param-value>  
  6. <BR>          /WEB-INF/tiles-defs.xml  
  7. <BR>      </param-value>  
  8. <BR>  </context-param>  
  9. <BR>  
  10. <BR>  <listener>  
  11. <BR>      <listener-class>  
  12. <BR>          org.apache.tiles.web.startup.TilesListener  
  13. <BR>      </listener-class>  
  14. <BR>  </listener>  
  15. <BR>  
  16. <BR>  

org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG这是配置tiles的配置文件,可以配置多个文件,文件之间用逗号分隔即可,文件格式完全相同只是看你团队的WBS需要作调整即可。listener节点是配置一个tiles的监听器——如果你前面花了十分钟时间读了一下tiles官方的Quick start文档的话,也许你还记得,在Configuration一节介绍了很多个配置方式,你可以随自己喜好选择使用servlet、listener、filter之一。如果没有看,OK,点击http://tiles.apache.org/tutorial/configuration.html去看一下吧。

4、框架页layout.jsp

 

[xhtml] view plaincopy
 
  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>  
  2. <BR><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
  3. <BR><html xmlns="http://www.w3.org/1999/xhtml">  
  4. <BR>  <head>  
  5. <BR>      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  6. <BR>      <title><tiles:getAsString name="title" /></title>  
  7. <BR>      <meta name="description" content="信息提示" />  
  8. <BR>  </head>  
  9. <BR>  <body>  
  10. <BR>      <table border="0" width="950" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">  
  11. <BR>          <tr>  
  12. <BR>              <td>  
  13. <BR>                  <tiles:insertAttribute name="header" />  
  14. <BR>              </td>  
  15. <BR>          </tr>  
  16. <BR>          <tr>  
  17. <BR>              <td>  
  18. <BR>                  <%--  
  19. <BR>                  /* 主要信息和操作界面  
  20. <BR>                   *  
  21. <BR>                   */   
  22. <BR>                  --%>  
  23. <BR>                  <table width="100%" border="0" cellpadding="0" cellspacing="0">  
  24. <BR>                      <c:if test="${info!=null }">  
  25. <BR>                          <tr>  
  26. <BR>                              <td>  
  27. <BR>                                  <tiles:insertAttribute name="info" />                           </td>  
  28. <BR>                          </tr>  
  29. <BR>                      </c:if>  
  30. <BR>                      <tr>  
  31. <BR>                          <td>  
  32. <BR>                              <tiles:insertAttribute name="body" />  
  33. <BR>                          </td>  
  34. <BR>                      </tr>  
  35. <BR>                </table>  
  36. <BR>                  <%--  
  37. <BR>                  //主信息和操作界面结束。  
  38. <BR>                   --%>  
  39. <BR>              </td>  
  40. <BR>          </tr>  
  41. <BR>          <tr>  
  42. <BR>              <td>  
  43. <BR>                  <tiles:insertAttribute name="footer" />  
  44. <BR>              </td>  
  45. <BR>          </tr>  
  46. <BR>  </table>  
  47. <BR>  </body>  
  48. <BR></html>  
  49. <BR>  

特别注意其中<tiles:insertAttribute>和<tiles:getAsString>两个节点,getAsString如下:

 

 

属性
名乐 是否必须 值必须 值类型 说明
name true true java.lang.String

属性名称,引用definition attribute的名称

ignore false true boolean

如果设为true,如果发生异常什么的,就给出空白内容。默认为false,会给出cause。

role false true java.lang.String

别用了吧,有兴趣的人去看吧,不推荐使用。

 

insertAttribute的属性如下:

 

 

属性
名称 必须 值必须 值类型 说明
name false true java.lang.String

要插入的属性名称,如果value有值,将被忽略.

value false true java.lang.Object

如果有值,会被直接使用,一般我不太直接用,如果直接用的话,一般也是直接给一个jsp文件的相对content路径。

flush false false boolean

在插入这个页面前先把out stream进行一次flush干净操作。

ignore false true boolean

同getAsString的解释。

role false true java.lang.String

不推荐使用。说n次了。下同

preparer false true java.lang.String 同上

 

因为我用了一个表格作范例,用表格区格开了body、footer、header、info的定义。其中info是否展现,又采用了c标签和EL语句。你要想写个更简单的页面例子,也可以,为了方便理解,我拿一个tiles官方的layout大家看一下:

[xhtml] view plaincopy
 
  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>  
  2. <BR>  
  3. <BR><table  border="2"  width="300"  bordercolor="Gray">  
  4. <BR>  <tr>  
  5. <BR>    <td  bgcolor="Blue"><strong><tiles:getAsString name="title"/></strong></td>  
  6. <BR>  </tr>  
  7. <BR>  <tr>  
  8. <BR>    <td><tiles:insertAttribute name="header"/></td>  
  9. <BR>  </tr>  
  10. <BR>  <tr>  
  11. <BR>    <td><tiles:insertAttribute name="body"/></td>  
  12. <BR>  </tr>  
  13. <BR></table>             

 5、Hello World一下

header.jsp

Html代码 复制代码
  1. <div align="center"><b><i>This is a header</i></b></div>  
[html] view plaincopy
 
  1. <div align="center"><b><i>This is a header</i></b></div>  

 info.jsp

Html代码 复制代码
  1. <div align="center" style="font-color:red;"><b>%{info}</b></div>  
[html] view plaincopy
 
  1. <div align="center" style="font-color:red;"><b>%{info}</b></div>  

 body.jsp

Java代码 复制代码
  1. <h3>Hello World!</h3>  
[java] view plaincopy
 
  1. <h3>Hello World!</h3>  

 footer.jsp

Html代码 复制代码
  1. <div align="center"><b><i>This is a footer</i></b></div>  
[html] view plaincopy
 
  1. <div align="center"><b><i>This is a footer</i></b></div>  

 6、页面标签

在页面当中直接用标签,功能相当强大,我就不多介绍了,直接用一个最通用的例子吧,更多的例子,大家看官方example吧。

hello.jsp

Html代码 复制代码
  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>  
  2. <BR>  
  3. <BR><tiles:insertDefinition name="layout" />  
[html] view plaincopy
 
  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>  
  2. <br>  
  3. <br><tiles:insertDefinition name="layout" />  

 OK,部置出去,有没有看到大大的“Hello world”。

 

7、我更推荐的方法是在你的Java业务代码中使用

在你可访问ServetRequest对象的业务代码最后加入:

Java代码 复制代码
  1. //获得Tiles容器   
  2. <BR>TilesContainer container = TilesAccess.getContainer(request   
  3. <BR>                .getSession().getServletContext());   
  4. <BR>//渲染页面,成功执行后,就显示用户界面了。   
  5. <BR>container.render(def, request,response);   
  6. <BR>  

 

[java] view plaincopy
 
  1. //获得Tiles容器  
  2. <br>TilesContainer container = TilesAccess.getContainer(request  
  3. <br>                .getSession().getServletContext());  
  4. <br>//渲染页面,成功执行后,就显示用户界面了。  
  5. <br>container.render(def, request,response);  
  6. <br>  
分享到:
评论

相关推荐

    tiles+servlet简单例子

    监听器(如`org.apache.tiles.impl.BasicTilesContainerListener`)初始化Tiles容器,而Servlet(如`org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter`,尽管这里不使用Struts,但其...

    struts资料\Tiles框架--页面布局

    在Tiles中,组件是一个可重复使用的页面片段,它可以是简单的HTML,也可以是一个复杂的JSP或Servlet。组件通过一个标识符(name)在配置文件中引用,这样就可以在多个页面中复用。 3. **Tiles定义(Definition)**...

    Tiles布局

    2. **配置Servlet容器**:在Web.xml文件中配置Tiles视图解析器,设置其为Spring MVC的默认视图解析器。 3. **创建Tiles配置文件**:定义页面布局和瓦片,这个文件通常位于类路径下,如`WEB-INF/tiles-defs.xml`。 ...

    Tiles框架.rar

    3. 示例代码:展示如何定义tiles、配置布局和在控制器中注入tiles的JSP或Servlet代码。 4. 配置文件:如`tiles-defs.xml`,展示了如何定义和组织tiles。 5. 模板文件:包含JSP、HTML或其他模板引擎的文件,用于创建...

    JSP2.0技术手册

    5. **分离的Java源代码**:JSP2.0引入了“分离的源码”模式,即将JSP页面转换为单独的Java源文件,这样可以使用IDE进行调试和重构。 **二、JSP2.0的核心概念** 1. **JSP元素**:包括指令(directives)、动作...

    struts2所需jar包

    - `servlet-api.jar` 或 `jsp-api.jar`: 这些是Servlet和JSP API的依赖,通常由Web服务器或应用服务器提供,但有时需要单独添加到项目中以避免版本冲突。 以上jar包是开发和运行Struts2应用程序的基础。根据实际...

    struts架构指导

    在Struts框架中,核心组件包括Action、ActionForm、ActionServlet、配置文件(struts-config.xml)以及各种标签库(Tiles、JSP标签等)。以下是一些关键知识点的详细介绍: 1. **Action**:Action是处理用户请求的...

    Struts2_Jar包

    5. **配置**:Struts2使用XML或注解进行配置,可以声明Action、Result、Interceptor等,定义应用的行为。 在`lib`目录下的文件名列表中,我们通常会看到如下的Jar包: - `struts2-core.jar`:Struts2框架的核心库...

    struts 2的全部jar包

    4. **Servlet容器兼容性**:由于Struts2是基于Servlet API的,所以需要`servlet-api.jar`和`jsp-api.jar`。这些库通常由应用服务器提供,但在开发环境中可能需要单独包含。 5. **测试与调试**:Struts2的测试库如`...

    struts与struts2的区别

    Struts1使用的是JSP和Tiles框架来组织视图,而Struts2引入了FreeMarker和Velocity等模板引擎,提供了更多样化的视图渲染方式。 **5. 配置方式:** Struts1的配置主要在XML文件中完成,而Struts2引入了更简洁的注解...

    2023年javaWeb面试题含答案.doc

    Java Web 面试题知识点总结 Java Web 面试题含答案主要涵盖了 Java Web 开发的核心技术和概念,包括 JSP、Servlet、Cookie、Session、JSTL、J2EE、Struts ...Struts2 不依赖于容器,允许 Action 脱离容器单独被测试。

    Struts1 +Spring2+Hibernate3 无冲突jar包

    开发者在使用这个jar包时,可以直接导入项目,省去了单独下载和配置各个框架版本的步骤,大大简化了初始化阶段的工作。需要注意的是,尽管jar包已预处理了兼容性,但在实际开发中仍需根据具体需求调整配置文件,比如...

    struts2项目测试成功的jar包

    3. **依赖的库**: Struts2依赖于许多其他开源库,如OGNL(Object-Graph Navigation Language)用于表达式语言,Servlet API和JSP API用于Web开发,Commons Logging用于日志记录,等等。这些库的JAR文件也需要包含在...

    Struts2 开发包

    8. **表达式语言(Expression Language)**:Struts2使用OGNL作为默认的表达式语言,允许在配置文件和Action中引用对象属性和方法。 9. **国际化与本地化**:Struts2支持多语言环境,开发者可以通过资源包...

    Struts快速学习指南

    2. **Struts架构**:Struts的核心组件包括ActionServlet、Action、ActionForm、ActionMapping和JSP。ActionServlet是入口点,负责接收HTTP请求并调度到相应的Action;Action处理业务逻辑,ActionForm存储表单数据,...

    springMVC案例

    SpringMVC的核心优势在于其灵活性和强大的配置能力,这使得它能够与多种视图技术无缝集成,如JSP、Velocity、Tiles等。 #### 二、SpringMVC的特点 1. **灵活性**:SpringMVC的设计非常灵活,支持多种视图技术,...

    struts2 笔记

    2) 为每个处理请求的方法配置一个单独的Action,并在struts.xml中指定method属性。 3) 使用通配符配置Action,根据请求路径自动匹配执行的方法。 如果访问的Action不存在,Struts2提供了两种处理方式:一是配置默认...

    struts2.0开发真正用倒的包,已经分类.rar

    5. **OGNL(Object-Graph Navigation Language)**:Struts2内部使用OGNL作为表达式语言,用于在Action与JSP之间传递数据。开发者可以通过OGNL表达式直接访问对象的属性,甚至执行方法。 6. **Tiles插件**:Tiles是...

    struts2.0所有jar包

    7. **其他插件**:可能包括各种扩展和插件,例如JSON、Spring集成、Tiles等,这些都以单独的jar形式存在,如`struts2-json-plugin.jar`、`struts2-spring-plugin.jar`等。 使用这些jar包时,你需要将它们添加到项目...

    深入浅出Struts2.0

    - **易测试性**:Struts2的设计考虑到了单元测试的需求,使得Action和其他组件更容易被单独测试。 - **模块化**:框架支持将应用划分为多个独立的模块,每个模块可以有自己的配置文件和资源文件,便于管理和重用。 ...

Global site tag (gtag.js) - Google Analytics