『壹』 jsP的標簽有哪些如何使用jsp標簽
html頁面使用jsp標簽需要把html文件變成jsp文件才可以的。
1、原來html代碼如下:
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試html轉換jsp</title>
</head>
<body>
這是一個測試頁面
</body>
</html>
2、直接在原html頁面最頂端添加如下代碼:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
3、修改文件後綴名
點擊原testPage.html文件,按F2,修改後綴名為.jsp保存後就變成jsp文件了。
JSP(全稱Java Server Pages)是由Sun Microsystems公司倡導和許多公司參與共同創建的一種使軟體開發者可以響應客戶端請求,而動態生成HTML、XML或其他格式文檔的Web網頁的技術標准。
JSP技術是以Java語言作為腳本語言的,JSP網頁為整個伺服器端的Java庫單元提供了一個介面來服務於HTTP的應用程序。
『貳』 jsp標簽有哪些
JavaBean其實就是一個類,一個JavaBean實例叫做:Bean,它通過具體的方法實現相應的邏輯功能,並且為外部操作提供介面,外部JSP通過這些介面可以方便地使用它實現邏輯功能,這樣就實現了代碼的重用以及邏輯功能與頁面顯示層分離,它的好處就是解決了在JSP頁面中實現邏輯功能會出現相同的代碼在很多文件中出現導致不利於維護和更新的缺陷,並且可以邏輯功能程序員和頁面編輯員的分工,讓其各自在各自的領域里全心工作。
自定義標簽:
自定義標簽其實也是一個類,它封裝了相應的邏輯功能,和JavaBean很類似,但是它們之間存在很大的區別:JavaBean通過提供介面供外部操作調用實現邏輯功能,而自定義標簽是通過標簽的形式為外部操作實現邏輯功能,例如JSP已有的標簽:<jsp:forward>,它的好處就是調用十分方便,形式:<jsp:forward page="轉向頁面的url">就實現了其功能,其中的「JSP」代表的是標簽庫名,「forward」代表的是標簽名,自定義標簽的最終形式也很類似:<a:b>其中的a代表的是自定義庫名,b代表的是自定義標簽名,當然它是包含在a中的。
舉例:
<%@ page contentType="text ml;charset=GBK"%>
<%@ taglib prefix="mytag" uri="" %>
// mytag表示庫名,值表示自定義標簽的地址,這個語句也表明指令<%@ taglib prefix=" " uri=" " %>的用法
<html>
<head><title>簡單標簽實例</title></head>
<body>
<h3>調用mytag標簽庫中的print標簽</h3>
調用print標簽的結果:<mytag:print />//對自定義標簽print的使用,它存在於自定義標簽庫mytag中,其完整形式為:<mytag:print >
</body>< ml>
自定義標簽,它可以在JSP頁面中省略很多的代碼,就比如說連接資料庫來說,只要一個標簽,加兩個屬性,就連接OK.
有些輸出需要一大段代碼來實面,而使用自定義標簽,只需一個標簽就可以顯示出來,
不過.這個自定義標簽,還是有一定的不足,就是有些東西是死的,不如自己自己的寫的程序那麼好控制.
所以一般我都比較少用.
『叄』 怎麼樣使用jsp中自定義標簽
jsp自定義標簽用法,供大家參考,具體如下:
什麼是標記
使用HTML語言我們可以這樣去編輯我們的網頁:
<HTML>
<HEAD>
<TITLE>
HELLO WORLD
</TITLE>
</HEAD>
<BODY>
HELLO WORLD
</BODY>
</HTML>
在這里我們把</HEAD>,<TITLE>,<BODY>稱為標記。HTML 標記( HTML Markup)是HTML文檔的控制語言,用於指定瀏覽器顯示和列印文檔的方式.它是用小於號"<"和大於號">"括起來的短語和符號,如 <Html>、</Body>等。許多HTMl標記以成對的方式出現,如<TITLE>< /TITLE>、<Body></Body> 等。在JSP中我們也可以定製自己的標記,以供JSP頁面使用,如下例所示:
<!—login.jsp-->
<%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>
<html>
<head>
<title>login</title>
</head>
<body>
<tagclass:login width="200" height= "100" >
</tagclass:login>
</body>
</html>
在上例中</tagclass:login>就是一個JSP定製標記符。widtht、height是這個標記的屬性。<%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>是一個標記庫定義指令,在稍後我們將會討論。在JSP中定製標記符,實質上就是以標記的形式封裝了一個俱有獨立功能的Java類。標記的使用減少了直接嵌入JSP頁面的Java代碼,方便了頁面的布局,並且有利於代碼的復用,提高了開發的效率。
JSP伺服器解析標記的過程
那麼當一個標記被嵌入JSP頁面後,JSP伺服器是如何對這個標記進行解析的呢?各對象的含義如下所示:
Client: 表示客戶端。
JSP-Server:JSP伺服器。
JSP-Page:JSP頁面。
TLD: 標記庫描述文件,定義標記和標記的各種屬性和處理文件等。
TagClass 標記處理程序
當一個用戶訪問一個JSP頁面時,這個請求被發送到JSP伺服器,JSP伺服器會根據這個請求去調用相應的頁面,如果這個頁面中有自定義的標記, JSP服務就會根據頁面指令<%@ taglib>去訪問TLD得到處理程序的相關信息,接著調用該處理程序的構造器方法,啟動標記符處理程序,並讀取標記符的屬性和相應值。對每個沒有設置屬性的,調用相應的set方法。當標記符第一次使用時,它的任何屬性都不會做過設置,因此對每個屬性都調用set方法。屬性設置完以後,JSP伺服器調用處理程序的doStartTag(),然後再調用doEndTag()方法。最後JSP伺服器會繼續處理剩下的頁面,在頁面結尾調用release ()方法,清理佔用的所有資源。
TLD文件
TLD(TLD:Tag Library Descriptor標記庫描述符)文件,標準的XML格式的標記定義文件,被用來存放標記符的信息,下面就是一個典型的TLD文件。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!—XML的版本及其字元集-->
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
" http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<!—文檔類型定義-->
<taglib>
<!—此標記說明我們開始描述一個標記庫-->
<tlibversion>1.0</tlibversion>
<!—標記庫的版本-->
<jspversion>1.1</jspversion>
<!—所使用的JSP的版本-->
<shortname>tagclass</shortname>
<!—預設的名稱-->
<tag>
<name>login</name>
<!—標記的名稱-->
<tagclass>
tagclass.login.login
<!—處理這個Tag的相應的類的名稱-->
</tagclass>
<info>
<!—對本標記符的描述-->
</info>
<attribute>
<!—開始定義標記的屬性-->
<name>height</name>
<!—屬性的名稱-->
<required>true</required>
<!—表示這個屬性是不是必須的-->
<rtexprvalue>true</rtexprvalue>
<!—表示這個屬性是否可以用JSP的程序段的結果輸出-->
</attribute>
<attribute>
<name>width</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
在這個TLD文件中定義了只有一個標記符的標記符庫,這個名為login的標記符會調用一個Applet以驗證用戶的合法性。處理這個標記的類就是 tagclass.login.login。width、height是這個標記的兩個屬性。屬性是在使用標記符時作為參數發送的值。我們可以在上面的示例中增加幾個標記,也可以為每個標記添加幾個屬性。我們開發標記符庫時不一定非要從頭開始,自己編寫一個全新TLD。我們可以使用某個集成的開發的環境,也可以修改上面的例子。
TagLib指令
那麼當JSP伺服器在解析一個標記符時,它是如何定義一個標記庫的呢?這就是TagLib指令的主要責任。
Taglib 指令
定義一個標記庫以及其自定義標記的前綴.
JSP 語法
復制代碼 代碼如下:
<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
例子
<%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>
<html>
<head>
<title>login</title>
</head>
<body>
<tagclass:login width="200" height= "100" >
</tagclass:login>
</body>
</html>
描述
<% @ taglib %>指令聲明此JSP文件使用了自定義的標記,同時引用標記庫,
也指定了他們的標記的前綴。 你必須在使用自定義標記之前使用<% @ taglib %>指令。
屬性
uri="URIToTagLibrary" :Uniform Resource Identifier (URI)根據標記的前綴對自定義的標記進行唯一的命名,URI可以是一個相對或絕對的路徑。
prefix="tagPrefix":在自定義標記之前的前綴。如上例中的</tagclass:login>
標記符的處理程序(Tag handle)
我們還是以一個例子來看下如何實現一個Tag handle。首先是看一下它的類圖:
讓我們再看一下它的代碼:
package tagclass.login;
import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.*;
import java.io.*;
public class login extends TagSupport
{
public login()
{
super();
}
public int doStartTag() throws JspTagException
{
JspWriter out = pageContext.getOut();
try
{
out.println("<APPLET CODEBASE=applet/login/ CODE=login.class width=200 height=100 > </APPLET>");
}
catch(Exception e)
{
}
return SKIP_BODY;
}
publicc int doEndTag()throws JsptagException
{
return EVAL_PAGE;
}
public void release()
{
super.release();
}
public void setWidth(String language)
{
this.width = width;
}
public String getWidth()
{
return this.width;
}
public void setHeight(String height)
{
this.height=height;
}
public String getHeight()
{
return this.height;
}
private String width;
private String height;
}
從以上我們可以看出,實現一個簡單的標記符處理程序有幾個要求:①增加一個類,使之繼承 java.Servlet.jsp.tagext.TagSupport類。這個類提供了java.Servlet.jsp.tagext.Tag介面所要求的所有的方法。另外,還需要使用一些基本的API,使JSP容器能夠調用我們自己提供的標記符處理程序。②必須為每個標記符屬性分別創建一個 get<attribute>和set<attribute>方法,JSP容器需要使用這些方法處理程序傳遞參數。③要為標記符處理程序創建一個構造器和自毀器。JSP需要使用構造器啟動處理程序。自毀器是在realease()方法中定義的。在處理程序的生命周期結束時,需要調用自毀器釋放所佔用的資源。④創建兩個名為doStartTag()和doEndTag()的方法,執行具體的處理和輸出動作。這兩個方法是在處理自定義標記符的起始位置和結束位置調用的。它們的返回值是在Tag Interface里定義的靜態int,這幾個靜態值分別是:
SKIP_BODY隱含0 :跳過了開始和結束標簽之間的代碼。
EVAL_BODY_INCLUDE隱含1:將body的內容輸出到存在的輸出流中
SKIP_PAGE隱含5 : 忽略剩下的頁面。
EVAL_PAGE隱含6:繼續執行下面的頁
當然標記符也有它自己的缺點。很不方便的封裝過程,有限的功能。對於一些不太復雜和功能單一的邏輯描述,需要傳遞的參數要求不高時,使用JSP標記,要方便的多。對於大多數的商業邏輯應用,還是使用bean要好的多,也宜於servlet控制。
附:文章中所用示例的完整代碼
JSP代碼:login.jsp
<%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>
<html>
<head>
<title></title>
</head>
<body>
<tagclass:login width="200" height= "100" >
</tagclass:login>
</body>
</html>
標記符描述庫:taglib.tld
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
" http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>tagclass</shortname>
<tag>
<name>login</name>
<tagclass>
tagclass.login.login
</tagclass>
<info>
</info>
<attribute>
<name>height</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>width</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
標記符處理程序:login.java
package tagclass.login;
import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.*;
import java.io.*;
public class login extends TagSupport
{
public login()
{
super();
}
public int doStartTag() throws JspTagException
{
JspWriter out = pageContext.getOut();
try
{
out.println("<APPLET CODEBASE=applet/login/ CODE=login.class width=200 height=100 > </APPLET>");
}
catch(Exception e)
{
}
return SKIP_BODY;
}
publicc int doEndTag()throws JsptagException
{
return EVAL_PAGE;
}
public void release()
{
super.release();
}
public void setWidth(String language)
{
this.width = width;
}
public String getWidth()
{
return this.width;
}
public void setHeight(String height)
{
this.height=height;
}
public String getHeight()
{
return this.height;
}
private String width;
private String height;
}
標記符處理程序中所使用的Applet : login.java
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class login extends Applet implements ActionListener
{
private String s_username;
private String s_userpassword;
private Button b_ok;
private Button b_register;
private Label l_username;
private Label l_userpassword;
private TextField t_username;
private TextField t_userpassword;
private GridLayout g_gridlayout;
public void init()
{
b_ok=new Button("ok");
b_register=new Button("register");
l_username= new Label("name");
l_userpassword=new Label("password");
t_username=new TextField();
t_userpassword=new TextField();
b_ok.addActionListener(this);
b_register.addActionListener(this);
g_gridlayout=new GridLayout(3,2,10,10);
this.setLayout(g_gridlayout);
//this.setBackground(Color.blue);
add(l_username);
add(t_username);
add(l_userpassword);
add(t_userpassword);
add(b_ok);
add(b_register);
}
public void actionPerformed(ActionEvent ev)
{
String s_label=ev.getActionCommand();
if (s_label.equals("ok"))
{
t_username.setText("name");
}
if (s_label.equals("register"))
{
t_userpassword.setText("password");
}
}
public void paint(Graphics g)
{
}
}
『肆』 jsp中的標簽、動作、動作標簽、標簽庫、標記、標准標簽
jsp標簽有三中:
指示標簽:<%@ page %>指示當前頁面的屬性和運行時所需資源,屬於靜態操作
例如:<%@ page import="java.util.*" %>導包
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
行為標簽:也可以說你提的動作標簽
腳本標簽:<% 腳本 %> <%! 聲明全局變數 %> <%= 表達式(屬性名) %>用於輸出到頁面
下面這個事html標簽,不要認為是jsp標簽
<ul>
<li><a href="">jsp標簽</a></li>
</ul>
動作:例如一個onclick觸發事件就是一個動作
動作標簽:有稱為jsp的行為標簽 有
<jsp:include page/>
<jsp:getProperty />
<jsp:setProperty />
<jsp:forward >
<jsp:useBean ></jsp:useBean>
<jsp:params></jsp:params>
<jsp:attribute name=""></jsp:attribute>
等
標簽庫:就是在jsp頁面引用才能使用的標簽,這樣的標簽屬於某一個系列的就稱為一個標簽庫
例如struts2自帶的標簽庫s標簽庫,同時標簽庫可以自己做的(由於技術有限,我現在只能看,嘿嘿)
標記:就是在jsp頁面中使用的特殊標簽形式(自己理解的),例如:上面提到的jsp指示標簽和腳本標簽的使用形式,就是標記的形式,同時還有注釋標記<!-- -->(這種注釋在頁面上通過查看源代碼查看到) 、<%! %>(這種注釋在頁面上通過查看源代碼查看不到)
標准標簽庫:還是標簽庫的意思,jsp頁面使用的c標簽就是jsp頁面使用標准外部標簽庫
技術有限 回答可能有偏差 大家一起交流啊 嘿嘿
『伍』 關於jsp裡面的標簽
<%! %> 就是注釋,表示的是這部分代碼不執行,但是網頁上有些代碼即使是這么注釋了,還是有執行的,具體的你會在編程中碰見。
<% %> 這部分就是來寫java代碼的,不過網頁中最好不要直接用java代碼。
<%= %>這部分主要是依靠request來獲得返回結果,可以是對象或者list之類的,
用法:<%=對象.對象的方法 %>來獲得我們需要的值。
『陸』 如何創建使用jsp自定義標簽
一.編寫java類繼承TagSupport或TagSupport
1) 提供屬性的set方法,
此後這個屬性就可以在jsp頁面設置。以jstl標簽為例
<c:out
value=""/>,這個value就是數據到tag之間的入口。所以tag裡面必須有一個setValue方法,具體的屬性可以不叫value。例如setValue(String
data){this.data = data;}
這個「value」的名稱是在tld里定義的。取什麼名字都可以,只需tag里提供相應的set方法即可。
2)處理 doStartTag 或 doEndTag
這兩個方法是
TagSupport提供的。 還是以<c:out value=""/>為例,當jsp解析這個標簽的時候,在「<」處觸發 doStartTag
事件,在「>」時觸發 doEndTag 事件。通常在 doStartTag 里進行邏輯操作,在 doEndTag 里控制輸出。
下面是一個簡單的例子
Java代碼
package com.test.tag;
import java.io.IOException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
* PermissionBodyTag 根據是否有許可權顯示body內容
*/
public
class PermissionBodyTag
extends BodyTagSupport {
boolean permission;
public boolean isPermission() {
return permission;
}
public void setPermission(boolean permission) {
this.permission = permission;
}
public int doStartTag()
throws JspTagException {
if (permission) {
return EVAL_BODY_INCLUDE;
}
else {
return SKIP_BODY;
}
}
public int doEndTag()
throws JspTagException {
System.out.println("doEndTag");
try {
if (bodyContent !=
null) {
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}else{
}
}
catch (IOException e) {
throw new JspTagException("IO ERROR:" + e.getMessage());
}
return EVAL_PAGE;
}
public void doInitBody()
throws JspTagException {
}
public void setBodyContent(BodyContent bodyContent) {
this.bodyContent = bodyContent;
}
}
通常你會發現自己絕大多數活動都集中在 doStartTag 或 doEndTag 方法里。確實如此,熟悉一些介面和類之後,寫taglib很容易。正如《jsp設計》的作者所言:裡面的邏輯稍微有點復雜,但畢竟沒有火箭上天那麼難。
二.編寫tld文件
標簽文件其實只是一個XML格式的說明文件,內容也很簡單。
創建tagTest-html.tld文件在這個標簽文件中,我們將我們創建的標簽取名 tagTest,並聲明了類型和參數(permission)。將該文件保存在 /WEB-INF 下面。
Java代碼
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>tagTest</shortname>
<uri>/taiji</uri>
<tag>
<name>permission</name>
<tagclass>com.test.tag.PermissionBodyTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>permission</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
三.加到web.xml中
當然,我們還需要將我們自定義的標簽添加到 web.xml 中,否則還是無法使用。
Java代碼
<taglib>
<taglib-uri>/tagTest </taglib-uri>
<taglib-location>/WEB-INF/tagTest-html.tld</taglib-location>
</taglib>
四.在jsp頁面導入tld
Java代碼
<%@ taglib uri="/tagTest " prefix="tagTest "%>
這樣,你的jsp頁面就可以使用自己的tag了。用這個標簽就可以根據傳人的boolean值來決定標簽包的jsp內容是否輸出
Java代碼
<tagTest:permission permission="<% java code%>">
//需有許可權輸出,用戶才能看到的內容
</tagTest:permission>
『柒』 jsp標簽中的 "${表達式}"表示什麼
jsp標簽中的 ${表達式}用來輸出或者計算一個表達式的內容,比如${3+5},那麼便會在頁面上輸出8,在比如${sessionScope.username},那麼便會獲取Session裡面的username的值,它不能在代碼塊也就是<% %>里使用。
作用:EL(Expression Language)是為了使JSP寫起來更加簡單。表達式語言的靈感來自於 ECMAScript 和 XPath 表達式語言,它提供了在 JSP 中簡化表達式的方法,讓Jsp的代碼更加簡化。
(7)jsp頁面標簽擴展閱讀
jsp中${}是EL表達式的常規表示方式
目的是為了獲取{}中指定的對象(參數、對象等)的值
如:
${user.name}<====>User user = (User)request(搜尋范圍).getAttribute(user);
String name = user.getName();
out.println(name);
從當前頁面起開始搜尋 user對象,然後獲取改對象的name屬性值
其搜尋的范圍依次是:page、request、session、application
如果未搜索到,即會返回null值
它在jsp+servlet的編程中經常使用,如果是剛學EL表達式,建議熟練掌握。