你們好,我是Java最全面試題庫的提褲姐,今天這篇是JavaWeb系列的第四篇,主要總結了JavaWeb中JSP相關的問題,在後續,會沿着第一篇開篇的知識線路一直總結下去,作到日更!若是我能作到百日百更,但願你也能夠跟着百日百刷,一百天養成一個好習慣。html
定義:jsp
本質上就是一個 Servlet
,它是 Servlet 的一種特殊形式(由 SUN 公司推出),每一個 jsp 頁面都是一個 servlet實例。
Servlet 是由 Java 提供用於開發 web 服務器應用程序的一個組件,運行在服務端,由 servlet 容器管理,用來生成動態內容。
一個 servlet 實例是實現了特殊接口 Servlet 的 Java 類,全部自定義的 servlet 均必須實現 Servlet 接口。web
區別:面試
頁面顯示
;邏輯控制
,mvc 設計思想中 jsp 位於視圖層,servlet 位於控制層Jsp 運行機制:
數據庫
JVM 只能識別 Java 類,並不能識別 jsp 代碼;
web 容器收到以.jsp
爲擴展名的 url 請求時,會將訪問請求交給tomcat 中 jsp 引擎
處理,每一個 jsp 頁面第一次被訪問時,jsp 引擎將 jsp 代碼解釋爲一個 servlet
源程序,接着編譯servlet 源程序生成.class
文件,再由web 容器 servlet 引擎去裝載執行 servlet 程序,實現頁面交互。瀏覽器
四大域對象:tomcat
pageContext page 域
:指當前頁面,在當前 jsp 頁面有效,跳到其它頁面失效request request 域
:指一次請求範圍內有效,從 http 請求到服務器處理結束,返回響應的整個過程。在這個過程當中使用 forward(請求轉發)方式跳轉多個 jsp,在這些頁面裏你均可以使用這個變量session session 域
:指當前會話有效範圍,瀏覽器從打開到關閉過程當中,轉發、重定向都可以使用application context 域
:指只能在同一個 web 中使用,服務器未關閉或者重啓,數據就有效對象 | 生命週期 | 做用域 | 使用狀況 |
---|---|---|---|
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中的定義的成員變量。服務器
區別:session
實現方式:mvc
response.sendRedirect("重定向的路徑")
request.getRequestDispatcher("轉發路徑").forward(request, response);
1.JSP與Java Servlet同樣,是在服務器端執行的,一般返回該客戶端的就是一個HTML文本,所以客戶端只要有瀏覽器就能瀏覽
2.在大多數Browser/Server結構的Web應用中,瀏覽器直接經過HTML或者JSP的形式與用戶交互,響應用戶的請求
3.JSP在服務器上執行,並將執行結果輸出到客戶端瀏覽器,咱們能夠說基本上與瀏覽器無關app
一、JSP頁面顯示亂碼 <%@ page contentType=」text/html; charset=gb2312″%>
二、表單提交中文時出現亂碼request.seCharacterEncoding("gb2312″)
對請求進行統一編碼
三、數據庫鏈接出現亂碼 要涉及中文的地方所有是亂碼,解決辦法:在數據庫的數據庫URL中加上useUnicode=true&characterEncoding=GBK
就能夠了。
四、經過過濾器完成
五、在server.xml
中的設置編碼格式
<%@ page session="false" %>
當客戶端向一個jsp頁面發送請求時,Web Container將jsp轉化成servlet的源代碼(只在第一次請求時),而後編譯轉化後的servlet並加載到內存中執行,執行的結果response到客戶端
jsp只在第一次執行的時候會轉化成servlet,之後每次執行,web容器都是直接執行編譯後的servlet,因此jsp和servlet只是在第一次執行的時候不同,jsp慢一點,之後的執行都是相同的。