天天看點

Jsp (Java Server Pages)相關知識九大内置對象和四大作用域 一.初識JSP二.Jsp内置對象 三.四大作用域 四.Cookie

一.初識JSP

Jsp頁面的組成:靜态内容、指令、表達式、小腳本、聲明、标準動作、注釋等元素構成

Url:統一資源定位符

Url組成:協定、主機名(包括端口号)、路徑

1.注釋的方式:

1.HTML注釋:在浏覽器頁面可以看見,不安全

<!----html注釋----->

2.Jsp注釋:在浏覽器頁面看不見

<%--jsp注釋--%>

3.在jsp腳本中注釋:在浏覽器頁面看不見

<%//單行注釋%>

<%/*多行注釋*/%>

二.腳本元素:

Jsp聲明-->java檔案的成員方法<%!%>

Jsp小腳本-->java檔案中的jspService方法的一段代碼<%%>

Jsp表達式-->java檔案中的jspService方法中的一段代碼,<%=變量或者表達式%>;

三.指令

1.Page指令

Page指令是針對目前頁面進行設定的知名,通常位于jsp頁面的頂端,一個頁面可以包含多個page指令,page指令隻對目前jsp頁面有效。

1.Page指令中如果使用import要導入多個包時,使用“,”分隔

2.Page指令中contentType=“text/html;charset=utf-8”

3.isErrorPage 取值為true時,表示這是一個處理異常的頁面

4.Jsp腳本<%%>中間的java代碼必須符合我們java代碼的書寫格式

使用者首次通路頁面時 Web容器處理jsp檔案請求需要經過的3個階段

Jsp執行過程

(1)翻譯階段:使用者第一次通過浏覽器來通路jsp的時候。Tomcat負責把jsp轉化成為java檔案

(2)編譯階段:伺服器把java檔案編譯成為class檔案

(3)執行階段:首先對生成的java類進行執行個體化

調用執行個體化後對象的_jspService()方法輸出html給浏覽器

(4)浏覽器渲染html資料

如果jsp檔案沒有修改,使用者再次請求頁面,不用再次翻譯和編譯,如果檔案有改動,則會重新翻譯和編譯

2. include指令

Include指令表示,,在JSP編譯時插入一個包含文本或代碼的檔案包含的檔案可以是jsp頁面.html網頁.文本檔案等,include指令隻有一個file屬性,表示被包含檔案的路徑,一個jsp頁面可以有多個include指令

01靜态包含:

靜态包含

靜态包含就是講内容進行了直接替換,就好比程式中定義的變量一樣.

文法:

<%@ include file=”應用檔案路徑 %”>

02動态包含:

 (1)不傳參數:

<jsp:include page=”{要包含的檔案路徑|<%=表達式%>}” flush=”true|flase”/>

(2)傳遞參數:

<jsp:include page=”{要包含的檔案路徑|<%=表達式%>}” flush=”true|flase”>

<jsp:param name=”參數名稱” value=”參數内容”(常量)/>(可以向被包含頁面中傳遞多個參數)

<jsp:param name=”參數名稱” value=”<%=參數内容%>”(變量)/>

</jsp:include>

靜态包含,遇到同名變量時,先包含後處理,會出現異常

動态包含,遇到同名變量時,先處理後包含,不會出現異常

二.Jsp内置對象

内置對象:内置對象就是由web容器加載的一組ServletAPI的執行個體,這些執行個體由JSP規範進行了預設的初始化操作,可以直接在JSP中使用(注意:jsp的内置對象名稱均是jsp的保留字,不得當做自定義變量名使用)

不經常使用的内置對象

pageContext  内置對象的集大成者,可以通過pageContext擷取到其他的内置對象

Config 指定jsp頁面初始配置的對象 Servlet會使用

Page 目前jsp執行個體化的對象,使用的方法非常有限,一般很少使用

Exception 用來處理頁面異常,以後的異常基本都是在java代碼中處理,是以很少使用

經常使用的内置對象

Session

Application

Out

Request

response

是由web容器建立的一組對象

1.Jsp内置對象Out

是jspWriter類的執行個體,作用是用于向浏覽器輸出資料

01.Out對象經常使用的方法:

(1).void Print(object  c)向用戶端列印資料(将各種類型的資料轉換成字元串);

(2)、 void write(charset) 向用戶端列印字元相關的資料(字元、字元數組、字元串);

(3)、void println(Object c) 向用戶端列印資料(将各種類型的資料轉換成字元串)并換行。

2.request對象主要用于處理用戶端的請求

客戶請求通路伺服器,會攜帶一些資料,比如用戶端的資訊,使用者填寫的資訊,送出給伺服器,伺服器拿到資料後,會分析整理,整理成request對象,然後送出給jsp頁面。

01.Request對象的常用方法:

方法名稱 說明
String getParemeter(String name) 根據表單元件名稱擷取送出資料  參數中的name必須和input中name屬性相對應;
String[] getParemeterValues(String name) 擷取表單元件對應多個值時的請求資料。
Void setCharacterEncoding(String charset) 指定每個請求的編碼,不包括URL編碼,可解決使用post方式送出的亂碼問題
RequestDispatcher gerRequestDispatcher(String path) 傳回一個RequestDispatcher對象,該對象的forward()方法用于轉發請求

02.頁面亂碼分析:

(1)jsp頁面本身的編碼;

即page指令裡面

注意:一旦指定了一種編碼格式 另外一種編碼格式不指定的話 預設都采用已經指定的編碼格式。

pageEncoding:頁面本身的編碼;

  contentType:指定的是浏覽器渲染頁面的時候采用的編碼格式;

(2)浏覽器渲染頁面采用的編碼;和頁面本身的編碼格式一緻

(3)伺服器儲存資料采用的編碼(request)

伺服器預設編碼是使用ISO-8859-1來儲存資料

解決方法:

對于post方式:

設定讀取請求資訊的字元編碼為UTF-8

在擷取請求資訊前設定request.setCharacterEncoding("UTF-8");

request.setCharacterEncoding("UTF-8")設定的是request内部儲存資料的格式,不包括url

對于get方式:

Get方式送出的資料在URL裡面

1.改變request擷取出來的資料的編碼

這種方式開發中不推薦使用,使用這種方式,每個資料都必須要進行轉碼,在實際編碼中使用這種方式處理,比較麻煩

2.改變url編碼(推薦使用)

3.response 用于響應客戶請求并向用戶端輸出資訊

01.常用方法

Void addCookie(Cookie cookie) 向用戶端添加Cookie
Void setContentType(String type) 設定HTTP響應的contentType類型
設定響應所采用的字元編碼類型
Void sendRedirect(String location) 将請求重新定位到一個新的URL上(重定向)

02.頁面重定向

用戶端将重新發送請求到指定的URL,用戶端浏覽器顯示的位址是重定向的位址,用戶端可以檢視到發起了兩次請求

<%

String name=request.getParameter("userName");

String pass=request.getParameter("pass");

if("admin".equals(name)&&"admin".equals(pass)){

response.sendRedirect("welcome.jsp");

}else{

out.print("使用者名或密碼不正确");

}

%>

狀态碼

302代表告訴浏覽器該重定向一個url了

404代表找不到頁面

200,代表0K

重定向頁面使用request.getParameter擷取不到資料的原因:

用戶端帶着資料來請求頁面時,請求頁面告訴浏覽器該去請求另一個頁面,這時候第一 次請求中的資料就失效了,第二次請求時便隻攜帶了用戶端的資訊,不帶客戶資訊

1.當第一次請求失效的時候,把資料進行儲存,使用資料作為參數發起第二次請求

Get請求的參數是放在url裡面的,是以可以使用這種方式來解決,這和表單的送出方式沒有關系,"welcome.jsp?userName="+name

   第一個請求的頁面

response.sendRedirect("welcome.jsp?userName="+name);

第二次請求的頁面再使用request.getParameter(“參數”)來擷取

<% String name=request.getParameter("userName"); %>

<h1>歡迎<%=name %>通路!</h1>

03.轉發

2.能不能隻發一次請求,來完成頁面的跳轉

使用轉發,用戶端浏覽器顯示的是使用者直接請求的頁面的url,并且用戶端浏覽器顯示隻發送一次請求,整個過程是都是在伺服器内部完成的

使用轉發來取代重定向實作頁面跳轉

轉發的實作使用Request.getRequestDispatcher(ul);方法來實作

用戶端使用者直接請求的頁面

RequestDispatcher rd=request.getRequestDispatcher("welcome.jsp");

rd.forward(request, response);

目标頁面:

轉發和重定向的差別:

相同點:

轉發和重定向都是能夠實作頁面的跳轉

不同點:

轉發過程:web伺服器内部将一個request請求的處理權交給另一個資源,屬于同一個通路請求和響應過程,是以request對象的資訊不會丢失

轉發是在伺服器端發揮作用,通過RequestDispatcher對象的forward()方法将送出的資訊在多個頁面間進行傳遞;

轉發是在伺服器内部控制權的轉移,用戶端浏覽器的位址欄不回顯示出轉向後的位址。

重定向過程:web伺服器向浏覽器傳回一個響應,浏覽器接受此響應後再發送一個新的http請求到伺服器,這屬于兩次不同的請求,則上一次請求的request資料将丢失。

重定向是在用戶端發揮作用,通過新的請求實作頁面轉向,其通過浏覽器重新請求位址,在位址欄中可以顯示轉向後的位址。

在URL中參數的拼接 get傳參方式

<a href="result.jsp?color=red">red</a>

4.Session會話機制 用于區分用戶端

每個session會話都會有一個sessionID ,同一個session對象sessionID相同

Session和浏覽器視窗

通過超連結打開的新視窗,新視窗的session與其父視窗的session相同

Sessionid是通過鍵值對的形式儲存在本地的Cookie中

01、Session對象的常用方法:

說名
String getId() 擷取sessionid
Void setMaxInactiveInterval(int interval) 設定session的非活動時間(即最大失效時間)
Int getMaxInactiveInterval() 擷取session的非活動時間(以秒為機關)
Void invalidate() 設定session對象失效(使用者退出時使用)
Void setAttribute(String key,Object value) 以key/value的形式儲存對象值
Object getAttribute(String key) 通過key擷取對象值
Void removeAttribute(String key) 從session中删除指定名稱(key)所對應的對象

02session對象的執行個體:

控制頁面代碼:

request.setCharacterEncoding("UTF-8");

String userName=request.getParameter("userName");

String passwrod=request.getParameter("passwrod");

boolean flag=false;

//這個if是判斷賬号和密碼是否正确

if("admin".equals(userName)&&"admin".equals(passwrod)){

flag=true;

//使用者名和密碼正确時,将使用者資訊儲存到session

session.setAttribute("test", userName);

out.print("你輸入的賬号或密碼不正确");

//這是判斷使用者是否是直接在浏覽器輸入control.jsp進入的

if(flag){

request.getRequestDispatcher("welcome.jsp").forward(request,response);

response.sendRedirect("login.jsp");

首頁面的代碼:

//從session中擷取使用者資訊

Object obj=session.getAttribute("test");

if(obj==null){

//使用轉發,目的是讓使用者浏覽器視窗的url也變成login.jsp

return;

歡迎<%=obj %>登陸

2session失效

會話逾時:會話逾時是指兩次請求的時間間隔超過了伺服器允許的最大時間間隔.

01.手動設定失效: invalidate()

02.逾時失效: 通過setMaxInactiveInterval()方法,機關是秒

03.修改配置檔案: 通過項目下的web.xml或Tomcat目錄下的/conf/web.xml

檔案,機關是分鐘

<session-config>

<session-timeout>10</session-timeout>

</session-config>

5 application内置對象

作用:用于同一個應用中的所有使用者之間的資料共享

01 常用方法:

以key/value的形式将對象儲存到application中
通過key擷取application中存儲的對象
String getRealPath(String path) 傳回相對路徑的真實路徑

三.四大作用域

四大作用域:page作用域,request作用域,session作用域,application作用域.

四.Cookie

Cookie是web伺服器儲存在用戶端的一系列文本資訊

Cookie的作用 對特定對象的追蹤,實作各種個性化服務.實作登入

建立cookie

Cookie newCookie= new Cookie(String key,String value);

寫入cookie

Response.addCookie(newCookie);

讀取cookie

Cookie cookies[]=request.getCookies();