




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Javaweb-與 sesJsp 簡單介紹問題:jsp,它作用?Jsp 是 java servage,它的本質(zhì)就是一個(gè) servlet.顯示數(shù)據(jù)問題??梢允褂?jsp 來代替 servlet 來處理對于 jsp可以簡單理解成是在html 頁面中可以書寫 java 代碼。Jsp 文件的后綴名是.jsp分析:jsp 就是一個(gè) servlet?在 tomcat 中有一個(gè)目錄叫work,它里面就了 jsp 頁面生成的源代碼。通過查看 jsp 翻譯后的 java 源代碼知道它們生成的類會繼承 HttpJspBase,而這個(gè)類的父類就是 HttpServlet,所以說 jsp 也是一個(gè) servlet.J
2、sp 原理.5.6.當(dāng)在瀏覽器上輸入服務(wù)器 tomcat 得到,會通過 JspServlet 將后綴名是.jsp 的請求處理,會將 index.jsp 翻譯成 index_jsp.java 文件在將 index_jsp.java 文件編譯成 index_jsp.class 文件jvm 將.class 加載運(yùn)行服務(wù)器生成響應(yīng),響應(yīng)信息中就包含了 jsp 頁面上的html 代碼。Jsp 中的1.2.片段3.表達(dá)式例如:通過查看源代碼知道以下:內(nèi)容會生成在成員位置上。在中可以變量,方法或類內(nèi)容會生成在_jspService 方法上,也就是一個(gè)局部的位置,在這個(gè)位置上可以變量(局部變量)
3、,也可以類內(nèi)容就會被輸出到頁面上,它就是通過 out.pr(),注意在使用可以在最后以分號結(jié)尾表達(dá)式時(shí),不Jsp 頁面上的注釋1.2.3.因?yàn)?jsp 頁面上可以寫 html 代碼,可以使用 html 注釋因?yàn)?jsp 頁面上可以寫 java 代碼,可以使用 java 注釋也可以使用 jsp 自己的注釋 jsp 注釋內(nèi)容它不會在生成的 java文件中存在。案例-登陸操作代碼實(shí)現(xiàn):1.創(chuàng)建一個(gè) login.jsp 頁面2.創(chuàng)建一個(gè) LoginServlet3.在 login.jsp 頁面上顯示錯(cuò)誤信息通過它輸出錯(cuò)誤信息,但是如果沒有錯(cuò)誤信息會顯示null,應(yīng)該怎樣處理哪?也可以使用后續(xù)要學(xué)習(xí)的e
4、l 表達(dá)式來完成上述操作會話技術(shù)介紹會話技術(shù)分為與 ses它是瀏覽器端的會話技術(shù)Ses它是服務(wù)器端的會話技術(shù)問題:會話技術(shù)?使用會話技術(shù)可以解決什么問題?會話可以簡單理解成,通過瀏覽器直到關(guān)閉瀏覽器過程叫做會話服務(wù)器的資源,點(diǎn)擊超連接可以進(jìn)行資源的跳轉(zhuǎn),使用會話技術(shù)可以解決的是在整個(gè)會話過程中產(chǎn)生的數(shù)據(jù)的保存問題。使用 HttpServletRequest 與ServletContext 來保存會話過程中產(chǎn)生的數(shù)據(jù)問題分析?是網(wǎng)景公司發(fā)明是由服務(wù)器端創(chuàng)建,發(fā)送給瀏覽器,瀏覽器可以將的 key/value 保存到瀏覽器端,下一次在請求同一個(gè)的資源時(shí),就可以將送給服務(wù)器。發(fā)在 javaee 的 a
5、pi 中有一個(gè)類 javax.servlet.http.造方法,它就可以創(chuàng)建一個(gè),它的構(gòu)是由 http 協(xié)議制定的,并不是 java 語言特有的,或.net 都可以使用。問題 1:如果將一個(gè)響應(yīng)到瀏覽器端?可 以 通 過response.addHeader(“set-在 http 協(xié)議中生成的格式response對 象 來 操 作 , 可 以 通 過”,”one=aaa”);也可以通過簡便的方法set-:one=aaa; two=bbbresponse.add();問題 2:如何在服務(wù)器端得到一個(gè)?要想得到一個(gè)在 http 請求頭中有一個(gè)可以通過 request 對象來獲取。:one=aaa;
6、 two=bbb可以通過request 的一個(gè)方法總結(jié): gets()得到所有的創(chuàng)建將new響應(yīng)到瀏覽器端(String name,String value);response.addrequest.get();3.在服務(wù)器中獲取s();得到了一個(gè)數(shù)組。對象后, 可以使用 getName()與 getValue()方法來得到得到的名稱與值。http 協(xié)議對1.規(guī)定如下:(筆試題)用于攜帶少量數(shù)據(jù)最大為 4kb2.3.一個(gè)服務(wù)器最多向一個(gè)瀏覽器保存 20 個(gè)一個(gè)瀏覽器最多可以保存 300 個(gè).關(guān)于持久化問題:默認(rèn)情況下,它是會話級別的,簡單說,就是是在瀏覽器的內(nèi)存中,如果將瀏覽器關(guān)閉,就。這個(gè)方
7、法可以讓關(guān)閉瀏覽器后,持久化.也就是說可以在瀏覽器端產(chǎn)生一個(gè)文件,當(dāng)也不會。注意:如果將 setMaxAge(0)代表的是刪除.路徑在刪除時(shí)要注意一個(gè)關(guān)于。刪除與創(chuàng)建時(shí)它們的路徑必須一致。這個(gè)方法是用于設(shè)置路徑。作用?問題:路徑它的作用就是確定當(dāng)服務(wù)器的資源時(shí),是否要攜帶.例如 a c當(dāng)/AndSesAndSes/b/jsps/AndSes/jsps/ c這時(shí)只有a會攜帶到服務(wù)器端,原因是路徑中包含了 a的 path當(dāng) 這時(shí)會有 a 與b攜帶到服務(wù)器端案例-上一次時(shí)間當(dāng)資源(ShowTimeServlet),第一次顯示的第一次,時(shí)間如果第二次,顯示的是上一次時(shí)間是:x以后每一次顯示的都是上一次
8、的時(shí)間。package cn.servlet.;import java.io.IOException; import java.util.Date;import javax.servlet.ServletException; import javax.servlet.http.; import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class ShowtTimeServlet
9、 extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException dot(request, response);public void dot(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException /解決響應(yīng)信息亂碼問題 response.setContentTy
10、pe(text/html;charset=utf-8);/ 先從 request 中獲取名稱叫 time 的次,如果獲取不到,說明是第一次,如果可以獲取到,說明不是第一 cs = request.gets(); / 獲取所有的= findByName(time, cs);= null) / 第一次response.getWriter().write(if (第一次,時(shí)間是: + new Date().toLocaleString(); else /不是第一次不是第一次的 value 值表示的,要顯示的時(shí)間其實(shí)是時(shí)間long time = Long.parseLong( Date date =
11、new Date(time);response.getWriter().write(上一次.getValue();,時(shí)間是: + date.toLocaleString();/ 1.創(chuàng)建一個(gè)= new們將當(dāng)前時(shí)間的毫秒值對象,name=time value 就當(dāng)前時(shí)間(time, String.valueOf(System.currentTimeMillis(); /為value我.setMaxAge(7*24*60*60);/ 2.將它攜帶到瀏覽器端response.add();/ 抽取一個(gè)方法,根據(jù)名稱從數(shù)組中查找publicfindByName(String name, cs) if (
12、cs = null | cs.length = 0) return null;for (c : cs) if (c.getName().equals(time) return c;return null;案例-顯示商品瀏覽信息Book.jsp 頁面BookServletresponse.setContentType(text/html;charset=utf-8);/ 1.得到請求參數(shù) idString id = request.getParameter(id);/ 2.將 id 拼接到中。/ 注意:需要判斷是否是第一次=Utils.findByName(history, request.ge
13、ts(); if (= null) / 是第一次= new(history, id); else / 不是第一次,判斷在的 value 中是否存在了現(xiàn)的 id/ 得到的 valueString value =.getValue();/ value 是以-分開的,可以使用 String 類的 split 方法將它轉(zhuǎn)換成String,/ 在將數(shù)組轉(zhuǎn)換成 List,通過 contains 方法來判斷 id 在 value 中是否存在String st = value.split(-);history.jspSesSes是服務(wù)器端的會話技術(shù), ses其實(shí)是 sun 公司定義的一個(gè)接口javax.ser
14、vlet.http.HttpSes.ses不是由 http 協(xié)議制定問題 1:ses是怎樣解決會話過程中產(chǎn)生的數(shù)據(jù)的保存?問題 2:怎樣獲取一個(gè) ses?想要獲取一個(gè)HttpSes對象可以通過request 對象來獲取.Ses的實(shí)現(xiàn)是依賴于List list = Arrays.asList(st);if (!list.contains(id) / 原來的的 value 值中不包含 id= new(history, value + - + id);/ 將 攜帶到瀏覽器端response.add();response.getWriter().write( 已 經(jīng) 瀏 覽 了 商 品 , 繼 續(xù) 瀏
15、 覽 ,查看瀏覽 );第一次請求,的請求頭中沒有一個(gè)叫 jsesid 的, 那么當(dāng)?shù)紻emo1Servlet 時(shí),它執(zhí)行 request.getSes()就會創(chuàng)建一個(gè) HttpSes對象(理解成new),當(dāng)響應(yīng)產(chǎn)生時(shí),就將 ses的 id 做為的 value,響應(yīng)到瀏覽器端Set-:jsesid=當(dāng)一次在Demo2Servlet 時(shí),http 請求中就會有一個(gè):jsesid=x 信息,那么在 Demo2Servlet 中通過 request.getSes()時(shí)就會根據(jù) jsesid 的值在服務(wù)器內(nèi)存中查找對應(yīng)的 ses對象,如果查找到,直接拿過來使用,不會再創(chuàng)建。HttpSes它也是一個(gè)域?qū)ο?/p>
16、,可以想像成是一個(gè) Map.可以通過setribute(String,Object) getribute(String)方法來操作。Ses的生命周期:什么時(shí)候創(chuàng)建通過request.getSes()來獲取一個(gè)HttpSes當(dāng)jses時(shí),如果請求頭中沒有id,那么就會創(chuàng)建一個(gè) HttpSes對象。getSesgetSes()方法一定會獲取一個(gè)HttpSes對象。()如果參數(shù)為 false,請求中沒有 jsesid,那么就不會重新創(chuàng)建,而是返回一個(gè) null.什么時(shí)候銷毀立即銷毀 ses.以指定的秒值為,超時(shí)后銷毀 ses.在 tomcat/conf/web.xml 文件中有一段配置這段配置描述的
17、就是 ses默認(rèn)在 30 分鐘內(nèi)沒有使用,銷毀。Ses案例-購物車Product.jspAddProductToCartServletpackage cn.servlet.ses;import java.io.IOException; import java.util.HashMap; import java.util.Map;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest; import javax
18、.servlet.http.HttpServletResponse;public class AddProductToCartServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException dot(request, response);public void dot(HttpServletRequest request, HttpServletResponse response)t
19、hrows ServletException, IOException response.setContentType(text/html;charset=utf-8);/ 1.得到商品的名稱String name = request.getParameter(name); / 因?yàn)轫撁鎮(zhèn)鬟f的是中文,并且是通過超連接方式傳遞,也就是 get,必須處理亂碼name = new String(name.getBytes(iso8859-1), utf-8);/ 2.將商品添加到購物車/ 需要考慮是否是第一次購物,存不存在購物車Map cart = (Map) request.getSes()if
20、(cart = null) / 沒有購物車,是第一次購物cart = new HashMap();/ 不是第一次購物,存在購物車,需要考慮商品在購物車中是否存在。eger count = cart.get(name);/ 如果 count=null,說明購物車中沒有這個(gè)商品 if (count = null) cart.put(name, 1); else / 購物車中存在這個(gè)商品cart.put(name, count + 1);/ 將購物車request.getSes到 ses中。().setribute(cart, cart);response.getWriter().write(購物成
21、功,繼續(xù)購物, 查看購物車);在 cart.jsp 頁面上顯示購物車品URL 重寫url 重寫?當(dāng)瀏覽器,可以將 ses的 id 通過 url 路徑發(fā)送給服務(wù)器。當(dāng)用戶通過的 id 就會自動的變成請求頭的一部分,這種url 路徑去將 ses服務(wù)器資源時(shí),這時(shí) ses的 id 自動生成的 url 路徑的方式,叫 url 重寫。url 重寫解決當(dāng)瀏覽器成使用 ses:了操作。,還需要使用 ses時(shí),可以通過 url 重寫的方式來完url 重寫實(shí)現(xiàn)response.encodeRedirectURL(String path)來對重定向后的 url 地址進(jìn)行 url 重寫response.encode
22、URL(String path)來對表單的 action 或超連接進(jìn)行 url 重寫.案例-登陸案例1.創(chuàng)建一個(gè) login.jsp 頁面,在頁面上有用戶名與,還有。2.創(chuàng)建一個(gè) LoginServlet,完成登陸操作,登陸成功后,會將用戶信息封裝到 User 對象中。并且將 user 對象會在 request 域中到 ses中,重寫向到 sucs.jsp 頁面。如果登陸失敗,錯(cuò)誤信息,請求轉(zhuǎn)發(fā)到 login.jsp 頁面,顯示錯(cuò)誤信息。3.在 sucs.jsp 頁面上會從 ses中獲取用戶信息顯示。Login.jsp 頁面LoginServlet從頁面獲取輸入的與生成的對比,問題是,生成的怎
23、樣保存?中,在應(yīng)該在 ImageCodeServletLoginServlet 中就直接從 sesses中將生成的又分為兩碼到內(nèi)獲取就可以,并且獲取完成后,立即將 ses中的刪除。package cn.servlet; import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRes
24、ponse;import cn.User;public class LoginServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException dot(request, response);public void dot(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(utf-8);/ 解決請求參數(shù)亂碼/ 1.得到請求參數(shù)String username = request.getParameter(username); / 得到用戶名Sucs.jsp 頁面String
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論