JAVAWEB之自定义TAG开发
Posted 小熊vip
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVAWEB之自定义TAG开发相关的知识,希望对你有一定的参考价值。
在javaweb开发中我们可能经常会用到basePath这个参数,没错,当我们新建一个jsp页面的时候,myeclipse会自动帮我们生成下面这段代码:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
起初也许你看他不爽,后来发现这个东西确实很有用哦,但是我们仔细数了数这代码行数有点多,而且还是jsp页面嵌套Java代码实现的,看起来有些不伦不类(话又说回来,这个用肯定是没有问题的)。
现在我们想把这段代码抽离出来,用更简洁的方式实现同样的功能,即提供basePath参数。我们知道jsp页面中的jstl标签库功能强大,我们只需要在jsp页面引入这么一条代码就可以使用功能如此强大的标签。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
同样的,我们打算也用这种方式实现,不过jstl标签库中并没有提供basePath参数,不然也不用我们在这大费周章自定义Tag了。好了废话不多说。我们来实际操作吧:
新建一个WebProject,名字自己定,这里我用Tag
然后我们新建一个文件夹用来存放自定义标签文件(.tld文件),名字自己定,这里我就用WEB-TAG了
新建一个tld文件,名字自己定,这里我就用tools.tld了
taglib标签的内容如下:
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>base</short-name>
<tag>
<name>basePath</name>
<tag-class>com.xy.tag.BasePathTag</tag-class>
<body-content>jsp</body-content>
</tag>
</taglib>
新建一个类BasePathTag 继承自TagSupport
package com.xy.tag;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class BasePathTag extends TagSupport
private static final long serialVersionUID = 1L;
@Override
public int doEndTag() throws JspException
return 0;
@Override
public int doStartTag() throws JspException
HttpServletRequest request = (HttpServletRequest)this.pageContext.getRequest();
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
JspWriter jspw = this.pageContext.getOut();
try
jspw.print(basePath);
catch (IOException e)
e.printStackTrace();
return 0;
是不是在这里看到了这两行熟悉的语句:
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
没错,我们在这里获取到了basePath参数,并借助JspWriter写到jsp页面,以什么方式写呢?当然是标签的形式,看看我们的tools.tdl文件,不能猜出是其中的basePath这个标签吧,毕竟我在里面就写了一个tag。。。。。。
ok,准备工作基本上做好了,下面我们开始在jsp页面中测试效果,打开项目的index.jsp页面,在最上面加入下面这行语句(就和引入jstl标签库一样)
<%@ taglib prefix="Cfg" uri="/WEB-TAG/tools.tld" %>
简单说一下里面的两个参数,prefix指的是前缀,也就是我们使用标签的时候的前缀,uri指的是我们的标签库文件路径。具体说我们如何使用就是下面这段代码了:
<Cfg:basePath/>
你没有看错,就是这么简单!现在我们可以删除jsp文件中的那五行代码了。运行后即可正确显示:
以上是关于JAVAWEB之自定义TAG开发的主要内容,如果未能解决你的问题,请参考以下文章
Django之自定义标签,过滤器,以及inclusion_tag