文章目錄
寫在前面
用eclipse創建一個jsp項目後,eclipse會複製tomcat文件到工作空間下,這樣導致原先下的tomcat和eclipse使用的tomcat是互不干擾的兩個服務器,修改原先下的tomcat配置文件不會影響eclipse項目中的tomcat。
jsp的頁面元素
- 腳本 Scriptlet
i. <% java代碼,定義局部變量 %>
ii. <%! 定義全局變量,方法%>
iii.<%=輸出表達式%> —>等價於 <% out.print(內容); %>
<% out.print("helloworld"); %>
<%! public void init() {} %>
<%="helloworld" %>
- html、css、js
- 指令
i.page指令:<%@page…%> 屬性:language(jsp使用的腳本語言)、import(導入的包)、pageEncoding(jsp自身的編碼 jsp–>java)、contentType(瀏覽器解析的編碼)
<%@page import = "java.util.*"%>
<%@page contentType="text/html;charset=utf-8"%>
<%@page language="java" %>
<%@page pageEncoding="utf-8" %>
ii.include指令:<%@include…%>
iii.taglib指令:<%@taglib…%>
- 註釋
i.html註釋:可以查看源碼看到
ii.java註釋 : 不會在網頁源代碼中顯示
iii.jsp註釋:<%-- 註釋內容 --%> 不會在網頁源代碼中顯示
jsp 9大內置對象
jsp自帶的,不需要new的對象
out
向客戶端輸出內容
out.print("helloworld");
pageContext
request
請求對象;存儲了“客戶端向服務端發送的請求信息”
常見方法
- String getParameter(String name)
根據name取值,key–value - String[] getParameterValues(String name)
根據name取一組值 - void setCharacterEncoding(“utf-8”)
設置請求編碼,默認根據tomcat的編碼(7以前是iso-8859-1,8之後爲utf-8) - getRequestDispatcher(“b.jsp”).forward(request,response)
請求轉發,用於頁面跳轉 - SerletContext getServeContext()
獲取項目的SerletContext()對象
response
響應對象,
常用方法:
- void addCookie(Cookie cookie);
服務端向客戶端增加一個cookie對象 - void sendRedirect(String location) throws IOException;
重定向,頁面跳轉的一種方式 - void setContentType(String type)
設置服務端相應編碼(設置服務端Content編碼類型)
轉發和重定向的區別:
轉發 | 重定向 |
---|---|
request | response |
地址欄保留轉發時的地址 | 地址欄變爲重定向後的地址 |
數據不丟失 | 數據丟失 |
請求一次 | 請求兩次 |
在服務端跳轉 | 在客戶端跳轉 |
轉發
重定向
cookie+ session
- session : 在服務端,內置對象
- cookie :在客戶端,不是內置對象,需要new
cookie
有服務端產生,發送給客戶端保存,作本地緩存,將一些數據存放在本地,可以提高訪問服務器效率,但是安全性較差。
裏面有鍵值對:name–value
建議cookie中不保存中文,否則要編碼和解碼
方法:
- public Cookie(String name,String value);
- String getName()
獲取name - String getValue()
獲取value - void setMaxAge(int expiry)
設置最大有效期(單位:秒)
服務端發送cookie
1.response.addCookie(Cookie cookie)
2.頁面跳轉(轉發,重定向)
客戶端獲取cookie
request.getCookies()【只能一次性把cookie全拿到】
session
會話:打開一個網站到關閉網頁稱爲一次會話。
機制:
- 服務器會給每一個連接的客戶端創建一個session。
- 當客戶端第一次訪問服務器時,客戶端創建一個session。
- 這個session中有sessionId,服務器會將這個sessionId保存到name爲JSESSIONID的cookie中
- 將這個cookie發送給客戶端,用以區分不同的客戶端。
- 當客戶端再次訪問時,可以直接尋找對應的session.
- session在同一個用戶請求時共享
方法:
- String getId() : 獲取sessionId
- boolean isNew() : 判斷是否是 新用戶(第一次訪問)
- void invalidate() : 使session失效(退出登錄、註銷)
- void setAttribute(name ,value) : 存儲信息
- Object getAttribute(name) : 獲得信息
- void setMaxInactiveInterval(秒) : 設置最大有效 非活動時間
- int getMaxInactiveInterval() : 查看最大有效 非活動時間
- removeAttribute() : 刪除某一信息
區別:
cookie | session |
---|---|
保存在客戶端 | 保存在服務端 |
較不安全 | 較安全 |
保存String–String | 保存String – Object |
application
全局對象,可以獲得全部信息。
- String getContextPath():獲取當前路徑的虛擬路徑
- String getRealPath(“虛擬路徑”):獲取絕對路徑(虛擬路徑相對的絕對路徑)
config
配置對象,(服務器配置信息)
page
當前JSP頁面對象,相當於java中的this.
exception
異常對象
四種範圍對象
- pageContext(一般會說page對象,不是九大內置對象的page對象):當前頁面有效
- request:同一次請求有效(請求轉發有效,重定向無效)
- session:同一次會話有效(關閉/切換瀏覽器無效)
- application:全局有效(整個項目有效,服務器重啓無效)
共有的方法:
- Object getAttribute(String name):根據屬性名,獲取屬性值
- void setAttribute(String name , Object obj):設置屬性值(新增,修改)