您的位置:首页 > 编程语言 > Java开发

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

2015-05-17 12:54 387 查看

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>
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tag jstl 国际化 java web jsp