javaweb jsp整理
jsp, java server page
jsp頁面是在服務器上運行的一個頁面
動態網頁
與後臺有數據交互的頁面
與其他語言的區別:
jsp 使用java語言進行開發, 安全性高, 適合大型項目, 企業級的文本應用
分布式項目, 服務器集群, hadoop
asp.net 使用c#, .Net平臺, 簡單易用, 因為不開源, 所以安全性低, 並且不能跨平臺
使用.Net開發項目, 最好使用windows系統和sqlserver數據庫
php 簡單 高效 成本低 開發周期短, 適合中小型企業的web應用開發
php的黃金搭檔---(LAMP: linux, Apache, Mysql, PHP)
Tomcat介紹
conf---Tomcat的所有配置
webapps---需要部署的項目
work---Tomcat運行之後編譯的文件
lib運行Tomcat服務器所需要的 jar 文件
運行項目的虛擬路徑
右鍵點擊項目 --> properties --> web project settings --> context root 更改這個名字就可以修改項目的虛擬路徑
改完以後要重新部署項目並且重新啟動Tomcat
jsp的組成元素;
1, 指令
page指令
<%@ page ..........%>
language---當前頁面使用的語言:java
import---當前頁面引入的類庫, 默認是啥也不引入
contentType---text/html; charset=‘字符集‘
iso-8859-1是字符集的默認值, 純英文的字符集
include指令
taglib指令
2, 表達式
<%=變量名%>
3, 腳本
<% 代碼內容 %>
4, 聲明
<%! 代碼聲明 %>
5, 註釋
可見<!-- -->
不可見<%-- --%>
腳本中使用的註釋
/**/, //
?6, 一些靜態內容
jsp九大內置對象:
5, response 響應對象
6, page 當前頁面對象
7, out 輸出流對象
8, exception 異常
9, config ServletConfig/FilterConfig對象
作用域(每一種作用域的生命周期是不一樣的):
1, application 全局作用域
2, session 會話作用域
3, request 請求作用域
4, pageContext 頁面作用域
優先級(按照生命周期的長短):
application > session > request > pageContext
ai pu ‘lei kei shen>sai‘shen>rui‘kuai ‘si‘t>pei‘zhi‘ kang‘tai‘si‘t
頁面中的form表單提交方式:
post:
提交內容不可見, 沒有長度限制
get:
有長度限制, 提交內容在地址欄可見
request對象:
request對象是HttpServletRequest這個類的實例
常用方法:
String getParameter(String name)---返回name指定的參數的值
String[] getParameterValues(String name)---返回一個數組, 是包含那個參數名的所有的人
void setAttribute(String, Object)---設置某個作用域中的屬性
Object getAttribute(String name)---獲取某個作用域中的屬性
String getServerName()---返回請求服務器的主機名
String getContentType()---返回請求體的MIME類型
String getprotocol()---返回請求用的協議類型和版本號
int getServerPort()---獲取服務器的端口號
int getContentLength()---返回請求體的長度(單位是字節)
String getRemoteAddr()---返回發送此請求的客戶端的IP地址
String getRealPath(String path)---返回傳入的這個路徑的物理路徑
String getContextPath()---返回上下文路徑
解決request中出現中文亂碼的問題
post方式:
通過使用request.setCharacterEncoding("utf-8")來設置
get方式:
通過修改Tomcat服務器中的server.xml配置文件來設置
response對象
response對象是HttpServletResponse的實例
常用方法;
setCharacterEncoding(String name)---設置響應頁面使用的字符編碼
setContentType("text/html; charset=utf-8")---設置(MIME類型)請求頭
response.getWriter().append(String content)---向頁面輸出一段字符串
out對象的類型是JspWriter, 而response.getWriter()是一個PrintWriter, out對象也可以通過pageContext.getOut()獲得, 這兩個對象的類型不一樣
out.print(null);會拋出異常, PrintWriter.print(null)不會拋出異常
JspWriter是一個抽象類, PrintWriter是一個繼承了Writer的普通類
getWriter()方法可以在頁面上輸出一串字符, out也是一個輸出對象, 兩者的區別在於, getWriter()方法的執行結果, 總是優先於out對象, 可以使用out.flush()方法, 強行屬性緩沖區的內容, 將out對象的輸出結果先輸出出來
造成這種現象的原因:
out對象實際上對PrintWriter是有依賴的, 他需要先將需要輸出的內容存到response的緩沖區裏面, 然後等待jsp頁面中的out滿足一定條件之後, 才會調用輸出的方法把內容直接輸出到頁面上
而PrintWriter是可以直接輸出出來的
轉發和重定向(面試98%會問)
response.sendRedirect(String location)---請求重定向
客戶端行為, 從本質上講相當於兩次請求, 第一次請求的對象不會被保存, 地址欄的Url地址會改變
request.getRequestDispatcher().forward(request, response)---請求轉發
服務器行為, 相當於一次請求, 轉發後請求對象會被保存, 地址欄url不會改變
舉例說明: 辦證
Session對象
session指的是用戶在進入一個網站開始到關閉瀏覽器的時間, Tomcai服務器默認的session有效時間是30分鐘, 也就是說, 打開一個網站30分鐘之內沒有動作, session對象同樣也會失效
session存在服務器的內存中, 服務器中不同的用戶對應的session也是不同的, 所以服務器用來判斷當前登錄的用戶是否是同一個的時候就需要session
session對象是HttpSession的實例
常用方法:
long getCreationTime()---返回session對象創建的時間
String getId()---返回一個sessionid, 是唯一的
void setAttribute()---設置一個屬性和一個屬性值
Object getAttribute()---獲取某個屬性的屬性值
String[] getValueNames()---以數組的形式獲取session對象中所有可用屬性的屬性名
setMaxInactiveInterval()---設置session經過多長時間之後失效(默認30分鐘)
getMaxInactiveInterval()---設置session的失效時間(單位是秒)
session的生命周期:
創建: 當用戶第一次訪問某個jsp或者servlet的時候, 服務器就會為當前的訪問創建一個session, 並生成一個sessionId, 每次客戶端向服務器發送請求的時候, 都會將這個sessionId帶過去進行驗證
活動: 在這個頁面的各種活動, 比如通過超級連接打開另一個頁面, 或者進行各種增刪改查的操作, session失效除非要等到瀏覽器的相關頁面全部關閉, 或者session超時, 當再次訪問的時候會創建一個新的session, 但是原來的session還會存在, 只不過沒有任何請求再帶著那個舊的sessionId讓服務器去驗證了
銷毀:
三種方法可以銷毀session
1, 調用session.invalidate()方法
2, session自己過期了
設置session過期時間也可以在web.xml中設置
<session-conf>
<session-timeout>
10<!-- 單位是分鐘 ! -->
</session-timeout>
</session-conf>
3, 服務器重新啟動
javaweb jsp整理