博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建自定义的jsp标签
阅读量:4290 次
发布时间:2019-05-27

本文共 3678 字,大约阅读时间需要 12 分钟。

创建自定义的jsp标签

 

创建一个自定义的jsp标签hello,用于输出字符串“helloEveryone”。

hello标签位于一个名为mytaglib的标签库(Tag Library),

hello.jsp使用mytaglib标签库中的hello标签输出“helloeveryone”。

步骤如下:

1、编写用于处理hello标签的类,名为HelloTag类,代码如下:

package com.tag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.TagSupport;public class HelloTag extends TagSupport{	@Override	public int doEndTag() throws JspException {		try {			pageContext.getOut().print("helloEveryone");		} catch (IOException e) {			e.printStackTrace();		}		return EVAL_PAGE;	}}

2、创建一个TLD(Tag Library Descriptor,标签库描述符)文件,名为mytaglib.tld。定义mytaglib标签库和hello标签。这个文件的存放位置为WEB-INF/mytaglib.tld(servlet规范规定,TLD文件在web应用中必须存放在WEB-INF目录或者子目录下,但不能存放在WEB-INF/classes目录和WEB-INF/lib目录下,)。代码如下:

1.1
2.1
mytagl
tagmylib
hello
com.tag.HelloTag
empty
Just Say Hello

3、在hello.jsp文件中使用hello标签步骤:

  i.  首先,在hello.jsp中引用mytaglib标签库的taglib标签的指令,代码如下:

<%@ taglib uri="tagmylib" prefix="my"%>

其中uri="tagmylib"为mytagli.tld文件中的<uri>tagmylib</uri>

 ii.然后,使用hello标签,如:<my:hello/>,这里的hello是mytaglib.tld文件中的name,

这个name决定了调用哪个tag-class类中的doEndTag方法输出的内容

二、整个项目的架构图,如下:

图中各个文件的代码分别如下:

1、login.html代码如下:

登陆
用户名:
密码:
2、hello.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><%@ taglib uri="tagmylib" prefix="my" %>
Insert title here
:<%= request.getAttribute("username") %>
3、mytagli.tld代码如下:

1.1
2.1
mytagl
tagmylib
hello
com.tag.HelloTag
empty
Just Say Hello

4、DispatcherServlet.java代码如下:

package com.servlet;import java.io.IOException;import javax.servlet.GenericServlet;import javax.servlet.RequestDispatcher;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;@SuppressWarnings("serial")public class DispatcherServlet extends GenericServlet {	String target = "/hello.jsp" ;	@Override	public void service(ServletRequest request, ServletResponse response)			throws ServletException, IOException {		request.setCharacterEncoding("utf-8");		String username = request.getParameter("username") ;		String password = request.getParameter("password") ;				request.setAttribute("username", username);		request.setAttribute("password", password);				ServletContext context = getServletContext() ;		RequestDispatcher dispatcher = context.getRequestDispatcher(target) ;		dispatcher.forward(request, response);	}}
5、HelloTag.java代码如下:

package com.tag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.TagSupport;public class HelloTag extends TagSupport{	@Override	public int doEndTag() throws JspException {		try {			pageContext.getOut().print("helloEveryone");		} catch (IOException e) {			e.printStackTrace();		}		return EVAL_PAGE;	}}
6、web.xml代码如下:

HelloTag
login.html
index.htm
index.jsp
default.html
default.htm
default.jsp
dispatcher
com.servlet.DispatcherServlet
dispatcher
/login
启动项目,访问网址:http://localhost:8081/HelloTag/login.html,得到页面如下;

点击submit提交后页面如下:

你可能感兴趣的文章
JVM发生内存溢出的8种原因、及解决办法
查看>>
SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作
查看>>
高性能负载均衡:nginx搭建tomcat集群
查看>>
Spring切面中的正则表达式
查看>>
一直再说高并发,多少QPS才算高并发?
查看>>
Git恢复之前版本的两种方法reset、revert(图文详解)
查看>>
Maven打包的三种方式
查看>>
电商场景:并发扣库存,怎么保证不超卖又不影响并发性能
查看>>
分布式事务处理方式总结
查看>>
延迟队列有哪些实现方案?说说你的看法
查看>>
厉害了!我们老大半小时把我的springboot项目并发提升几倍
查看>>
Spring 中Bean 的生命周期
查看>>
为什么要用枚举实现单例模式(避免反射、序列化问题)
查看>>
微服务架构下的分布式限流方案思考
查看>>
全网最详细的一篇SpringCloud总结
查看>>
消息中间件中的有序消息,其实是排队但是不能插队
查看>>
不知道分布式事务,还想进互联网大厂
查看>>
mysql为什么使用B+树作为索引的结构
查看>>
mysql索引总结(1)-mysql 索引类型以及创建(文章写的不错!!!)
查看>>
聊聊CAS - 面试官最喜欢问的并发编程专题
查看>>