Jsp开发常用标签总结


JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1]  是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

1 Jsp标签作用

Jsp标签主要在jsp页面执行java代码,用于替换jsp脚本。

2 Jsp标签分类

Jsp内置标签(动作标签): 不需要导入标签库

JSTL标签库:  需要导入标签库

自定义标签: 需要导入标签库


3 Jsp内置标签

 转发标签

  用于转发

  参数标签

 包含标签

用于包含其他页面

 

注意:

1)其原理是包含与被包含的页面先各自翻译成独立的java源文件,然后再运行时合并再一起。(先翻译再合并),这叫动态包含

 

  ==== 静态包含  vs   动态包含====

1)原理不一样

a)静态包含(先合并再翻译) 

b)动态包含(先翻译再合并)

2)语法不一样

a)静态包含( includ指令:  <%@include%>

b)动态包含 (include标签:

3)参数传递不同

a)静态包含不能传递参数

b)动态包含可以向被包含页面传递参数

4 JSTL标签

jstl java starardard tag libarary  java标准标签库

 

以前: jsp2.0以前jstl不属于java规范。属于第三方的工具。需要导入jar

现在: jsp2.0 jstl纳入javaee规范。不需要导入jar包。

 

JSTL标签库分类:

1)核心标签库 (core/c  ) 使用最频繁的

2)国际化互标签库(fmt

3)EL函数库 (fn

4)数据库标签库(sql)基本不用

5)Xml标签库(x)基本不用

5 JSTL使用步骤

1)确保jstl的支持jar包已经导入到项目中

2)在jsp页面的顶部导入标签库

<%@taglib uri="tld文件的路径" prefix="标签库缩写"%>

 

tld文件: 标签库的声明文件(每套标签都有一个tld文件)


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

3)使用标签库中的标签

 

6 核心标签库(开发中经常使用)

保存数据:

<c:set>c:set>

获取数据

    <c:out value="">c:out>

单条件判断:

    <c:if test="">c:if>

多条件判断

   <c:choose>c:choose>

    <c:when test="">c:when>

    <c:otherwise>c:otherwise>  

数据遍历

  <c:forEach>c:forEach>

    <c:forTokens items="" delims="">c:forTokens>

7 自定义标签

自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。

8 自定义标签步骤

1)编写一个标签处理器程序,继承SimpleTagSupport类(使用自定义标签显示ip


public class ShowIpTag extends SimpleTagSupport{


/**

 * 执行标签

 */

@Override

public void doTag() throws JspException, IOException {

//得到request对象

PageContext pageContext = (PageContext)this.getJspContext();

HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();


//得到客户ip

String ip = request.getRemoteHost();


//写出浏览器

pageContext.getOut().write("自定义标签实现获取客户端IP地址:"+ip);

} 

}

 

2)在WEB-INT目录下建立tld文件,例如test.tld,内容如下:


xml version="1.0" encoding="UTF-8" ?>

 

<taglib xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"

    version="2.1">

 

  

  <tlib-version>1.1tlib-version>

  

  <short-name>testshort-name>

  

  <uri>http://gz.test.cnuri>

 

  

  <tag>

  

    <name>showIpname>

   

    <tag-class>gz.test.c_tag.ShowIpTagtag-class>

    

    <body-content>scriptlessbody-content>

  tag>

taglib>

 

3)在jsp页面中导入自定义标签库,再使用标签库中的标签


<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@taglib uri="http://gz.itcast.cn"  prefix="itcast"%>

DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head> 

    <title>第一个自定义标签title>  

  head>

  

  <body>

    <% 

    //得到客户IP地址

    //String ip = request.getRemoteHost();

    //out.write("客户的IP地址为: "+ip);

     %>

     

     <test:showIp>test:showIp>

  body>

html>

9 自定义标签作用

1)控制是否执行标签体内容

执行:

jspFragment.invoke(null) 把标签体内容输出到浏览器

不执行:

什么都不做!!! (不执行jspFragment.invoke(null)

2)控制是否执行标签余下的内容

执行:  

什么都不做!!!

不执行:

抛出SkipPageException异常即可!

3)控制重复出现执行标签体内容