JSP和Servlet初級知識點總結
一、JSP九大內置對象
輸出輸入對象
1.out:用於向客戶端、瀏覽器輸出數據。
2.request(HttpServletRequest類):用於接收客戶端請求信息。
3.response(HttpServletResponse類):封裝了伺服器的響應,用於響應客戶端。
通信控制對象
4.session(HttpSession類):保存會話信息。
5.application:相當於一個全局表量,實現不同用戶的信息共享。
6.pageContext:提供對其他八個對象的訪問。
servlet對象
7.page(Object類):代表JSP本身,相當於java中的this引用變數。
8.conf(ServletConfig類):封裝應用請求的配置信息。
異常對象
9.exception:封裝JSP執行過程中發生的異常和錯誤信息。
二、Servlet生命周期
當有一個servlet請求被Web伺服器接收到,伺服器先調用init()方法進行初始化。知道servlet對象被銷毀,init()方法只會被調用一次。
此後每次用戶請求時,Web伺服器都會調用service()方法來處理請求。service會檢查用戶請求方式,選擇調用doGet或者doPost等方法。
調用destroy()銷毀servlet對象,destroy也只調用一次,最後JVM垃圾回收器進行回收。
三、JSP和servlet的區別與聯繫
JSP(Java Server Pages):java伺服器頁面,其根本是簡化servlet的設計。
servlet:是java編寫的服務端程序,主要功能是互動式地瀏覽和修改數據,生成動態Web內容。
JSP代碼執行前,會被服務端的JSP引擎轉換為.java文件,然後由JSP引擎調用Java編譯器,將其.java文件編譯為.class文件,然後由JVM執行。
servlet本身是.java文件,編譯後由JVM執行。
JSP更擅長頁面的表示,其中也可以嵌入java代碼。而servlet主要是java代碼,負責業務邏輯控制。
四、doGet和doPost的區別
form表單中默認是get方式,超鏈接中也是get方式。
1、get提交的表單數據會存放在URL地址後,可以直接看到,安全性低。post提交的表單數據存放在http協議消息體中,無法直接看到,安全性高。
2、get提交方式數據量長度有限,一般不超過2kb,post提交方式沒有大小限制,更適合大規模的數據傳輸。
3、get方式在用戶刷新時不會有任何提示,post會彈出提示框,問用戶是否重新提交。
五、JSP四個作用域
1、page:在當前的JSP頁面有效,跳轉後無效。
2、request:從一個請求被處理到返迴響應整個過程有效。數據被轉發到其他jsp頁面依然有效。
3、session:在當前會話有效,也就是說從一個瀏覽器開啟到關閉都有效。
4、application:相當於全局變數,只要不被手動刪除,或關閉web伺服器,在任何瀏覽器中都有效。
六、轉發和重定向的區別
1、轉發是在服務端行為,客戶端並不知道。而重定向是客戶端行為。
2、轉發的速度快,重定向慢。
3、轉發是同一個請求,而重定向是兩個不同的請求。
4、轉發的URL地址欄不會變,重定向會變成請求的新地址。
5、轉發後request域中的信息可訪問到,重定向不能。
6、轉發可以訪問WEB-INF文件夾,重定向不能。
注釋:轉發和重定向原理。
轉發過程:客戶首先發送一個請求到服務端,服務端匹配servlet,servlet執行時調用getRequestDispacher()方法,把請求直接轉發給指定的test.jsp,整個流程都是在服務端進行的,也都是在同一個請求完成的,servlet和test.jsp共享同一個request。
重定向過程:客戶端發送第一個請求,服務端匹配servlet,servlet調用sendRedirect()方法,這個方法是response的方法,服務端返回這個響應,告訴客戶端你需要再發送一個請求去訪問test.jsp。客戶端接收到服務端的這個響應後,就立刻發出第二個新請求,去請求test.jsp。兩個請求互不干擾,相互獨立,所有之前的request域里的值,重定向的test.jsp都訪問不到。
七、session的失效時間設置
1、在servlet中用session.setMaxInactiveInterval(int interval)方法設置失效時間,以秒為單位的。
2、在web.xml里設置:(已分鐘為單位)
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3、tomcat的conf文件夾下的web.xml里設置,同上。(已分鐘為單位)
八、亂碼問題及解決
1、JSP頁面中,設置<%@ page language="java" contentType="text/html;
charset=UTF-8" pageEncoding="UTF-8"%>
2、servlet中,request.seCharacterEncoding(「utf-8」);
3、把獲取到的字元串,轉成byte數組,在轉成」utf-8」字符集。例如:
String s = request.getgetParameter("name");
byte[] b = s.getbytes(「iso-8859-1」);
String s2 = new String(b,」utf-8」);
※使用RedisTemplate(JDK序列化策略)緩存實體類
※Python 異常處理
TAG:程序員小新人學習 |