【023】JavaWeb面試題(四):JSP

開篇介紹

你們好,我是Java最全面試題庫的提褲姐,今天這篇是JavaWeb系列的第四篇,主要總結了JavaWeb中JSP相關的問題,在後續,會沿着第一篇開篇的知識線路一直總結下去,作到日更!若是我能作到百日百更,但願你也能夠跟着百日百刷,一百天養成一個好習慣。html

什麼是 jsp,什麼是Servlet?jsp 和Servlet 有什麼區別?

定義:
jsp 本質上就是一個 Servlet,它是 Servlet 的一種特殊形式(由 SUN 公司推出),每一個 jsp 頁面都是一個 servlet實例。
Servlet 是由 Java 提供用於開發 web 服務器應用程序的一個組件,運行在服務端,由 servlet 容器管理,用來生成動態內容。
一個 servlet 實例是實現了特殊接口 Servlet 的 Java 類,全部自定義的 servlet 均必須實現 Servlet 接口。web

區別:面試

  • jsp 是 html 頁面中內嵌的 Java 代碼,側重頁面顯示
  • Servlet 是 html 代碼和 Java 代碼分離,側重邏輯控制,mvc 設計思想中 jsp 位於視圖層,servlet 位於控制層

Jsp 運行機制:
JSP執行過程.png數據庫

JVM 只能識別 Java 類,並不能識別 jsp 代碼;
web 容器收到以.jsp 爲擴展名的 url 請求時,會將訪問請求交給tomcat 中 jsp 引擎處理,每一個 jsp 頁面第一次被訪問時,jsp 引擎將 jsp 代碼解釋爲一個 servlet 源程序,接着編譯servlet 源程序生成.class 文件,再由web 容器 servlet 引擎去裝載執行 servlet 程序,實現頁面交互。瀏覽器

jsp 有哪些域對象?

四大域對象:tomcat

  • pageContext page 域:指當前頁面,在當前 jsp 頁面有效,跳到其它頁面失效
  • request request 域:指一次請求範圍內有效,從 http 請求到服務器處理結束,返回響應的整個過程。在這個過程當中使用 forward(請求轉發)方式跳轉多個 jsp,在這些頁面裏你均可以使用這個變量
  • session session 域:指當前會話有效範圍,瀏覽器從打開到關閉過程當中,轉發、重定向都可以使用
  • application context 域:指只能在同一個 web 中使用,服務器未關閉或者重啓,數據就有效

jsp有哪些內置對象?

對象 生命週期 做用域 使用狀況
request 一次請求 只在 Jsp 頁面內有效 用於接受經過 HTTP 協議傳送到服務器的數據(包括頭信息、系統信息、請求方式以及請求參數等)。
Reponse 一次響應 只在 Jsp 頁面內有效 表示服務器端對客戶端的迴應。主要用於設置頭信息、跳轉、Cookie 等
Session 從存入數據開始,默認閒置 30 分鐘後失效 會話內有效 用於存儲特定的用戶會話所需的信息
Out 用於在 Web 瀏覽器內輸出信息,而且管理應用服務器上的輸出緩衝區
PageContext 用於存取其餘隱含對象,如 request、reponse、session、application 等對象。(實際上,pageContext 對象提供了對 JSP 頁面全部的對象及命名空間的訪問。
Page page 對象表明 JSP 自己(對應 this),只有在 JSP 頁面內纔是合法的
Exception 顯示異常信息,必須在 page 指令中設定< %@ page isErrorPage="true" %>才能使用,在通常的 JSP 頁面中使用該對象將沒法編譯 JSP 文件
Application 服務器啓動發送第一個請求時就產生了Application 對象,直到服務器關閉。 用於存儲和訪問來自任何頁面的變量全部的用戶分享一個 Application 對象
Config 取得服務器的配置信息

<%…%>和<%!…%>的區別

<%…%>用於在JSP頁面中嵌入Java腳本
<%!…%>用於在JSP頁面中申明變量或方法,能夠在該頁面中的<%…%>腳本中調用,聲明的變量至關於Servlet中的定義的成員變量。服務器

forward與redirect 的區別?有哪些方式實現

區別:session

  • forward是把另外一個頁面加載到本頁面,不改變瀏覽器的路徑
  • redirect是跳轉到另外一個頁面,會改變瀏覽器的路徑

實現方式:mvc

  • 重定向: response.sendRedirect("重定向的路徑")
  • 轉發: request.getRequestDispatcher("轉發路徑").forward(request, response);

瀏覽器與jsp,html之間的關係

1.JSP與Java Servlet同樣,是在服務器端執行的,一般返回該客戶端的就是一個HTML文本,所以客戶端只要有瀏覽器就能瀏覽
2.在大多數Browser/Server結構的Web應用中,瀏覽器直接經過HTML或者JSP的形式與用戶交互,響應用戶的請求
3.JSP在服務器上執行,並將執行結果輸出到客戶端瀏覽器,咱們能夠說基本上與瀏覽器無關app

jsp亂碼如何解決,給出對應解決方案

一、JSP頁面顯示亂碼 <%@ page contentType=」text/html; charset=gb2312″%>
二、表單提交中文時出現亂碼request.seCharacterEncoding("gb2312″)對請求進行統一編碼
三、數據庫鏈接出現亂碼 要涉及中文的地方所有是亂碼,解決辦法:在數據庫的數據庫URL中加上useUnicode=true&characterEncoding=GBK就能夠了。
四、經過過濾器完成
五、在server.xml中的設置編碼格式

Servlet和CGI的區別?

  • Servlet處於服務器進程中,只會有一個servlet實例,每一個請求都會產生一個新的線程,並且servlet實例通常不會銷燬
  • CGI:來一個請求就建立一個進程,用完就銷燬,效率低於servlet

如何避免jsp頁面自動生成session對象?

<%@ page session="false" %>

JSP是如何被執行的?執行效率比SERVLET低嗎?

當客戶端向一個jsp頁面發送請求時,Web Container將jsp轉化成servlet的源代碼(只在第一次請求時),而後編譯轉化後的servlet並加載到內存中執行,執行的結果response到客戶端

jsp只在第一次執行的時候會轉化成servlet,之後每次執行,web容器都是直接執行編譯後的servlet,因此jsp和servlet只是在第一次執行的時候不同,jsp慢一點,之後的執行都是相同的。

相關文章
相關標籤/搜索