[版權申明:本文系做者原創,轉載請註明出處]
文章出處:http://blog.csdn.net/sdksdk0/article/details/51925232
做者:朱培 ID:sdksdk0html
JSP全名爲Java Server Pages,中文名叫java服務器頁面。是一種用於開發動態web資源的技術。容許用戶嵌套html和java代碼。JSP實際上就是servlet。java
JSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產生動態網頁的處理邏輯。網頁還能經過tags和scriptlets訪問存在於服務端的資源的應用邏輯。JSP將網頁邏輯與網頁設計的顯示分離,支持可重用的基於組件的設計,使基於Web的應用程序的開發變得迅速和容易。 JSP(JavaServer Pages)是一種動態頁面技術,它的主要目的是將表示邏輯從Servlet中分離出來。git
重點在於顯示數據。github
jsp頁面中的java代碼服務器是如何執行的?web
web服務器在執行jsp頁面時,是如何把jsp頁面中的html標籤發送到客戶端的?
經過標籤中的等部分。out.write方法寫(以下圖)。
jsp輸出模板內容:把html內容翻譯到對應servlet的service方法中,由一個JspWriter的對象進行輸出。
在tomach中通過轉換的demo1.java文件中的內容。
編程
web服務器在調用jsp時,會提供jsp一些什麼java對象?
pageContext、HttpSession、ServletContext、ServletConfig等瀏覽器
語法:
<%!
java代碼緩存
%>
做用:定義jsp對應類的成員。服務器
語法:<%– 這是註釋 –%>
做用:註釋JSP中的代碼markdown
注意:它的做用和HTML註釋的做用是徹底不一樣的。JSP註釋根本不會被翻譯到servlet中,而HTML註釋是把代碼運行後的結果註釋掉,運行效率低。
<% @指令名稱 屬性1="值1" 屬性2="值2" %>
page指令不管出如今jsp頁面中什麼地方,它的做用都是整個jsp頁面。
做用:
import:導入jsp中的java類,默認導入lang.*,servlet.*jar包。
<%@page import="java.util.Date,java.util.List" %>
buffer:jsp頁面中有一個字符輸出流java.servlet.jsp.JspWriter,它的緩存大小默認爲8kb.
errorPage:噹噹前JSP頁面發生異常時轉向(轉發)的一個地址,若是地址以」/」開頭,/表明當前應用,絕對路徑。不以/開頭,表示相對路徑。
<error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page>
isErrorPage:是否產生Throwable對象,默認是false.
<%=exception.getMessage() %>
contentType:指示響應正文的MIME類型和編碼.
pageEncoding:JSP引擎讀取JSP文件時使用的編碼。
isELIgnored:是否忽略EL表達式。默認值是false,不忽略.
靜態包含:
<%@include file="/index.jsp" %>
動態包含:
<jsp:include page="/index.jsp"></jsp:include>
導入外部標籤庫,替換jsp中的java片斷。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
指在jsp的<%=%>和<% %>能夠直接使用的對象。
request、response、session、exception、application、config、page、out、pageContext
自己是一個域對象,還能操做其餘三個域對象(ServletRequest、HttpServlet、ServletContext)中的數據。
操做其餘三個域對象:
PageContext.PAGE_SCOPE|PageContext.REQUEST_SCOPE|PageContext.SESSION_SCOPE|PageContext.APPLICATION_SCOPE
pageContext對象提供了對JSP頁面內全部的對象及名字空間的訪問,也就是說他能夠訪問到本頁所在的SESSION,也能夠取本頁面所在的application的某一屬性值,他至關於頁面中全部功能的集大成者,它的本 類名也叫pageContext。
jsp:include:動態包含
jsp:forward:請求轉發
jsp:param:結合以上標籤使用。
<jsp:forward page="pageContext/demo2.jsp" > <jsp:param value="abc" name="username" /> <jsp:param value="123" name="pwd" /> </jsp:forward>
jsp中操做javabean
jsp:useBean
先查找再建立。
<jsp:useBean id="student" class="cn.tf.domain.Student" scope="page" />
jsp:setProperty
<jsp:setProperty property="name" name="student" value="學生"/> <jsp:getProperty property="name" name="student" />
不是單獨的語言,而是jsp規範中獲取數據的一種方式。能夠獲取數據、運算、訪問普通靜態方法等功能。
不支持字符串鏈接操做。
只能獲取存在於四個域對象中的數據。
EL對於null這樣的數據,顯示在頁面上表現爲一個空字符串。
${s} pageContext.findAttribute(「s」);
無空指針問題。
運算符:
.
[]
<!-- 獲取javabean的屬性 --> <% Student student=new Student(); student.setAddress(new Address()); pageContext.setAttribute("s",student); %> ${s.name}==${s['name']} ${s.address.province } <!-- 獲取List集合中的元素 --> <% List list=new ArrayList(); list.add("a"); list.add("b"); list.add("c"); pageContext.setAttribute("list",list); %> ${list[1] } <!-- 獲取map中的元素 --> <% Map map=new HashMap(); map.put("a","1111"); map.put("b","2222"); map.put("c","3333"); pageContext.setAttribute("map",map); %> ${map.b}
empty:判斷null、空字符串和沒有元素的集合(
${empty p }
三元運算符:
${布爾表達式?true:false}
<% List list=new ArrayList(); list.add("a"); pageContext.setAttribute("list",list); %> ${empty list } <!-- false--> ${empty list ?'您未購買任何東西':'您購買的物品以下'} <% session.setAttribute("user","張三"); %> ${empty user? '您還未登錄':'歡迎您' } ${user }
一、編寫一個類
public class Function { public static String toUppercase(String data){ return data.toUpperCase(); } }
二、在WEB-INF目錄下建一個擴展名爲tld的xml文件。
<?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"> <tlib-version>1.0</tlib-version> <short-name>my</short-name> <uri>http://www.tianfang1314.cn/myfunctions</uri> <function> <name>toUpperCase</name> <function-class>cn.tf.functions.Function</function-class> <function-signature>java.lang.String toUppercase( java.lang.String )</function-signature> </function> </taglib>
三、在jsp中使用
引入taglib文件:
<%@ taglib uri="http://www.tianfang1314.cn/functions" prefix="my" %>
使用自定義的el表達式「data」,將小寫的a轉換爲大寫的A。
<% pageContext.setAttribute("data","aaaaaaa"); %> ${my:toUpperCase(data) }
實際項目中不少都是使用JSTL來進行操做的。