JSP和Servlet知識點總結
第一章: 動態網頁開發基礎
三大領域: B/S(網站)C/S(QQ) 嵌入式開發(蘋果,安卓手機)
動態網頁/靜態網頁:
所需技術:html,css,資料庫,javascript,xml,一門高階語言(java,C#,PHP)
主流的動態網頁技術:jsp/asp.net/php
Web伺服器一般指網站伺服器,是指駐留於因特網上某種型別計算機的程式,可以向瀏覽器等Web客戶端提供文件,也可以放置網站檔案,讓全世界瀏覽;可以放置資料檔案,讓全世界下載。目前最主流的三個Web伺服器是Apache Nginx IIS(Microsoft的Internet資訊伺服器(Internet Information Services,IIS)
常見的web伺服器:
1. weblogic oracle 公司 2. websphere IBM公司 3. Jboss 免費的開源的 4. tomcat 小型的
一、JSP 定義: 1)Java Server Page, Java EE 元件,本質上是 Servlet。
2)執行在 Web Container.接收 Http Request,生成 Http Response(預設協議是 Http 請求和響應)
3)JSP 使得我們能夠分離頁面的靜態 HTML 和動態部分——我們需要的技術。
4)使頁面可以混和html程式碼、Java程式碼以及JSP標籤;允許訪問元件
2、JSP出現:servlet做介面比較麻煩
3、JSP是編譯執行,PHP為解釋執行 (注)解釋類:執行方式類似於我們日常生活中的“同聲翻譯”,應用程式原始碼一邊由相應語言的直譯器“翻譯”成目的碼(機器語言),一邊執行,因此效率比較低,而且不能生成可獨立執行的可執行檔案,應用程式不能脫離其直譯器,但這種方式比較靈活,可以動態地調整、修改應用程式。編譯類:編譯是指在應用源程式執行之前,就將程式原始碼“翻譯”成目的碼(機器語言),因此其目標程式可以脫離其語言環境獨立執行,使用比較方便、效率較高。但應用程式一旦需要修改,必須先修改原始碼,再重新編譯生成新的目標檔案(*.OBJ)才能執行,只有目標檔案而沒有原始碼,修改很不方便。
4、Tomcat的獲取與安裝
1. Tomcat安裝完畢後要設定TOMCAT_HOME環境變數設定方法與java環境變數步驟類似,設定值為Tomcat的安裝目錄
2. Tomcat啟動與停止
通過伺服器實現啟動或停止
通過控制面板>管理工具>服務>滑鼠右擊Apache Tomcat選擇啟動停止
通過Tomcat選單中的Monitor Tomcat工具啟動或停止Tomcat服務
通過所有程式>Apache Tomcat XX>Monitor Tomcat>General選擇啟動或停止
5、Tomcat目錄結構
/bin 存放各種平臺下用於啟動和停止Tomcat的指令碼檔案
/conf 存放Tomcat伺服器的各種配置檔案,其中最重要的是server.xml
/lib 存放Tomcat伺服器所需的各種JAR檔案
/logs 存放Tomcat的日誌檔案
/temp Tomcat執行時用於存放臨時檔案
/webapps Web應用的釋出目錄
/work Tomcat把由JSP生成的Servlet放於此目錄下
6、server.xml 配置
埠號的配置:
Tomcat目錄下>conf>server.xml 開啟後找到<Connector>節點然後修改port屬性
http://localhost:8080/
Web應用的目錄結構,web應用是位於tomcat/webapps目錄下的一個子目錄
/ web的根目錄存放各類jsp,html
/WEB-INF 存放應用程式所使用的各種資源包括web.xml
/WEB-INF/classes 存放class檔案
/WEB-INF/lib 存放JAR檔案
配置web應用起始頁:
修改web.xml檔案中的以下兩個標籤,注意標籤名
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
第二章-JSP的組成
JSP的執行過程: 翻譯階段
編譯階段
執行階段
JSP頁面組成:靜態內容 ,指令,表示式 ,小指令碼 ,宣告 ,註釋
JSP中的註釋:HTML註釋,JSP註釋標記,
JSP指令元素page
Language屬性
Import屬性
contentType屬性
舉例: <%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
jsp表示式:其語法為<%= java表示式%>,容器會先計算表示式的值或者變數的值,然後將結果輸出的頁面
jsp宣告 可以定義變數和方法,其中變數的值會一直保持,頁面重新整理不會重置該變數的值
定義在小腳本里面的變數,每次重新整理頁面會重置該變數的值
jsp頁面中的程式碼執行載入順序
java是在生成頁面時在伺服器端執行的程式碼,jsp在伺服器的servlet裡執行,而javascript和html都是頁面生成完在瀏覽器端執行的程式碼。所以載入執行順序是是java>jsp>js。
第三章-jsp資料互動
JSP內建物件:request,response,out,application,session
1. Request物件專門用於處理客戶端請求
Request方法:String getParamenter(根據頁面表單元件名稱獲取頁面提交資料)
String[] getParamenterValues(獲取一個頁面表單元件對應多個值時的使用者請求資料)
Void setCharacterEncoding(解決中文亂碼)
Request.getRequsestDispacher(path)(返回一個javax.servlet.RequestDispacher物件,該物件用forward方法用於轉發請求)
2. JSP內建物件response
1. response物件與request物件相對應,它用於響應客戶端輸出資訊
2. response物件幾個常用方法
addCookie(Cookie cookie) 在客戶端新增Cookie
setContentType(String type) 設定HTTP響應的contentType型別
setCharacterEncoding(String chareet)設定響應所採用的字元編碼型別
重點:( sendRedirect(String path) 將請求重新定位到一個不同的URL上)
(注)1. 什麼是轉發:
使用request的getRequestDispatcher()方法即可實現
轉發就是將客戶端傳送請求到伺服器,Web伺服器內部的方法在容器內完成處理和請求和轉發,然後將目標資源傳送給瀏覽器,不管伺服器內部如何處理,瀏覽器都只提出了一個請求,因而客戶端的URL地址不會發生改變,因此可以共享request範圍內的資料 轉發的作用:在多個頁面互動的過程中實現請求術數據的共享。
2. 重定向的執行結果就是客戶端重新向伺服器請求一個地址連結,由於是傳送新的請求因而上次請求中的資料將丟失這種行為就是重定向 response.sendRedirect("welcome.jsp")]
重定向和轉發的區別
區別一:
重定向時瀏覽器上的網址改變
轉發是瀏覽器上的網址不變
區別二:
重定向實際上產生了兩次請求
轉發只有一次請求
重定向:
傳送請求 -->伺服器執行-->響應請求,返回給瀏覽器一個新的地址與響應碼-->瀏覽器根據響應碼,判定該響應為重定向,自動傳送一個新的請求給伺服器,請求地址為之前返回的地址-->伺服器執行-->響應請求給瀏覽器
轉發:
傳送請求 -->伺服器執行-->進行請求的重新設定,例如通過request.setAttribute(name,value)-->根據轉發的地址,獲取該地址的網頁-->響應請求給瀏覽器
區別三:
重定向時的網址可以是任何網址
轉發的網址必須是本站點的網址
詳解:
重定向:以前的request中存放的變數全部失效,並進入一個新的request作用域。
轉發:以前的request中存放的變數不會失效,就像把兩個頁面拼到了一起
三、JSP訪問資料庫
1. JDBC連結資料庫
(1) 載入JDBC驅動。
(2) 與資料庫建立連結。
(3) 傳送SQL語句,並得到返回結果。
(4) 處理返回結果。
(5) 資料庫訪問結束後,進行資源釋放。
使用JSP訪問資料庫,就是將JDBC訪問資料庫程式碼嵌入到JSP頁面中,實現步驟與java相同。
第四章-狀態管理
一. cookie
(一) 在jsp中使用cookie
1. 使用page指令
<%@page import=”javax.servlet.http.cookie”%>
2. 建立cookie物件
Cookie newCookie=new Cookie(String key,Object value);
3. 寫入cookie
Response.addCookie(newCookie);
4. 讀取cookie
Cookie[] cookies=request.getCookies();
(二) cookie物件的幾個方法60*60*24
void setMaxAge(int expiry) 設定有效期,單位秒
void setValue(String value)
String getName()
String getValue()
Int getMaxAge() 獲取有效期,單位秒
二. session
(一) session物件的幾個常用方法
void setAttribute(String key,Object value);
Object getAttribute(String key)
void invalidate() 設定session物件失效
String getId() 獲取session id
void setMaxInactiveInterval(int interval) 設定session的非活動時間
int getMaxInactiveInterval() 獲取session的有效非活動時間
(二) session和cookie的區別
1. session是在伺服器端儲存使用者資訊,cookie是在客戶端儲存使用者資訊
2. session中儲存的是物件,cookie中儲存的是字串
3. session物件隨會話結束而關閉,cookie可以長久儲存在客戶端
4. cookie通常用於儲存不重要的使用者資訊,重要的資訊使用session儲存
session和cookie
預設情況下,瀏覽器同一個程序的不同頁面共享臨時Cookie,這個Cookie儲存的SessionID成為伺服器端識別Session的依據
Seesion物件有效期:一次會話(瀏覽器關閉可能導致會話結束)怎麼判斷會話結束:IE程序結束,重新開啟或換個瀏覽器,否則在桌面上重新開啟一個瀏覽器是指一個seesion物件
類似於生活中 當登入某個網站 關閉了改視窗 重新 開啟時 依舊有效
Seesion是儲存在伺服器中但是通過Cookie來實現
1. 重定向是客戶端跳轉,共有二次請求 轉發是伺服器端跳轉 只有最開始開啟頁面的一次請求
對Cookie的賦值只有等下一次瀏覽請求時才能生效
1.page代表JSP這個例項本身(用的少)
2.PageContext(域物件,存放資料只能在當前頁面有效)
3.session(域物件,存放資料在一次會話有效)
4.applaction(域物件 存放資料在整個Web應用執行週期有效)
5.cookie是由伺服器端生成,傳送給客戶端瀏覽器的,瀏覽器會將其儲存在某個目錄下的文字檔案中。
通過cookie,可以實現瀏覽器與伺服器之間的資料傳遞。
就WEB開發來說,一個會話就是使用者通過瀏覽器與伺服器之間的一次通話,它包含瀏覽器與伺服器之間的多次請求、響應過程。
session與cookie均能實現資訊的儲存,但是二者的區別如下。
session是在伺服器端儲存使用者資訊,cookie是在客戶端儲存使用者資訊。
session中儲存的是物件,cookie儲存的是字串。
session物件隨會話結束而關閉,cookie可以長期儲存在客戶端。
cookie通常用於儲存不重要的使用者資訊。我們可以降低程式碼的冗餘問題,並且修改起來也更加方便
三.include指令:<%@ include file=”應用檔案路徑”%>
JSP的四種範圍,分別為page、request、session、application
application:
全域性作用範圍,整個應用程式共享,就是在部署檔案中的同一個webApp共享,生命週期為:應用程式啟動到停止。
session:
會話作用域,當用戶首次訪問時,產生一個新的會話,以後伺服器就可以記住這個會話狀態。生命週期:會話超時,或者伺服器端強制使會話失效。
request:
請求作用域,就是客戶端的一次請求。
page:
一個JSP頁面。
以上作用範圍使越來越小, request和page的生命週期都是短暫的,他們之間的區別就是:一個request可以包含多個page頁(include,forward以及filte
四.application
(一)常用方法:
void serAttribute(String key,Object value)
Object getAttribute(String key)
String getRealPath(String path) 返回相對路徑的真實路徑
五.物件的範圍
(一)page範圍:單一jsp頁面的範圍
pageContext.setAttribute(“屬性名”,屬性值)
(二) request範圍:
request.setAttribute(“屬性名”,屬性值)
(三) session範圍,可以跨越多個請求
session.setAttribute(“屬性名”,屬性值)
(四) application範圍,全域性有效
application.setAttribute(“屬性名”,屬性值)
六.jsp的常用內建物件:out,request,response,session,application
1)JavaBean是Java中可以跨平臺的重用元件。
(2)JavaBean在應用中主要負責封裝資料和封裝業務處理。
(3)JavaBean的定義要遵循一定的規則,體現在以下幾個方面:
1.公有類,並提供無參的公有構造方法.
2.屬性私有。
3.具有公有的訪問屬性珠getter和setter方法。
第六章 jsp開發業務應用
分頁
分頁就是顯示資料,能夠按照指定格式顯示,佈局清晰,不受資訊數量限制。
目前的分頁方式有多種,一種是將所有查詢結果儲存在session物件或集合中,翻頁的時候從session或集合取出一頁所需的資料顯示。這種方法有兩個主要的缺點:一是使用者看到的可能是過期資料;二是如果量非常大,查詢一次結果集會耗費很長時間,並且儲存的資料也會佔用大量記憶體,效率明顯下降。
用SmartUpload元件實現檔案上傳
SmartUpload元件式一個實現檔案上傳的免費元件,雖然已不再提供更新,但由於使用簡單方便依然被非常廣泛地使用。
SmartUpload元件的應用:
<% page import=”com.jspsmart.upload.*” %>
<%
SmartUpload su =new SmartUpload();
//初始化SmartUpload物件
Su.initialize(pageContext);
Try{
Su.upload();
} catch(Exception e){
e.printSackTrace();
out.println(“你選擇的檔案上傳失敗!”);
}
//得到單個上傳檔案的資訊
Com.jspsmart.upload.File file=su.getFiles().getFile(0);
//設定檔案在伺服器的儲存位置
String filepath=”upload\\”;
Filepath+=file.getFileName();
//檔案另存為
File.saveAs(filepath,smartUpload.SAVE_VIRTUAL);
%>
第八章-JSTL和EL
EL表示式
作用:快速定位到作用域中的變數及其屬性。
特點:1.自動轉換型別。
2.使用簡單
語法: ${EL表示式}
操作符:
.操作符: 可以獲取物件的某個屬性值(例:${employee.computer})
[]操作符: 既可以獲取物件的某個屬性值,也可以獲取陣列型物件的某個下標的值(例:${employee[“computer”]}, ${list[0]})
EL隱式物件
作用域訪問物件:pageScope,requestScope,sessionScope,applicationScope。與page,request,session,application內建函式用法一致,可以訪問作用域內設定的函式。(例requestScope.name)
引數訪問物件:param,paramValues。可以訪問對應標籤的name屬性值和JSTL中定義的變數。(例:${param.name} ${paramValues.habits})
JSP隱式物件:pageContext提供對頁面資訊和JSP內建物件的訪問
[注:若查詢時不指定作用域範圍,則會照pageScope-requestScope―sessionScope―applicationScope順序查詢]
JSTL標準標籤庫
作用:可實現對頁面中的邏輯控制
[注:使用前要匯入核心標籤庫:
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %> ]
通用標籤
1.定義變數或重新賦值
<c:set var=”變數名” value=”值” scope=”範圍”/>
<c:set value=”值” target=”目標物件” property=”物件屬性名” />
2. 輸出內容
<c:out value=”值” default=”為空時顯示的預設值” />
3.移除變數
<c:remove var=”變數名” scope=”範圍” />
條件標籤
<c:if test=”判斷條件” var=”變數名” scope=”範圍”>
內容…
</c:if>
舉例<c:set var="isLogin" value="${not empty sessionScope.userId}"/>
<c:if test="${not login}">
…登入表單
</form>
</c:if>
迭代標籤
<c:forEach var=”當前成員引用名” items=”集合” varStatus=”屬性名”
begin=”開始位置,預設為0”
end=”結束位置”
step=”遞增量,預設為1”>
</c:forEach>
varStatus屬性值:
current 當前迭代項
index索引
count 迭代計數
first 是否為第一次迭代
last 是否為最後一迭代
begin/end/step 標籤的開始/結束/步長值
<!-- 迴圈輸出商品資訊 -->
<c:forEach var="product" items="${requestScope.products}" varStatus="status">
<!-- 如果是偶數行,為該行換背景顏色 -->
<tr <c:if test="${status.index % 2 == 1 }">style="background-color:rgb(219,241,212);"</c:if>>
<td>${product.name }</td>
<td>${product.area }</td>
<td>${product.price }</td>
</tr>
</c:forEach>
第十一章-Servlet基礎
1.servlet
1.1 servlet ==>Java類
1.2 該java程式要遵守servlet開發規範(怎麼遵守?通過 繼承servlet介面)
1.3 servlet 是執行在伺服器上的
1.4 servlet是jsp的基礎
1.5 tomcat 3個功能: jsp容器 Web伺服器 Servlet容器
3.servlet生命週期
3.1當用戶第一次訪問 servlet時,tomcat會幫忙把servlet物件創造出來(只有一個servlet物件)
3.2 然後呼叫init()方法 (只執行一次)
3.3以多執行緒的方式來處理客服端的請求 (呼叫了service()方法)
3.4 service()會自動根據 客服端來呼叫 doGet()或doPost()
3.5 servlet退出服務 (正常關閉才會呼叫,比如 關閉tomcat或更改.class檔案 ,直接X掉web(瀏覽器)不會呼叫service())
二。servlet表單驗證
1.建立web應用程式
2.在jsp檔案中編寫表單
!-- action提交的檔名與web.xml中標籤<url-pattern>的名字一致-->
<form action="kevin">
username:
<input type="text" name="username" />
<br />
password:
<input type="password" name="password">
<br />
<input type="submit" value="submit" />
</form>
3.編寫 servlet (Java類)LoginServlet(類名)
在類中獲取表單的相關引數,並通過輸出流輸出
String username = req.getParameter("username");
String password = req.getParameter("password");
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/htmll;charset=UTF-8");
PrintWriter out = resp.getWriter();
out.println("<html><head><title>Login message</title></head>");
out.println("<body>");
out.println("username: "+username);
out.println(" password: "+password);
out.println("</body>");
out.println("</html>
4.在web專案的web.xml中新增資訊
<servlet>
<servlet-name>L</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>L</servlet-name>
<url-pattern>/kevin </url-pattern>
</servlet-mapping>
5.釋出專案 ,啟動tomcat
6.在網頁中輸入地址
http://localhost:8080/jspch1101/index.jsp,輸入使用者名稱和密碼點提交後會跳轉到servlet頁面
Servlet是一個符合特定規範的java程式,在伺服器端執行,處理客戶端請求並作出響應。
一、在呼叫Servlet時,首先要在程式中匯入Servlet所需的包。
1.impoet java.io.*;
2.import javax.servlet.*;
3.import javax.servlet.http.*;
二、建立用於Web應用時Servlet繼承自HttpServlet類。
三、實現doGet()或者doPost()方法。
四、Servlet的生命週期
1. 載入和例項化 (Servlet容器根據Servlet類的位置載入Servlet類,成功載入後,由容器建立
Servlet的例項)
2. 初始化 (init()方法只能被呼叫一次)
3. 服務 (呼叫Servlet的service()方法處理客戶端請求)
4. 銷燬 (銷燬例項之前呼叫destroy()方法)
五、Servlet的編譯和部署
編譯產生的class檔案放入web應用的WEB-INF/classes目錄下
資料夾層次與包一致
例如 org.jbit.servlet.HelloServlet的class檔案全路徑為
WEB-INF/classes/org/jbit/servlet/HelloServlet.class
對於GenericServlet類中的init()和init(ServletConfig config)
在開發中我們是使用GenericServlet的子類HttpServlet的,而HttpServlet繼承了GenericServlet中
的init()和init(ServletConfig config)方法,而在init(ServletConfig config)中會呼叫init()的,
而且系統會在init(ServletConfig config)方法中執行下面語句:
public void init(ServletConfig config){
this.config = config;//this.config為GenericServlet類的config
init();
}
其實在父類的有參init方法中會隱式的呼叫無參的init的方法,僅此而已,沒什麼難的,初始化時永遠都呼叫的是有參的init的方法。
在GenericServlet中,從servlet介面帶來的init(ServletConfig config)對它進行重寫時,如果忘了呼叫super.init(config)時,就會出現空指標異常,為了解決這樣的
情況,GenericServlet中於是有了一個無參的init()方法,推薦大家重寫init方法時,
重寫無參的init()方法.
(第一種init()方法是Servlet介面中init()方法的實現。這種方法中,首先將ServletConfig物件儲存在一個transient例項變數中,然後呼叫第二種不帶引數的init()方法。
通常我們在編寫整合自GenericServlet的Servlet類時,只需重寫第一種不帶引數的init()方法就可以了。如果覆蓋了第一種init()方法,那麼應該在子類的該方法中,包含一句super.init(config)程式碼呼叫。)
web.xml檔案中Servlet對映路徑<url-pattern>
對於如下的一些對映關係:
• Servlet1 對映到 /abc/*
• Servlet2 對映到 /*
• Servlet3 對映到 /abc
• Servlet4 對映到 *.do
注意: *.do這種形式優先級別最低
<load-on-startup>-1</load-on-startup>、
· load-on-startup標記容器是否在啟動的時候例項化並呼叫其init()方法的優先順序。
· 它的值表示servlet應該被載入的順序
· 當值為0或者大於0時,表示容器在應用啟動時就載入並初始化這個servlet;
· 如果值小於0或未指定時,則表示只有在第一次請求的容器才在該servlet呼叫初始化函式
· 正值越小,servlet的優先順序越高,應用啟動時就越先載入。
· 值相同時,容器就會自己選擇順序來載入。
第十二章 - Ajax
一、 什麼是Ajax
Ajax是幾個單詞首字母的縮寫:Asynchronous(非同步的) JavaScript And Xml。Ajax並不是一種全新的技術,而是整合了幾種現在的技術:JavaScript、XML和CSS。主要是JavaScript,我們通過JavaScript的XMLHttpRequest物件完成傳送請求到伺服器並獲得返回結果的任務,然後使用JavaScript更新區域性的網頁,非同步指的是,JavaScript指令碼傳送請求後並不是一直等著伺服器的響應資料。XML一般用於請求資料和響應資料的封裝,CSS用於美化頁面樣式。
二、 XMLHttpRequest
1、 XMLHttpRequest的常用方法
Open(method,URL,async): 建立於伺服器的連線,method引數指定請求的HTTP方法;URL引數指定請求的地址;async引數指定是否使用非同步請求,其值為true或false。
Send(conetent): 傳送請求,content引數指定請求的引數。
SetRequestHeader(header,value): 設定請求的頭資訊。
2、 XMLHttpRequest的常用屬性
Onreadystatechange: 指定XMLHttpRequest物件的回撥函式。
ReadyState: XMLHttpRequest的狀態資訊
0 表示已經建立一個物件,但還沒初始化
1 表示物件開始傳送資訊
2 表示物件的請求傳送完成
3 物件開始讀取響應
4 物件讀取響應結束
Status HTTP的狀態碼,僅當ReadyState的值為3或4時,status屬性才能使用
200 伺服器響應正常
400 無法找到請求的資源
403 沒有訪問許可權
404 訪問的資源不存在
500 伺服器內部錯誤
ResponseText: 獲得響應的文字資訊
ResponseXML: 獲得響應的XML文件物件
三、 使用Ajax技術實現非同步的步驟
1、 建立XMLHttpRequest物件。
2、 通過XMLHttpReuqest物件設定請求資訊。
3、 向伺服器傳送請求。
4、 建立回撥函式,當XMLHttpRequest物件狀態改變時,根據響應狀態動態更新頁面。
四、 Ajax的工作過程
1、 通過XMLHttpRquest物件向伺服器傳送資訊。
2、 使用XMLHttpRequets物件解析伺服器響應資料
3、 通過JavaScript指令碼動態更新頁面
舉例
function doAjax() {
createXMLHttpRequest();
var name = document.getElementById("uname").value;
var pwd = document.getElementById("upwd").value;
if(XMLHttp!=null){
var url ="LoginServlet?uname="+name+"&upwd="+pwd;
XMLHttp.open("POST",url,true);
XMLHttp.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded;");
XMLHttp.onreadystatechange=processRequest;
XMLHttp.send(null);
}else{
alert("不能建立XMLHttpRequest物件例項")
}
}
function processRequest() {
var messdiv = document.getElementById(“mess”);
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200) {
//responseText表示請求完成後,返回的字串資訊 if (xmlhttp.responseText == "false")
messdiv.innerHTML = "使用者名稱可以使用";else
messdiv.innerHTML = "使用者名稱已被使用"; } else {
alert("請求處理返回的資料有錯誤");
}
}
}
重點:Servlet
一、Servlet三個要素
1.必須繼承自HttpServlet
2.必須實現doGet()或者doPost()
3.必須在web.xml中配置Servlet
例:
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servelt-mapping>
函式:
HttpServeltRrequest:請求物件
getParameter():獲得表單元素的值
getAttribute():獲得request範圍中的屬性值
setAttribute():設定reqeust範圍中的屬性值
setCharacterEncoding():設定字元編碼
HttpSerletResponse:相應物件
sendRedirect():外部跳轉
getWriter():獲得輸出流物件
setContentType("text/html; charset=utf-8"):設定相應內容格式和編碼
二、四種回話跟蹤方式
1.Session
HttpSession session = request.getSession();
session.setAttribute("name", "zhangsan");
session.setAttribute("pwd", "aaa");
String name = (String) session.getAttribute("name");
2.cookie:
//建立Cookie
Cookie cookie = new Cookie("name", "zhangsan");
//設定Cookie的超時時間
cookie.setMaxAge(24 * 60 * 60 *60);
//把Cookie傳送到客戶端
response.addCookie(cookie);
//得到客戶端傳送的Cookie
Cookie [] cookies = request.getCookies();
for(int i=0; i<cookies.length; i++) {
Cookie temp = cookies[i];
String key = temp.getName();
String value = temp.getValue();
}
3.隱藏表單域
<input type="hidden" name="name" value="zhangsan" />
request.getParameter("name");
4.Url重寫
問號傳參
LoginServlet?username=zhangsan&pwd=123
String name = request.getParameter("username");
String pwd =request.getPareameter("pwd");
內部跳轉和外部跳轉
內部跳轉:
LoginServlet
request.getRequestDispatcher("index.jsp").forward(request, resposne);
外部跳轉:
response.sendRedirect("index.jsp");
內部跳轉是一次請求和一次響應
外部跳轉是兩次請求和兩次響應
ServletContext:Servlet上下文物件
它是一個公共區域,可以被所有的客戶端共享
setAttribute():向公共區域裡放入資料
getAttribute():從公共區域裡取資料
三個標準範圍:request, session, ServletContext
共同點:都有setAttribute(), getAttribute()
區別:範圍不同,request < session < servletContext
伺服器上的五大物件
request, response, servlet, session, servletContext
過濾器
生命週期:
1.例項華:
2.初始化:init()
3.過濾:doFilter()
4.銷燬:destroy()
5.不可用
配置
<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
<filter-mapping>
<filter-name></filter-name>
<url-pattern></url-pattern>
</filter-mapping>
幾個重要的介面
1.Filter:init(), doFilter(), destroy()
2.FilterChain: doFilter(request, response)
3.FilterConfig:getFilterName(), getInitParameter(),
過濾器鏈
--->1--->2--->3--->Servlet 請求
<----1<---2<---3<--- 響應
MvC設計模式
1.ModelI:jsp+JavaBean
2.ModelII:jsp+Servlet+JavaBean
jsp---view
servlet---control
javabean---model
MVC:
M--Model:模型:訪問後臺資料庫
V--view:檢視:展示
C--control:控制器:控制程式流程
ModelII和MVC的關係:
MVC是一種設計模式,ModelII它是MVC的一種具體的實現