JSPhtml
JSP全稱是Java Server Pages。JSP實際上就是Servlet。java
JSP原理:JSP會被Tomcat翻譯成一個Servletweb
JSP語法緩存
1)JSP的Java腳本表達式安全
做用:輸出數據到頁面上服務器
語法:<%=表達式%>session
2)JSP的Java腳本片斷(實際開發中,應作到JSP中不能出現一行Java腳本片斷)app
做用:書寫Java代碼邏輯dom
語法:<%jsp
語句1;
語句2;
%>
原理:其中的語句會原封不動的被服務器翻譯到對應的Servlet的service方法中。
3)JSP的聲明
做用:定義類的成員
語法:<%!
Java代碼
%>
4)JSP的註釋:
做用:註釋Java腳本代碼
語法:<%--這是註釋--%>
JSP的指令:給JSP引擎用的(服務器用的)
基本語法格式:<%@ 指令名稱 屬性1="值1" 屬性2="值2" %>
做用:告訴服務器,該如何處理JSP中除了指令以外的內容。
1.page
做用:定義JSP頁面的各類屬性
屬性:language:指示JSP頁面中使用腳本語言
extends:指示JSP對應的Servlet類的父類。不要修改
import:導入JSP中的Java腳本使用到的類或包。
JSP引擎自動導入如下包中的類:
javax.servlet.*
javax.servlet.http.*
javax.servlet.jsp.*
主要:一個import屬性能夠導入多個包,用逗號分隔。
session:指示JSP頁面是否建立HttpSession對象。默認值是true,建立
buffer:指示JSP用的輸出流的緩存大小。默認值是8KB.
autoFlush:自動刷新輸出流的緩存
isThreadSafe:指示頁面是不是線程安全的(過期的)。默認是true(true不安全。)
errorPage:指示當前頁面出錯後轉向的頁面
目標頁面若是以"/"(當前應用)就是絕對路徑。
配置全局錯誤提示頁面:
web.xml
<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>
eg:
1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="/error.jsp"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <% int i = 100/0; %> </body> </html>
error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> <h1>對不起!服務器忙!</h1> </body> </html>
isErrorPage:指示當前頁面是否產生Exception對象。
contentType:指定當前頁面的MIME類型。做用與Servlet中的response.setContentType()做 用徹底一致
pageEncoding:通知引擎讀取JSP時採用的編碼(由於要翻譯)
還有contentType屬性的做用。
isELIgnored:是否忽略EL表達式。${1+1}。默認值是false。
2.include(靜態包含:開發中能用靜的不用動的)
做用:包含其餘的組件。
語法:<%include file=""%>file指定要包含的目標組件。路徑若是以"/"(當前應用)就是絕對路徑。
原理:把目標組件的內容加到源組件中,輸出結果。
動態包含:採用動做元素:<jsp:include page=""/>路徑若是以"/"(當前應用)就是絕對路。
3.taglib
做用:引入外部的標籤
語法:<%@taglib uri="標籤名稱空間" prefix="前綴"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
JSP內置對象(9個JSP內置對象)
JSP的內置對象引用名稱 對象的類型
request HttpServletRequest
response HttpServletResponse
session HttpSession
application ServletContext
config ServletConfig
page this(當前Servlet對象)
exception java.lang.Throwable
out JspWriter
pageContext javax.servlet.jsp.PageContext
pageContex詳解
1.自己是一個域對象。
同時還能操做其餘三個域對象(pageContext、ServletRequest、HttpSession、ServletContext)
自己表示的域範圍是本頁面
void setAttribute(String name,Object value)
void removeAttribute(String name)
Object getAttribute(String name)
操做其餘三個域對象
void setAttribute(String name,Object value,int scope)
void removeAttribute(String name,int scope)
Object getAttribute(String name,int scope)
參數int scope是由PageContext類提供的靜態變量規定的。
PageContext.PAGE_SCOPE:頁面範圍(是PageContext自己中的那個Map,代號page)
PageContext.REQUEST_SCOPE:請求範圍(是ServletRequest中的那個Map,代號request)
PageContext.SESSION_SCOPE:請求範圍(是HttpSession中的那個Map,代號session)
PageContext.APPLICATION_SCOPE:請求範圍(是ServletContext中的那個Map,代號application)
Object findAttribute(String name):依次按照page request session application範圍搜索指定名稱的對象,找到爲止。
二、獲取其餘8個隱式對象
三、提供了轉發和包含的方便方法
方法一(轉發):
RequestDispatcher rd = request.getRequestDispatcher("/url");
rd.forward(request,response);
方法二(轉發):
pageContext.forward("url");
包含:
pageContext.include("url");
四大域對象(兩個資源之間互傳數據)
JSP中隱式對象的名稱 範圍名稱 具體的類型
pageContext page javax.servlet.jsp.PageContext
request request javax.servlet.ServletRequest
session session javax.servlet.http.HttpSession
application application javax.servlet.ServletContext
JSP經常使用的動做元素
<jsp:include/>
<jsp:forward/>
<jsp:param/>:在包含和轉發時,利用該標籤傳遞請求參數
JavaBean
JavaBean是一個遵循特殊寫法的普通類
特殊寫法:
1)必須有默認的構造方法
2)全部字段爲私有的
3)提供共有的getter或setter
4)通常實現java.io.Serializable
應用場景:在企業級開發中,JavaBean是用來傳遞數據的。
JSP中操做JavaBean的動做元素
jsp:useBean
做用:用於在指定域範圍內查找指定名稱的JavaBean對象,找到了就直接使用;沒有找到,建立一個,並放到指定的域範圍內。
屬性:
id:必須的。
class:JavaBean的完整類名
scope:域範圍。默認是page範圍。可選值:page、request、session、application
注意:若是該標籤有主體內容,只有建立新對象時纔會執行。
jsp:setProperty(必須先使用useBean)
做用:調用JavaBean的setter方法。還能自動類型轉換,僅限基本類型
屬性:
property:必須的。屬性名稱。
可使用通配符*。使用前提是請求參數的名稱與屬性的名稱徹底一致。
name:必須的。哪一個對象的?即jsp:useBean中的id的取值。
value:屬性的取值。
param:請求參數名
jsp:getProperty
做用:調用JavaBean的getter方法。
property:必須的。屬性的名稱
name: 必須的。哪一個對象的?即jsp:useBean中的id的取值。
eg:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <jsp:useBean id="person" class="cn.lsl.domain.Person" scope="page"></jsp:useBean> <jsp:setProperty property="name" name="person" value="zhangsan" /> <jsp:setProperty property="gender" name="person" value="male" /> <jsp:setProperty property="married" name="person" value="false" /> <jsp:setProperty property="birthday" name="person" value="<%=new Date() %>" /> <jsp:getProperty property="name" name="person"/><br /> <jsp:getProperty property="gender" name="person"/><br /> <jsp:getProperty property="married" name="person"/><br /> <jsp:getProperty property="birthday" name="person"/><br /> </body> </html>
利用請求參數名設置JavaBean的各類屬性
<!-- http://localhost:8080/JSP/2.jsp?name=zhangsan&gender=male --> <jsp:setProperty property="name" name="person" param="name" /> <jsp:setProperty property="gender" name="person" param="gender" />