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内置标签
<jsp:forward/> 转发标签
用于转发
<jsp:param/> 参数标签
<jsp:incude/> 包含标签
用于包含其他页面
注意:
1)其原理是包含与被包含的页面先各自翻译成独立的java源文件,然后再运行时合并再一起。(先翻译再合并),这叫动态包含
==== 静态包含 vs 动态包含====
1)原理不一样
a)静态包含(先合并再翻译)
b)动态包含(先翻译再合并)
2)语法不一样
a)静态包含( includ指令: <%@include%> )
b)动态包含 (include标签: <jsp: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)使用标签库中的标签
<c:set></c:set> |
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.1</tlib-version> <!-- 标签库的缩写:简单名称 --> <short-name>test</short-name> <!-- tld文件的唯一标记 --> <uri>http://gz.test.cn</uri> <!--标签定义 --> <tag> <!-- 标签名称 --> <name>showIp</name> <!-- 标签对应的处理器程序 --> <tag-class>gz.test.c_tag.ShowIpTag</tag-class> <!-- 标签体输出格式 --> <body-content>scriptless</body-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)控制重复出现执行标签体内容