應聘Java筆試時可能出現問題及其答案 (JSP與Servlet)

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()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章