Jsp 方面
69
、
forward
和
redirect
的區別
答:
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。
redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛纔請求的所有參數重新請求,所以session,request參數都可以獲取。
70
、
jsp
有哪些內置對象
?
作用分別是什麼
?
答:
JSP
共有以下
9
種基本內置組件(可與
ASP
的
6
種內部組件相對應):
request
用戶端請求,此請求會包含來自
GET/POST
請求的參數
response
網頁傳回用戶端的迴應
pageContext
網頁的屬性是在這裏管理
session
與請求有關的會話期
application servlet
正在執行的內容
out
用來傳送回應的輸出
config servlet
的構架部件
page JSP
網頁本身
exception
針對錯誤網頁,未捕捉的例外
71
、
jsp
有哪些動作
?
作用分別是什麼
?
答
:
JSP
共有以下
6
種基本動作
jsp:include
:在頁面被請求的時候引入一個文件。
jsp:useBean
:尋找或者實例化一個
JavaBean
。
jsp:setProperty
:設置
JavaBean
的屬性。
jsp:getProperty
:輸出某個
JavaBean
的屬性。
jsp:forward
:把請求轉到一個新的頁面。
jsp:plugin
:根據瀏覽器類型爲
Java
插件生成
OBJECT
或
EMBED
標記
72
、
JSP
中動態
INCLUDE
與靜態
INCLUDE
的區別?
答:
動態
INCLUDE
用
jsp:include
動作實現
<jsp:include page="included.jsp" flush="true" />
它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數
靜態
INCLUDE
用
include
僞碼實現
,
定不會檢查所含文件的變化,適用於包含靜態頁面
<%@ include file="included.htm" %>
73
、兩種跳轉方式分別是什麼
?
有什麼區別
?
答:
有兩種,分別爲:
<jsp:include page="included.jsp" flush="true">
<jsp:forward page= "nextpage.jsp"/>
前者頁面不會轉向
include
所指的頁面,只是顯示該頁的結果,主頁面還是原來的頁面。執行完後還會回來,相當於函數調用。並且可以帶參數
.
後者完全轉向新頁面,不會再回來。相當於
go to
語句。
74
、
JSP
的內置對象及方法。
答:
request
表示
HttpServletRequest
對象。它包含了有關瀏覽器請求的信息,並且提供了幾個用於獲取
cookie, header,
和
session
數據的有用的方法。
response
表示
HttpServletResponse
對象,並提供了幾個用於設置送回
瀏覽器的響應的方法(如
cookies,
頭信息等)
out
對象是
javax.jsp.JspWriter
的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。
pageContext
表示一個
javax.servlet.jsp.PageContext
對象。它是用於方便存取各種範圍的名字空間、
servlet
相關的對象的
API
,並且包裝了通用的
servlet
相關功能的方法。
session
表示一個請求的
javax.servlet.http.HttpSession
對象。
Session
可以存貯用戶的狀態信息
applicaton
表示一個
javax.servle.ServletContext
對象。這有助於查找有關
servlet
引擎和
servlet
環境的信息
config
表示一個
javax.servlet.ServletConfig
對象。該對象用於存取
servlet
實例的初始化參數。
page
表示從該頁面產生的一個
servlet
實例
Servlet 方面
75
、說一說
Servlet
的生命週期
?
答
:
servlet
有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由
javax.servlet.Servlet
接口的
init,service
和
destroy
方法表達。
Servlet
被服務器實例化後,容器運行其
init
方法,請求到達時運行其
service
方法,
service
方法自動派遣運行與請求對應的
doXXX
方法(
doGet
,
doPost
)等,當服務器決定將實例銷燬的時候調用其
destroy
方法。
與
cgi
的區別在於
servlet
處於服務器進程中,它通過多線程方式運行其
service
方法,一個實例可以服務於多個請求,並且其實例一般不會銷燬,而
CGI
對每個請求都產生新的進程,服務完成後就銷燬,所以效率上低於
servlet
。
76
、
JAVA SERVLET API
中
forward()
與
redirect()
的區別?
答
:
前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;後者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉後的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,儘量使用
forward()
方法,並且,這樣也有助於隱藏實際的鏈接。在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用
sendRedirect()
方法。
77
、
Servlet
的基本架構
答:
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
}
78
、什麼情況下調用
doGet()
和
doPost()
?
答:
Jsp
頁面中的
form
標籤裏的
method
屬性爲
get
時調用
doGet()
,爲
post
時調用
doPost()
。
79
、
servlet
的生命週期
答:
web
容器加載
servlet
,生命週期開始。通過調用
servlet
的
init()
方法進行
servlet
的初始化。通過調用
service()
方法實現,根據請求的不同調用不同的
do***()
方法。結束服務,
web
容器調用
servlet
的
destroy()
方法。
80
、如何現實
servlet
的單線程模式
答:
<%@ page isThreadSafe="false"%>
81
、頁面間對象傳遞的方法
答:
request
,
session
,
application
,
cookie
等
82
、
JSP
和
Servlet
有哪些相同點和不同點,他們之間的聯繫是什麼?
答:
JSP
是
Servlet
技術的擴展,本質上是
Servlet
的簡易方式,更強調應用的外表表達。
JSP
編譯後是
"
類
servlet"
。
Servlet
和
JSP
最主要的不同點在於,
Servlet
的應用邏輯是在
Java
文件中,並且完全從表示層中的
HTML
裏分離開來。而
JSP
的情況是
Java
和
HTML
可以組合成一個擴展名爲
.jsp
的文件。
JSP
側重於視圖,
Servlet
主要用於控制邏輯。
83
、四種會話跟蹤技術
答:
會話作用域
ServletsJSP
頁面描述
page
否是代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的
Java servlet
類(可以帶有任何的
include
指令,但是沒有
include
動作)表示。這既包括
servlet
又包括被編譯成
servlet
的
JSP
頁面
request
是是代表與
Web
客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個
Web
組件(由於
forward
指令和
include
動作的關係)
session
是是代表與用於某個
Web
客戶機的一個用戶體驗相關的對象和屬性。一個
Web
會話可以也經常會跨越多個客戶機請求
application
是是代表與整個
Web
應用程序相關的對象和屬性。這實質上是跨越整個
Web
應用程序,包括多個頁面、請求和會話的一個全局作用域
84
、
Request
對象的主要方法
答:
setAttribute(String name,Object)
:設置名字爲
name
的
request
的參數值
getAttribute(String name)
:返回由
name
指定的屬性值
getAttributeNames()
:返回
request
對象所有屬性的名字集合,結果是一個枚舉的實例
getCookies()
:返回客戶端的所有
Cookie
對象,結果是一個
Cookie
數組
getCharacterEncoding()
:返回請求中的字符編碼方式
getContentLength()
:返回請求的
Body
的長度
getHeader(String name)
:獲得
HTTP
協議定義的文件頭信息
getHeaders(String name)
:返回指定名字的
request Header
的所有值,結果是一個枚舉的實例
getHeaderNames()
:返回所以
request Header
的名字,結果是一個枚舉的實例
getInputStream()
:返回請求的輸入流,用於獲得請求中的數據
getMethod()
:獲得客戶端向服務器端傳送數據的方法
getParameter(String name)
:獲得客戶端傳送給服務器端的有
name
指定的參數值
getParameterNames()
:獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實例
getParameterValues(String name)
:獲得有
name
指定的參數的所有值
getProtocol()
:獲取客戶端向服務器端傳送數據所依據的協議名稱
getQueryString()
:獲得查詢字符串
getRequestURI()
:獲取發出請求字符串的客戶端地址
getRemoteAddr()
:獲取客戶端的
IP
地址
getRemoteHost()
:獲取客戶端的名字
getSession([Boolean create])
:返回和請求相關
Session
getServerName()
:獲取服務器的名字
getServletPath()
:獲取客戶端所請求的腳本文件的路徑
getServerPort()
:獲取服務器的端口號
removeAttribute(String name)
:刪除請求中的一個屬性
85
、我們在
web
應用開發過程中經常遇到輸出某種編碼的字符,如
iso8859-1
等,如何輸出
一
個某種編碼的字符串?
答:
Public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
86
、
Servlet
執行時一般實現哪幾個方法?
答:
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()