Java web基础总结九之—— jsp标签

Java web基础总结九之—— jsp标签

JSP标签也称之为Jsp Action,在前面讲过,jsp的设计目的就是作为表现层。我们希望JSP页面仅用作数据显示模块,不要嵌套任何java代码引入任何业务逻辑,但在实际开发中不引入一点业务逻辑是不可能的,但引入业务逻辑会导致页面出现难看java代码。jsp的标签就是为了解决这个问题。所以jsp页面中也内置了一些标签(这些标签叫做jsp标签),开发人员使用这些标签可以完成页面的一些业务逻辑。我们也可以开发自定义标签,使jsp页面不出现一行java代码。

一.jsp的内置标签

jsp的内置标签是sun公司在jsp页面中也内置的一些标签,不需要通过taglib指令导入标签库,直接可以使用的。下面是一些常用的内置标签。

1. <jsp:include>标签

<jsp:include>标签的作用是把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,由于是在JSP页面执行时的引入,所以被称为动态引入。

语法:<jsp:include page="URL | <%=expression%>"flush="true|false" />

page属性用于指定被引入资源的相对路径,它也可以通过执行一个jsp表达式来获得。flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。

<jsp:include>与include指令有很大的区别。<jsp:include>标签是动态引入,<jsp:include>标签涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并。而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。他们的共同点是,它们都会把两个JSP页面内容合并输出,所以这两个页面不要出现重复的HTML架构标签,否则输出给客户端的内容将会是一个格式混乱的HTML文档。

2.  <jsp:forward>标签

<jsp:forward>标签用于把请求转发给另外一个资源。语法:

<jsp:forwardpage="URL | <%=expression%>" />

其中的page属性用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式来获得。

3.  <jsp:param>标签

<jsp:param>标签可以看做是前两个标签的子标签。当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数。<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。

与<jsp:include>标签组合使用时的语法:

<jsp:includepage="URL | <%=expression%>">

<jsp:paramname="parameterName" value="parameterValue|<%= expression%>" />

</jsp:include>

与<jsp:forward>标签组合使用时的语法:

<jsp:forwardpage="URL | <%=expression%>">

<jsp:paramname="parameterName" value="parameterValue|<%= expression%>" />

</jsp:include>

4.  <jsp:useBean>标签

<jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象:如果存在则直接返回该JavaBean对象的引用。如果不存在,则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。

常用语法:

<jsp:useBeanid="beanName" class="package.class"

scope="page|request|session|application"/>

其中的id属性用于指定JavaBean实例对象的引用名称和其存储在域范围中的名称。class属性用于指定JavaBean的完整类名(即必须带有包名)。scope属性用于指定JavaBean实例对象所存储的域范围,值只能是page、request、session和application等四个值中的一个,默认值是page。

二.Jstl标签库

JSTL是JSP StandardTag Library的缩写。它是SUN公司发布的一个针对JSP开发的新组件。JSTL允许你使用标签(tags)来进行JSP页面开发,而不是使用java代码方式开发。JSTL几乎能够做到传统JSP java代码能做的任何事情。

JSTL标签根据其功能可以分为以下几种类型:

1. 核心标签(Core Tags)

核心标签以c为前缀,需要使用taglib指令导入标签库:

<%@ tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c" %>

举个常见的例子,<c:remove>标签:

<c:remove>标签用于删除四个Web域中的属性。

其语法格式如下:

<c:remove var="varName"

[scope="{page|request|session|application}"]/>

2.  格式化标签(Formatting tags),也称为国际化标签。

JSTL格式标签可以用来格式化和显示文本,日期,时间和数字的,进行国际化操作。以fmt为前缀,需要使用taglib指令导入标签库:

<%@ taglibprefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

例如,格式化数字的<fmt:formatNumber>标签:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
 <html>
<head>
  <title>JSTL fmt:formatNumberTag</title>
</head>
<body>
<h3>NumberFormat:</h3>
<c:setvar="num" value="120000.2309" />
<p>FormattedNumber: <fmt:formatNumber value="${num}"
           type="currency"/></p>
</body>
</html>

输出的结果是:

FormattedNumber: £120,000.23

3.  SQL标签(SQL tags)

JSTL的SQL标签库标签可以用来代替操作关系型数据库的java代码,

以sql为前缀,需要使用taglib指令导入标签库:

<%@ taglibprefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

例如,使用<sql:setDataSource>标签配置数据库的数据源:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/sql"prefix="sql"%>
<html>
<head>
<title>sql Tag</title>
</head>
<body>

<sql:setDataSourcevar="snapshot" driver="com.mysql.jdbc.Driver"
     url="jdbc:mysql://localhost:3306/test"
     user="root"  password="root"/>
</body>
</html>
4.  XML标签(XML tags)

JSTL XML标记用于在jsp中创建和操作XML文档。可以实现XML解析,转换XML数据等。以xml为前缀,需要使用taglib指令导入标签库:

<%@ taglib prefix="x"uri="http://java.sun.com/jsp/jstl/xml" %>

还需要把XercesImpl.jar和xalan.jar这两个jar包复制到<Tomcat安装目录> 的\lib目录。由于使用的比较少,就不多说了.

三.开发自定义标签库

要开发自定义的标签移除jsp页面中的java代码,需要完成以下两个步骤:首先编写一个实现Tag接口的Java类(标签处理器类)。然后编写标签库描述符(tld)文件,在tld文件中对标签处理器类进行描述。

1. 实现了Tag接口的自定义标签处理器的执行流程

JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用下面的方法。

public voidsetPageContext(PageContext pc), JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信。

public void setParent(Tag t),setPageContext方法执行完后,WEB容器接着调用的setParent方法将当前标签的父标签传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent方法的参数值为null。

public int doStartTag(),调用了setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法。

public int doEndTag(),WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。

public void release(),通常WEB容器执行完自定义标签后,标签处理器会驻留在内存中,为其它请求服务器,直至停止web应用时,web容器才会调用release方法。

由于实现Tag接口完成自定义标签有些繁琐,所以在JSP 2.0中定义了一个更为简单的SimpleTag接口来实现标签的功能。实现SimpleTag接口的标签通常称为简单标签。

2. 实现一个简单的输出HelloWorld的自定义标签。
(1).首先编写一个实现了Tag接口的标签处理器类。

HelloworldTag.java代码如下:

public class HelloworldTag implements Tag {

	private PageContext pageContext;

	public int doStartTag() throws JspException {

		HttpServletRequest request = (HttpServletRequest) 

pageContext.getRequest();
		JspWriter out = pageContext.getOut();

		String string = "Hello World";
    	try {
			out.write(string);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}

		return 0;
	}

	public int doEndTag() throws JspException {
		return 0;
	}
	public Tag getParent() {
		return null;
	}
	public void release() {
	}
	public void setPageContext(PageContext arg0) {
		this.pageContext = arg0;
	}
	public void setParent(Tag arg0) {
	}
}

(2). 在web-inf/目录下新建tld文件,并且在tld文件中对标签处理器进行描述。

hello.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">

    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>SimpleTagLibrary</short-name>
    <uri>/hello</uri>

   <tag>
        <name>helloWorld</name>
		<tag-class>com.cc.HelloworldTag</tag-class>
		<body-content>empty</body-content>
    </tag>
</taglib>

(3). 在jsp页面中使用taglib指令导入标签库,并使用自定义标签。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/hello" prefix="hello" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>输出hello world</title>
  </head>

  <body>
     输出:<hello:helloWorld/>
  </body>
</html>
时间: 2024-10-05 10:09:23

Java web基础总结九之—— jsp标签的相关文章

Java web基础总结八之—— jsp基础

Java web基础总结八之-- jsp基础 一.什么是jsp? JSP是Java ServerPages的缩写,它和servlet一样,都是用于开发动态web资源的技术.在servlet中拼凑输出html代码时,非常麻烦.而JSP的最大的特点在于,写jsp就像在写html,但是html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,开发动态资源. 现在随着前端越来越重要,很多的公司都会采取前后端分离的开发模式.即后端只提供返回json等格式的接口,而前端开发人员则通过对后端接

Java web基础总结十之—— jsp EL表达式

Java web基础总结十之-- jsp EL表达式 一.EL表达式简介 EL 是Expression Language的缩写.在jsp中有很大的作用,EL主要有以下一些作用:获取数据,替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象.获取数据.还可以执行运算,利用EL表达式可以在JSP页面中执行一些基本的关系运算.逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算,例如 ${user==null}.还可以获取web开发常用的jsp的隐式对象,利用这些隐式对象,we

Java Web基础(HTML、Servlet/JSP)

要成为牛逼的JavaWeb程序员, Java Web的基础非常重要,现在有各种成熟的设计框架例如JQuery.Spring.Struts.Mybatis,将Java Web基础的复杂且通用的逻辑进行封装,减少了程序员的代码量,提高了编码效率,但是这些框架非常不利于我们了解Java Web底层如何运作,甚至不知道HTML(HyperText MarkupLanguage).HTTP(HyperText Transfer Protocol).URL(Uniform Resource Locator)

JAVA Web基础2-JSP九大内置对象

在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创建就会特别的繁琐.SUN公司因此在设计jsp时,在jsp页面加载完毕之后自动帮开发者创建好了这些对象,开发者只需要使用相应的对象调用相应的方法即可.这些系统创建好的对象就叫做内置对象.一.九大内置对象1.内置对象/作用域:            1, application ------全局作用域            

JAVA Web基础 EL表达式与JSTL标签库

一.EL表达式语言1.EL表达式全称expression language,用于在JSP页面获取其内置对象的内容语法:${...}在jsp中page指令有一个属性是isELIgnored, 用来标记此页面是否忽略EL表达式, 默认为false,即不忽略2.用法说明常规写法举例:<%= request.getAttribute("test")>EL表达式写法:${test}//当作用域属性名都是唯一时可以这么写            ${requestScope.test}/

Java Web基础 --- Jsp 综述(上)

摘要: J2EE是一套规范,而Servlet/Jsp是J2EE规范的一部分,是Tomcat的主要实现部分.在最初的应用实践中,当用户向指定Servlet发送请求时,Servlet利用输出流动态生成HTML页面,这导致Servlet开发效率极为低下.JSP技术通过实现普通静态HTML和动态部分混合编码,使得逻辑内容与外观相分离,大大简化了表示层的实现,提高了开发效率.本文以JSP的本质是Servlet为主线,结合JSP转译后所得的Servlet,详细探讨了JSP的原理.执行过程.脚本元素.编译指令

Java Web基础 --- Jsp 综述(下)

摘要: JSP脚本中包含九个内置对象,它们都是Servlet-API接口的实例,并且JSP规范对它们进行了默认初始化.本文首先通过一个JSP实例来认识JSP内置对象的实质,紧接着以基于请求/响应架构应用的运行机制为背景,引出JSP/Servlet的通信方式与内置对象的作用域,并对每个内置对象的常见用法进行深入介绍和总结. 一. JSP 九大内置对象概述及相关概念说明 JSP脚本中包含九个内置对象,这九个内置对象都是 Servlet API 接口的实例,并且JSP规范对它们进行了默认初始化(由 J

Java Web基础小结之Jsp JavaBean

Java Web基础小结In computing, Java Web Start (also known as JavaWS, javaws or JAWS) is a framework developed by Sun Microsystems (now Oracle) that allows users to start application software for the Java Pl... http://bbs.chinaacc.com/forum-2-3/offset-1/to

从Java Web 基础看SSH架构

Java Web开发现在已然成为大型Wed项目的标准,之前一直盲目的使用框架,往往知其然不知其所以然.在经过一段时间的学习与开发,大概掌握了其脉络的基础上,对其做一定总结. 一.Java Web 基础 一个典型的Java Web项目往往包含这些元素:Jsp页面.Servlet.Listener.Filter,以及配置文件web.xml.其中: Jsp和Servlet基本是一回事,主要用来响应客户端的请求.当然Jsp中可以直接嵌入HTML标签,主要还是负责展现. Listener则是负责监听Web