跳到主要內容

JSP(4)_隱含物件



  • JSP隱含物件
         隱含物件主要用來方便抓取前一個作業所傳送的資料或是需要傳送資料,JSP頁面隱
         含這些物件方便我們使用。

隱含物件 類別與介面 說明
request javax.servlet.HttpServletRequest  取得用戶端的資料或是系統資料
respone javax.servlet.HttpServletResponse  回應伺服器處理的結果給用戶端
application javax.servlet.ServletContext
session javax.servlet.http.HttpSessionsession物件
config javax.servlet.ServletConfig JSP轉Servlet的資料
page java.lang.Object
pageContext javax.servlet.jsp.PageContext JSP頁面所儲存的資料,用此pageContext可以讀取到getException、getPage和
getSession
exception java.lang.Throwable處理例外事件的發生
out javax.servlet.jsp.JspWriter 為輸出的界面

(1) request物件
     HttpServletRequest物件用來收集使用者的請求,如name/value、屬性資料或是串流資料
     客戶端透過HTTP協定會將資料傳輸給伺服器端,而我們從客戶端所接受到的資料JSP頁
     面可以利用 request物件來接收。它提供一些重要的方法:取得伺服器IP位址、設定/取得
     屬性資料、或是取得請求的參數等等。


方法說明例子
Object getAttribute(String param)  取得物件的內容值,如果不存在會回傳null
String getParameter(String name)一般只能接收字串的物件
Object setAttribute(String name, Object value )  設定物件的內容值與名稱
Enumeration getParameterNames()回傳所有的參數名稱
String[] getParameterValues(String Name)回傳參數的字串陣列,通常會有陣列大多為checkbox或是多選下拉式選單等等
Enumeration getAttributeNames()回傳所有的
String getAuthType()身分認證方式,需要在伺服器端作環境設定才有能使用
int getContentLength()取得使用者所傳送資料的長度,以byte為單位計算
Cookie[] getCookie[]回傳用戶使用的cookie物件集合
String getHeader(String name)取的標頭內容值
Enueration getHeaderNames()回傳標頭名稱的集合
String getMethod()取得傳送用戶端資料的方法,Get、POST、PUT等等方法
String getProtocol()取得協定
String getRemoteAddr()取得代理伺服器的IP位址
String getServerName()取得網頁伺服器名稱
String getServerPort()取得網頁伺服器埠號
String getServerPath()取得網頁伺服器相對路徑與檔名
HttpSession getSession()取的session物件
boolean isSecure()Server的需求是否有透過安全通道,有用為true,沒有為否



getAttribute()和getParameter()之間不同:
getAttribute()與setAttribute()只會在web容器內部傳遞;而getParameter()需要透過get/post傳遞。而getParameter沒有對應的setParameter方法。

EX:


<html>
<Meta http-equiv="Content-Type" Content="text/html; Charset=UTF-8">
<head></head>
<body>
<form name="form1" action="./user/jsp/information.jsp">
 <label>姓名:</label><input type="text"  name="username" maxlength="10"  size="10" value="" /> <br/>
 <label>性別:</label><input type="radio"  name="sex" value="man" />男 <input type="radio" name="sex"  value="women" />女<br/>
 <label>興趣:</label><input type="checkbox" name="hobby" value="sport" />運動
<input type="checkbox" name="hobby" value="movice" />看電影
<input type="checkbox" name="hobby" value="music" />音樂
<input type="checkbox" name="hobby" value="book" />看書<br/>
 <label> </label> <input type="submit" name="submit" value="提交" />
</form>
</body>
</html>




information.jsp


<html>
<body>
       姓名:<% out.println(request.getParameter("username")); %>
<br>性別:<% out.println(request.getParameter("sex")); %>
<br>興趣:<% String hobbys[] = request.getParameterValues("hobby") ;
                     for(int i=0 ; i<hobbys.length;i++)
                     out.println(hobbys[i]+",");
              %>
</body>
</html>

 EX:印出標頭資訊


<table width="90%" border="1" >

<tr><td>標頭變數</td><td>內容值</td></tr>
<%
    Enumeration enuHeader  = request.getHeaderNames();
  while(enuHeader.hasMoreElements())
  {
  String strName = (String) enuHeader.nextElement() ;
  String value = (String) request.getHeader(strName) ;
  out.println("<tr><td>"+strName+"</td>");
  out.println("<td>"+value+"</td></tr>");
  }

%>


(2)respone物件
    HttpServletResponse介面用來回應使用者訊息用,包含傳送訊息到前端、重新轉送。


方法說明例子
boolean containsHeader(String name)指定標頭名稱是否存在
void addHeader(String name, String value)新增標頭內容值
void setHeader(String name, String value)設定物件的內容值與名稱
void addIntHeader(String name ,int value)新增標頭內容值
void setIntHeader(String name, String value)設定物件的內容值與名稱
String getCharacterEncoding()取得字元編碼方式
void setCharacterEncoding(String charset)設定字元編碼方式
String getContentType()

void setContentType(String type)

void sendRedirect(String location)重新導向至指定URL








HttpSession getSession()取的session物件
boolean isSecure()Server的需求是否有透過安全通道,有用為true,沒有為否



  sendRedirect重新導向:
 常見的應用在身分認證,當我們輸入帳密錯誤時,它會自動導到錯誤的畫面,或是當我們
 到未授權的網頁時,系統會先導向需要先輸入帳密。這些都是利用sendRedirect的功能。它
 一開始瀏覽器會送出請求給伺服器,伺服器接收到後會轉送請求,第二次才會傳送需要轉送的網頁位址給伺服器,收到後才會送出正確的網頁給客戶端。所以它與其他轉送函式的不同是他必須透過瀏覽器才可以完成轉送的程序。




 (3)Cookie處理
    cookie解決網頁程式設計師資料暫存問題,它可以保留使用者資料的訊息,例如: 線上採
    購商品的訊息、使用者上次登入時間等等,都可以存在Cookie中,我們主要利用response
    函式完成。
 
 
 先要宣告就建構子: Cookie cookie = new Cookie(String name , String value)
  需要利用response隱含物件來加入到瀏覽器的Cookie
方法說明例子
void addCookie()  加入Cookie物件
Cookie[] cookie =getCookie()得到Cookie物件





Cookie屬性
屬性說明例子
int getMaxAge()回傳cookie的存活時間(單位秒),無限期為-1,int maxAge =cookie.getMaxAge() ; 
void setMaxAge(int secound)設定cookie的時間,單位為秒int month= 60*60*24*30  ; //一個月
cookie.setMaxAge(month) ;
boolean getSecure()判斷是否有SSL協定,有為true,否為falseboolean  isSecure = getSecure()

void setSecure(boolean flag)設定SSL傳送cookie內容cookie.setSecute(true) ; 


(4)out物件
  out物件會去實作javax.servlet.jsp.JspWriter,主要這個有兩個功能:
  1.將資料輸出網頁畫面
  2.控制緩衝區: 每個JSP網頁都有固定的緩衝容量,當每一次out.println()時不會立即輸出網
     頁畫面,他會等到緩衝區滿或是手動response.flushBuffer()清理緩衝區,_才會輸出。

方法說明例子
void clear()清除緩衝區的內容,當緩衝區清空時,則丟出IOException例外
void clearBuffer()清除緩衝區的內容,若緩衝區已被清空,不丟出IOException例外
void close()

void flush()

int getBufferSize()取得緩衝區的大小KB
int getRemaining()取得緩衝區的剩餘大小KB
boolean isAutoFlush()是否會自動清除緩衝區。
void newLine()換行字元
void println(data)輸出資料自動換行
void print(data)輸出資料

(5)application物件
    系統層級的物件,此物件的生命週期為當我打開應用程式時就會生效直到應用程式關到
    才會消失。

方法說明例子
void setAttribute(String name , Object value)設定系統層級的變數內容,無值時會回傳null<%  application.setAttribute("superuser","root)"
%>
Object getAttribute(String name)取得系統層級物件內容<%
     application.getAttribute("superuser")
%>
void removeAttribute(Stirng name)移除系統層級的物件內容<%
application.removeAttribute("superuser")
%>
Enumeration getAttributeNames()取得在系統層級所有屬性的名稱陣列。<%
  Enumeration enumNames = application.getAttributeNames()
 while(enumNames.hasMoreElements())
 {
    String strName = (String)enumName.nextElement() l
 }
%>
void log(String msg)指定訊息寫入Servlet日誌檔





(6)session物件
    主要是實作javax.servlet.http.HttpSession介面,它跟cookie的不同session的資料位置在伺
    服器中,所以安全性會更高但是由於session存放在伺服器的數量有限,所以還是需要

方法說明例子
void setAttribute(String name , Object value)設定使用者層級的變數內容,無值時會回傳null<%  session.setAttribute("superuser","root)"
%>
Object getAttribute(String name)取得使用者層級物件內容<%
     session.getAttribute("superuser")
%>
void removeAttribute(Stirng name)移除使用者層級物件內容<%
session.removeAttribute("superuser")
%>
Enumeration getAttributeNames()取得在使用者層級所有屬性的名稱陣列。<%
  Enumeration enumNames = session.getAttributeNames()
while(enumNames.hasMoreElements())
 {
    String strName = (String)enumName.nextElement()
 }
%>
void invalidate()使session物件失效





(7) config物件
     此物件用來抓取web.xml中的servlet的初始值,常用的方法:

方法說明例子
String getInitParameter(String name)取得web.xml中servlet的初始值,需要做web例外作宣告
Enumeration getInitParameterNames()

ServletContext getServletContext()取得servletContext參照
String getServletName()取的servlet名稱



EX:取得初始值: getInitParameter()
      web.xml

(8) pageContext物件


方法說明例子
void setAttribute(String name , Object value)設定屬性變<%  pageContext.setAttribute("superuser","root)"
%>
void setAttribute(String name , Object value,int scope)設定屬性變數,並指定範圍
<%  pageContext.setAttribute("superuser","root)"
%>
Object getAttribute(String name)取得屬性變數<%
     pageContext.getAttribute("superuser")
%>
Object getAttribute(String name,int scope)取得屬性變數,並指定範圍
void forward(String url)相對路徑,轉送至另一個網頁
<%
     pageContext.forward("ex1.jsp")
%>






(9)exception物件
    exception物件需實作java.lang.Throwable類別,一般在jsp轉譯為servlet時,並不會去實作
    exception物件而是需要在下達<%@ page pageError="true" %>指令,exception物件才可以進
    行存取。 
    方法說明例子
    String getMessage()回傳錯誤訊息
    String toString()回傳錯誤訊息時,會加上類別名稱。






  • JSP網頁內物件的範圍與有效期間
        application:  當伺服器生效時,它就會生效直到伺服器關掉,才會使此Application變數結
                          束,此變數的範圍,可以不同網頁、不同的使用者都可以讀取到此變數。
        session     :  為用戶建立連線時,會同時建立session物件,單一使用者讀取。生命週期
                          當超過seesion設定的時間或是連線中斷。
        request     :  為有效生命週期為客戶一次請求。
        pageContext:只有在JSP網頁內才有效。
        
        application > session > request >pageContext

       










留言

這個網誌中的熱門文章

GSON基礎教學

GSON 前言 JSON是很常見的資料交換格式,在JAVA領域常用處理JSON的函式庫:GSON、FastXML和JSON-B,本章節會以GSON為主,學習目標如下 JSON格式說明 GSON 套件函式 GSON: 物件轉換JSON字串 GSON: JSON字串轉換物件 JSON 格式說明 JSON全名為JavaScript Object Notation,它是一種輕量級的資料交換格式,會大為流行的理由,主要是他比傳統用xml更輕巧且容易處理, JSON表達方式物件會用大括弧{},陣列則是用中括號[]。 用JSON字串來表達Employee的物件內容,由JSON字串可以知道物件name、age、sex和salary屬性。 JSON表示員工資料方式: {“name”:”Jack Bryant”, “age”:18, “sex”:”M”,”salary”:3500.00} JSON陣列表示方式: 跟我們使用JAVA的陣列方式類似,內容值可以是數字’、文字、布林、陣列、物件、null等等。 範例: 字串: [“紅”、”橙”、”黃”、”綠”、”青”、”藍”、”紫”} 布林: [true, true, false, false, true, true] GSON 套件函式 Gson為google所發布的函式庫,主要將物件與json字串之間的轉換時方便使用。當我們將JAVA物件轉換成JSON字串稱為 序列化 ,JSON字串轉換至JAVA物件稱為 反序列化 。 GSON: 物件轉換JSON字串 有了JSON基本概念後,我們進入本章重點,首先我們需要建立員工類別(Employee),定義如下 物件 屬性 員工類別 Employee name 名字 age 年紀 sex 性別 salary 薪水 /** * name:員工類別 */ public class Employee implements Serializable { //constructor public Employee(String name, double salary){ this.name = name; this.sala...

PHP與Python搭配

今天介紹如何利用php網頁呼叫目錄下的python程式工作或是資料交換,本人整理的方法有兩種 使用system()、exec()、shell_exec()呼叫程式 (1) string system ( string return_var ] ) 參考網址 官網解釋system()用來執行外部命令,返回為印出的結果,passthru()跟system()類似但是它不會返回結果。 範例1. 利用system執行ls指定並顯示在網頁上,無法使用變數保留ls的結果 檔案名稱: psystem.php $jsondata= system("ls -al", $result); 結果: (2) exec() : string exec ( string output [, int &$return_var ]] ) 參考網址 範例2. 利用exec執行python程式並可以回傳json格式給前端網頁做處理並顯示。我們ptopy.php就是可以看到callpy()為執行py的函式,它執行完pyEx01.py會將結果給$jsondata變數,做後面json解析。 檔案名稱: ptopy.php function callpy() { $jsondata= exec("/usr/bin/python pyEx01.py"); return $jsondata ; } $jsondata= callpy(); echo $jsondata ; echo " " ; $obj = json_decode($jsondata) ; echo "name:".$obj-> { 'name'} .',' ; echo "id:".$obj-> { 'id'} ; 檔案名稱: pyEx01.py import sys ...

Python AI-問題集

Python AI-問題集 問題集 Jupyter Notebook執行ipywidgets會出現kernel死掉的錯誤發生(The kernel appears to have died) 解決方法 (1) 根據log檔來判斷問題: 例如:log訊息出現OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized. (2) 根據問題關鍵字找出問題所在: 利用google查詢所遭遇到的問題,例如我把上面的問題上google查詢可以找到這篇的解法 https://blog.csdn.net/bingjianIT/article/details/86182096 (3)實作解法: 我實作下面解法後,就可以順利執行手寫辨識的程式. //在Python宣告時加入 import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" 參考 https://blog.csdn.net/bingjianIT/article/details/86182096