1、提出问题:

我们经常会看到这样的jsp页面代码:

浏览器显示:

为什么会在页面输出:Hello World  ,${per}究竟是如何找到“Hello World”的呢?

2、分析问题:

要想解决上述疑问,首先要试试自己能不能自定义出上面的标签。

比如我想定义<myout:demo print="${per}"/>拥有打印出EL表达式值的功能。

同前面几章一样,自定义标签我分为几个部分:

第一部分:定义标签的地方(*.tld)。

<?xml version="1.0" encoding="utf-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>myout</short-name>
<!-- 这就是比上面的demo.tld文件多添加了一行 -->
<uri>/demo</uri>
<tag>
<name>demo</name>
<tag-class>com.tag.support.ElTagDemo</tag-class>
<body-content>empty</body-content>
<attribute>
<name>print</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

第二部分:tld文件中的实现类

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class ElTagDemo extends SimpleTagSupport{ private String print; public String getPrint() {
return print;
} public void setPrint(String print) {
this.print = print;
} @Override
public void doTag() throws JspException, IOException {
this.getJspContext().getOut().write(print.toString());
} }

第三部分:前台页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="myTag" uri="/demo" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("per","Hello World");
%>
<myTag:demo print="${per}"/>
</body>
</html>

浏览器显示:

就这么简单

注意:这里直接把"per"(姑且成为key)在作用域中对应的值“Hello World”(姑且叫value)赋给了属性print,所有在后台直接打印print属性就行了。

但是这与前面第二天的例子不一样,前面是把“arr”字符串赋给了属性items,所以要取出”arr”对应的值还要通过

调用jspContext.getAttribute(items);方法,这里要注意一下。

扩充:如果前台页面变成这样呢?看代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="myTag" uri="/demo" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
UserInfo user = new UserInfo();
user.setName("jack");
user.setAge(11);
request.setAttribute("per",user);
%>
<myTag:demo print="${per}"/>
</body>
</html>

这样在后头自定义标签处理类中就要把print的类型定义为UserInfo

最新文章

  1. 用Python组合Celery Redis RabbitMQ进行分布式数据抓取
  2. Mahout之Canopy Clustering深入理解
  3. 元数据标签Embed
  4. 数列极限---和Gauss(取整)函数有关
  5. C#和asp.net中链接数据库中 参数的几种传递方法
  6. SpringMVC06以对象的方式获取前台的数据
  7. (转)ie -ms-interpolation-mode: bicubic 属性详解
  8. Spring 3 调度器示例 —— JDK 定时器和 Quartz 展示
  9. js-权威指南学习笔记8
  10. python识别验证码——PIL,pytesser,pytesseract的安装
  11. SQL入门(1): 创建/查询/更新/连接/视图/SSMS简介
  12. MySQL 5.7开启二进制日志注意事项
  13. lucene的CRUD操作Document(四)
  14. Directory 类
  15. XMLHttpRequest.withCredentials
  16. ddmlib问题总结——同步获取设备信息
  17. 使用ASP.NET读取word2003文档
  18. springboot 中使用Druid 数据源提供数据库监控
  19. 【2018年12月10日】A股最便宜的股票
  20. JVM jstat 详解

热门文章

  1. django项目在uwsgi+nginx上部署遇到的坑
  2. 云计算之路-阿里云上:在SLB上部署https遇到的问题及解决方法
  3. N宫格
  4. github&#160;readme.md&#160;添加图片
  5. 查看 wordpress 版本以及如何隐藏版本号
  6. Leetcode 553.最优除法
  7. spring 解决中文乱码问题
  8. 前端构建工具gulpjs的使用介绍及技巧(转)
  9. http content-type总结
  10. 觉醒力量 (hidpower)