在传统 JSP 中,想要实现页面布局管理比较麻烦,为了解决在 JSP 中布局的问题,出现了很多开源软件,比如 Apache Tiles 和 SiteMesh 就是其中比较优秀的。但是使用开源软件实现布局或多或少会产生一些性能问题,有没有办法在不依赖第三方开源软件的情况下,使用 JSP 本身来实现页面布局呢?
JSP 2.0 引入了 Fragment 技术,使用 Fragment 技术可以在 JSP 中实现类似 Tiles 和 SiteMesh 的页面布局管理。
下面的例子说明了如何使用 Fragment 实现页面布局。
1、首先在 WEB-INF/tags 文件夹中创建 template.tag 文件:
[html] view plaincopy
<%@tag description="template 1" pageEncoding="UTF-8"%>
<%@attribute name="header" fragment="true" %>
<%@attribute name="footer" fragment="true" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<jsp:invoke fragment="header"/>
<jsp:doBody/>
<jsp:invoke fragment="footer"/>
</body>
</html>
在 tag 文件头部申明了两个 attribute 分别是 header 和 footer。在 <body> 标签中调用了这两个 attribute 所对应的 fragment。jsp:invoke 和 jsp:doBody 中的具体内容会被 jsp 中的内容替换。现在编写 index.jsp。
2、创建 index.jsp 文件
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="t" tagdir="/WEB-INF/tags/"%>
http://write.blog.csdn.net/postedit
<t:template>
<jsp:attribute name="header">
这里的内容显示在头部。
</jsp:attribute>
<jsp:attribute name="footer">
这里的内容显示在尾部。
</jsp:attribute>
<jsp:body>
这里显示正文内容:Hello World!
</jsp:body>
</t:template>
jsp:attribute 标签中的内容将会替换 template.tag 中 jsp:invoke 的内容,name 属性对应 fragment 属性。
如果访问 index.jsp 页面,可以看到显示的内容会按照 template.tag 中设计的样式来进行布局
分享到:
相关推荐
<dubbo:application/> <dubbo:module/> <dubbo:provider/> <dubbo:consumer/> <dubbo:method/> <dubbo:argument/> <dubbo:parameter/> 协议参考手册 dubbo:// rmi:// hessian:// http:// webservice:// thrift:// ...
<template name="NameOfTemplate" invoke="none|auto|manual"> <description>Description goes here</description> <author>Author OfTheTemplate</author> <point name="NameOfPoint"> <text>default text ...
<br/><br/><br/>--------------------------------------------------------------------------------<br/>主要概念<br/><br/>利用 P/Invoke 调用 Win32 API. <br/>直接读取另一进程的内存. <br/>注意:这篇文章的第...
NULL 博文链接:https://liumayulingyan.iteye.com/blog/1900122
Map<String, WebServiceResultBean> rs = ser.invoke("EOMS", "isAlive1", map); System.out.println(rs.get("return").getValue()); --> <serviceGroup> <service id="EOMS" endpoint=...
/// <param name="text"></param> private void AppString(sendData sendDatas) { int i = forms(sendDatas.fromIP); if (arryFrom[i].Forms.InvokeRequired == true) { arryFrom[i].Forms.Invoke...
<br/>14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?<br/>15.接口可以包含哪些成员?<br/>16.类和结构的区别?<br/>17.接口的多继承会带来哪些问题?<br/>18.抽象类和接口的区别?<br/>19....
<value>logBeforeAdvice</value> 17. </list> 18. </property> 19. </bean> 20. </beans> 这样我们就为MessageSender对象指定了Before Advice对象。在这里,我们分别定义了一个MessageSender对象...
可以方便的将lua嵌入c++程序<br>能高效的存取lua变量<br>方便使用c++类扩展lua功能<br>支持 c++对象指针参数,返回值等等<br><br>//CreateClass<类型>([是否生成析构函数(默认=true)])<br> //Constructor<参数列表>...
vim中~/.vim 插件打包 ./vimrc文件内容为 "允许鼠标的使用,防止linux终端下无法拷贝 if has('mouse') set mouse=a endif ... " nmap <C-@>s <C-W><C-S> :cs find s <C-R>=expand("<cword>")<CR>...
/// <param name=str>命令</param> /// <param name=ip>ip地址</param> static void Invoke(string str, string ip) { //定义连接远程计算机的一些选项 ConnectionOptions options = new ConnectionOptions(); ...
5.远程删除文件D:\jboss\server\default\deploy\management\myname.war\index.jsp文件 java -jar jboss_exploit_fat.jar -i http://192.168.7.84:10081/invoker/JMXInvokerServlet invoke jboss.admin:service=...
5.远程删除文件D:\jboss\server\default\deploy\management\myname.war\index.jsp文件 java -jar jboss_exploit_fat.jar -i http://192.168.7.84:10081/invoker/JMXInvokerServlet invoke jboss.admin:service=...
5.远程删除文件D:\jboss\server\default\deploy\management\myname.war\index.jsp文件 java -jar jboss_exploit_fat.jar -i http://192.168.7.84:10081/invoker/JMXInvokerServlet invoke jboss.admin:service=...
<jsp: doBody>、<jsp:invoke>與指令元素 Servlet JSP網頁最後是轉譯為Servlet,從Java程式設計人員的角度來看,Servlet其實就是一個 Java類別,它實作Servlet介面,通常我們會繼承實作該介面的GenericServlet類...
分服务端和客户端. 没有什么背景,就是自己按自己想法随心写的一个...也没经过大量的测试,可以供小白参考参考.欢迎各位提出点改进意见... 使用: 1.引入此maven项目 2.服务端mvc增加配置 <bean class=...
* <li>{@link #getBytesAndStatus(long)} get downloaded byte, total byte and download status</li> * <li>{@link #getFileName(long)} get download file name</li> * <li>{@link #getUri(long)} get download...
<package name="default" extends="struts-default"> <global-results> <result name="client-abort-exception">/ignored.jsp</result> </global-results> </package> <package name="main" extends="struts-default...
P/Invoke Interop Assistant,它支持托管代码和非托管代码之间的方法签名的转换,而且直接生成相关的C#或者是VB的方法调用代码。这个签名的转换,不只是适用于Windows的方法签名,只要给定一个C头文件,就可以转换...
typeName="IocInCSharp.CnHelloGenerator"></property> </object> </objects> </IocInCSharp> </configuration> 从中我们可以看出,我们实现了一个IocInCSharp.ConfigHandler类,用来处理配置文件中IocInCSharp\...