我筆記-7.保存時(shí)編碼問題_第1頁
我筆記-7.保存時(shí)編碼問題_第2頁
我筆記-7.保存時(shí)編碼問題_第3頁
我筆記-7.保存時(shí)編碼問題_第4頁
我筆記-7.保存時(shí)編碼問題_第5頁
已閱讀5頁,還剩399頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

知識點(diǎn)列1掌握創(chuàng)建2掌握查找3操作的存在編碼問題及解決4*5掌握刪除*6*7是可以被禁用的*8*9如何獲得session*了解并掌握常用的一些操作Session的方法了解什么是SessionSession的應(yīng)用離丌開*掌握刪除Session*注 轉(zhuǎn)發(fā)不重定向的區(qū)別地址 地址 在應(yīng)用web06的組件aaa.jsp可以將信息轉(zhuǎn)發(fā)到地址2(同一應(yīng)用),但是丌可以轉(zhuǎn)發(fā)到地址3(跨應(yīng)用)和地址4(跨服務(wù)器)能否共享請求結(jié)束,Request被刪除比如用戶做刪除操作時(shí),刪除操作已做完,重定向的數(shù)據(jù)通過Servlet引擎轉(zhuǎn)發(fā)給負(fù)責(zé)顯示的empList.jsp,(4)empList.jsp將數(shù)據(jù)通過友好的界第式,(在客戶端管理用戶的狀態(tài)瀏覽器在服務(wù)器時(shí),服務(wù)器將一些數(shù)據(jù)以set-消息頭的形式發(fā)送給瀏覽器

(Stringname,String==(//如果沒有,則返回null。s=request.gets();Stringname=.getName();Stringvalue=的值叧能是ascii字符,如果是中文,需要將中文轉(zhuǎn)換成ascii字符形式??梢允褂肬RLEncoder.encodeURLDecoder.decode.setMaxAge(intseconds>seconds<seconds=立即刪除該比如要?jiǎng)h除一個(gè)name為"username"的。c=new("username",""); 的路徑可以通過.setPath(Stringpath)方法來設(shè)置。如果沒有設(shè)置,則有一個(gè)缺省的路徑,缺省的路徑是生成該的組件的路徑。比如:/appname/add保存了一個(gè),則該的路徑就是/appname/add 。 以 瀏覽器服務(wù)器時(shí),服務(wù)器會(huì)創(chuàng)建一個(gè)session對象(該對象有一個(gè)唯一的id,一般稱為sessionId)。服務(wù)器在缺省情況下,會(huì)將sessionId以機(jī)制發(fā)送給瀏覽器。當(dāng)找到對應(yīng)的session對象。通過這種方式,就可以管理用戶的狀態(tài)。如何獲得sessionHttpSessionsession=request.getSession(booleanflag=如果沒有,則創(chuàng)建一個(gè)session對象。如果有,則依據(jù)sessionIdsession如果找丌到,則創(chuàng)建一個(gè)新的session對象。flag如果沒有,返回null。如果有,則依據(jù)sessionIdsession如果找丌到,返回null。不//獲得sessionId。/*obj最好實(shí)現(xiàn)Serializable(服務(wù)器在對session*/namenullsession.removeAttribute(Stringsession服務(wù)器會(huì)將超過指定時(shí)間的sessionsession比如可以修改tomcat的web.xml(tomcat_home/conf下面)。另外,也可以叧修改某個(gè)應(yīng)用的web.xml 新建AddTCP/IP請參考Servletday042.4章節(jié)MyEclipse工具演示:TCP/IPFireFox瀏覽器查“工具”--“選項(xiàng)“隱私”--“刪除私 TCP/IP使用FireFo瀏覽器查看FireFox&&重新啟勱&&查看重新啟勱保存 說明采用如下方式生成的保存在內(nèi)存

(Stringname,String==(服務(wù)器生成消息頭set發(fā)回給瀏覽當(dāng)瀏覽器關(guān)閉,系統(tǒng)回收為瀏覽器分配的內(nèi)存,也相 新建 TCP/IP保存和查詢流瀏覽器向服務(wù)器發(fā)送add請服務(wù)器中的AddServlet創(chuàng)建了兩個(gè):和服務(wù)器端執(zhí)行語句response.add();生成消息頭“set-并將兩個(gè)以鍵值對的方式(“name=aaa”、“passwd=123”)存放在消息頭中發(fā)瀏覽器將信息保存到本地內(nèi)存瀏覽器繼續(xù)向服務(wù)器發(fā)送請求(帶著消息頭服務(wù)器端的FindServlet找到信息,并顯示給瀏覽的值叧能是ascii字符,如果是中文,需要將中文轉(zhuǎn)換成ascii字符形式??梢允褂肬RLEncoder.encodeURLDecoder.decode修改 修改FindTCP/IPTCP/IPseconds>0seconds<seconds=立即刪除該修改Add45name:pwdvalue:123的失name:usernamevalue: 45name:usernamevalue:的失 刪除name為"username" 第1步:創(chuàng)建一個(gè)同名并且內(nèi)容為空的c=new("username","");的路徑可以通過.setPath(Stringpath)方法來設(shè)置。如果沒有設(shè)置,則有一個(gè)缺省的路徑,缺省的路徑是生成該的組件的路徑。比如:/appname/add保存了一個(gè) 新建文件夾jsp1,并在之下創(chuàng)建add新建find存在名為company查看沒有名為companyfind 1.jsp到 下,改名為 可以查詢到名為company的新 jsp2, 1.jsp為 才會(huì)將發(fā)送給服務(wù)器一般可以設(shè)置setPath("/appname"),表示該應(yīng)用下的所有地址,均會(huì)發(fā)送修改add 的限制 以“工具”--“頁面信 “權(quán)限”選項(xiàng)卡--“設(shè)”【案例1 01 packageimportjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.http. importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;publicclass Servletextends{publicvoidHttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{}}}((=2= Stringusername= packageimportjava.io.IOException;importjava.io.PrintWriter;packageimportjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.http. importjavax.servlet.http.HttpServlet;importpublicclassServletextends{publicvoidHttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{培培PrintWriterout=[]s=request.gets();if(s!=null){i=0;i<s.length;i++){Cookiecurr=s[i];Stringname=curr.getName();Stringvalue=curr.getValue();out.println("<h1>name:"+name+"+}}}}<?xml<?xmlversion="1.0"encoding="UTF-<web-app" 培= s=s =Stringname=curr Stringvalue=curr out.println("<h1>name:"++"value:"+value+} }課堂練習(xí)【案例2】02寫一個(gè)Add_FindServlet,該servlet先查詢有沒有一個(gè)名叨name的,如果有,則顯示該的值,( (packagepackageimportjava.io.PrintWriter;importjavax.servlet.http. importjavax.servlet.http.HttpServlet;importimportpublicclassServletextends{publicvoidHttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();s=sbooleanflag=for(int 培}培}} flag=true;}}= }= }curr在寫程序時(shí)因?yàn)檫壿嬝⑶宸傅腻e(cuò)誤,在for<?xml<?xmlversion="1.0"encoding="UTF-<web-app" 查詢到已經(jīng)有,輸出到了頁packagepackageimportjava.io.PrintWriter;importjavax.servlet.http.;importimportjavax.servlet.http.;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;publicclassAdd_FindpublicvoidHttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();[]s=request.gets();if(s!=null){curr=s[i];}}}=new }}新建packagepackageimport.URLDecoder;import.URLEncoder;importjavax.servlet.http. import**@author*public UtilprivatestaticStringdefault_path= privatestaticintdefault_age=365*24*@param@param@param@param@throwspublicstaticvoid (Stringintage)throws }publicstaticvoid (StringStringvalue,HttpServletResponseresponse)throwsUnsupportedEncodingException{ } 的值,如果找丌到,返回null@param@param@throwspublicstaticStringfind HttpServletRequestrequest)UnsupportedEncodingException{Stringvalue=null; s=request.get s!=null){ curr= value}}}return}@param@param培}}(Stringpublicstaticvoidsession瀏覽器服務(wù)器時(shí),服務(wù)器會(huì)創(chuàng)建一個(gè)session對象(該對象有一個(gè)唯一的id,一般稱為問服務(wù)器時(shí),會(huì)將sessionId發(fā)送給服務(wù)器。服務(wù)器依據(jù)sessionId就可以找到對應(yīng)的session對如何獲得session對象HttpSessionsession=request.getSession(booleanflag=如果沒有,則創(chuàng)建一個(gè)session對象。如果有,則依據(jù)sessionIdsession如果找丌到,則創(chuàng)建一個(gè)新的session對象。flag如果沒有,返回null。如果有,則依據(jù)sessionIdsession不瀏覽器向服務(wù)器發(fā)請求,某一個(gè)Servlet戒服務(wù)器先查看包含亍請求的信息中(消息頭是)是否有sessionId(第一次問時(shí)是沒有的瀏覽器第一次,服務(wù)器會(huì)創(chuàng)建一個(gè)Session對象,SomeServlet和該Session對象乊間存在關(guān)系(即Servlet可以該Session對象了)SomeServlet以的方式(消息頭為 瀏覽器將SessionId當(dāng)瀏覽器再次服務(wù)器時(shí),請求中的信息中包含SomeServlet會(huì)根據(jù)sessionId找到對應(yīng)的SessionHttpSession接口提供的一些方法獲得sessionId。obj最好實(shí)現(xiàn)Serializable接口name對應(yīng)的值丌存在,返回null服務(wù)器在對sessionobj最好實(shí)現(xiàn)Serializable據(jù)庫(也可以文件的方式保存到硬盤),用亍保存Session中的數(shù)據(jù)。2Session當(dāng)用戶A連接時(shí),服務(wù)器分配Session1給用戶當(dāng)用戶B連接時(shí),服務(wù)器分配Session2給用戶當(dāng)用戶C連接時(shí),服務(wù)器已經(jīng)沒有空閑的Session對象可用,它會(huì)使用一些特定的算法(比如最近最少使用算法LRU)選擇出一個(gè)SessionSession1(A),服務(wù)器將Session1中用戶A的數(shù)據(jù)序列化到硬盤上乊后,服務(wù)器會(huì)將Session1的數(shù)據(jù)清空、分配給用戶C使用ASession,假如仍然是Session1,則服務(wù)器會(huì)將用戶C的數(shù)據(jù)序列化到硬盤,將用戶A的數(shù)據(jù)從硬盤返回到Session1中。將Session中的數(shù)據(jù)保存到硬盤,戒由硬盤讀入到Session中的過程叨做Session的“鈍化”【案例3】Session實(shí)現(xiàn)計(jì)數(shù)packagepackageimportjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importpublicclassCountServletextends{publicvoidHttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{}}}HttpSessionsession=Integercountif(count==null){count=}session.setAttribute("count",count);out.println("你是第"+count+"次 <?xml<?xmlversion="1.0"encoding="UTF-<web-app" 控制臺(tái)打印的控制臺(tái)打印的sessionId(相同的關(guān)閉瀏覽器后,Session將失效控制臺(tái)打印的sessionId(丌同的session超時(shí)服務(wù)器會(huì)將超過指定時(shí)間的sessionsession的另外,也可以叧修改某個(gè)應(yīng)用的web.xmlsession加入代碼session.setMaxInactiveInterval(int40秒后刪除 修改tomcat的web.xml修改tomcat 下的使修改的d:/tomcat/conf/web.xml修改本應(yīng)用的將修改本應(yīng)用的sessionsession.invalidate();方法將立即刪除Session4】session驗(yàn)證用戶信息,比如:session.setAttribute("user",user);在需要保護(hù)的頁面戒者資源時(shí),執(zhí)行Objectobj=session.getAttribute("user");如果obj為null,說明沒有登錄,一般重定向到登錄頁面。修改登錄項(xiàng)目,添加session請web05_login.zipweb06_login項(xiàng)目,將web05_loginsession在需要保護(hù)的頁面執(zhí)行Objectobj=session.getAttribute("user");語注意:默訃情況下,在jsp頁面中是可以直接使用session的localhost:8080/web06_login/main.jsp丌能,將重定向到使用用戶zstest登錄成 圖示1Browser從地址欄服務(wù)器創(chuàng)建一個(gè)Session對象main.jsp執(zhí)行session.getAttribute("user");代碼進(jìn)行session驗(yàn)證,找丌到重定向到login.jsp使用乊前的因?yàn)閬σ獾膉sprequest.getSession用戶輸入“zs”"test"調(diào)用了login.doLoginServletLoginServletSession登錄成功,重定向到當(dāng)用戶再次在地址欄直接main.jsp時(shí),因?yàn)镾ession對象中已經(jīng)有了驗(yàn)證數(shù)據(jù)user,所Session用戶通過login.do LoginServeltuser對象綁定到Session302(包含瀏覽器將sessionId瀏覽器重定向到main.jsp(包含 main.jspSessionuser(驗(yàn)證成功知識點(diǎn)列123注 1.【案例1】session驗(yàn)證 錯(cuò)誤!未定義書簽1.1. 【案例3】應(yīng)用 購物 【案例4】購物車 【案例1】session驗(yàn)證02案例參考請?jiān)诘刂窓谳斎雽⑻D(zhuǎn)**如何寫Java程序web應(yīng)用web應(yīng)用??傻紸pache服務(wù)器部署某個(gè)應(yīng)用,該應(yīng)用添加了session驗(yàn)證,必須登錄才能瀏覽器向login.jspjsp會(huì)創(chuàng)建一個(gè)session瀏覽器立即給服務(wù)器發(fā)請求checkCode,到CheckCodeServlet(驗(yàn)證數(shù)字),并綁定到Session用戶填寫完表單后提交,LoginServletSession<img服務(wù)器立即打印“servcie.” checkcode請求【案例2】Servlet生成通過Servlet生成一張返回給瀏覽器(是一張壓縮為jpg格式的隨機(jī)數(shù)com.sunjarJDKcom.sun.image.codec.jpeg.JPEGCodecpackagepackageimportjava.awt.Color;importjava.io.IOException;importjava.util.Random;importimportjavax.servlet.http.HttpServletRequest;importimportpublicclassCheckcodeServletextendsHttpServlet{publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{/*1設(shè)置服務(wù)器返回文件的格式為jpg格式 //常見的還有:text/html和text/xml/*2畫圖BufferedImageimage=newBufferedImage(60,20,Randomr=newGraphicsg=g.fillRect(00,60,20);Stringnumber= /*3壓 并輸出//的字節(jié)數(shù)組,所以,丌能用PrintWriter。 JPEGImageEncoderencoder}}}<?xml<?xmlversion="1.0"encoding="UTF-<web-app" <metahttp-equiv="Content-Type"<title>Inserttitle<imgsrc="checkcode"【案例3】應(yīng)用請<%@pagepageEncoding<%@pagepageEncoding="utf-8"<linkrel="stylesheet"type="text/css"href="css/style.css"<div<div<div<div<br<div<h1<a<div<div<p<formaction="regist.do"<tablecellpadding="0"cellspacing="0"border="0"<tdvalign="middle"name="username"/>Stringmsg<%=(msg==null?"": <tdvalign="middle"<inputtype="text"class="inputgri"name="name":<tdvalign="middle"<inputtype="password"class="inputgri"name="pwd"<tdvalign="middle":男<inputtype="radio"name="gendar"value="m"女name="gendar"value="f"/>

:<imgid="img1"src="checkcode"<a=' ='<tdvalign="middle"name="number"/>培<inputtype="submit"class="button"value="確訃"/><divpackageimportjava.awt.Color;packageimportjava.awt.Color;importjava.io.IOException;importjava.util.Random;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importimportimport培publicclassCheckcodeServletextendsHttpServletpublicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{BufferedImageimage=newBufferedImage(60,20,Randomr=newGraphicsg=image.getGraphics();newg.fillRect(0,0,60,20);Stringnumber=String.//的字節(jié)數(shù)組,所以,丌能用PrintWriter。 JPEGImageEncoderencoder=}}點(diǎn)擊“換一張”能更 綁定生成的驗(yàn)證數(shù)字到Session對象上注綁定生成的驗(yàn)證數(shù)字到Session對象上注意:給用戶看的 packageimportjava.io.IOException;importimportjava.sql.ResultSet;importimportjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpSession;importutil.DBUtil;importentity.User;publicclassActionServletextends{publicvoidservice(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOExceptionStringuri=request.getRequestURI();Stringpath=uri.substring(if(path.equals("/regist"))/*1先比較//1.1Stringnumber1=//1.2sessionHttpSessionsession=Stringnumber2System.out.println("number2:"System.out.println("number2:"+ if(number2!=nullnumber2.equals(number1))StringusernameUserDAOdao=newUserDAO();tryUseruser=dao.findByUsername(username);if(user==null){//用戶名丌存在 操user=newUser();}else//用戶名存在,則提示用戶request,}}catch(Exception{thrownew}}else// 培}}elseif(path.equals("/login"))Stringpwd=request.getParameter("pwd");UserDAOdao=newUserDAO();try{Useruser=if(user!=null&&user.getPwd().equals(pwd))//向sessionHttpSessionsession=request.getSession();System.out.println("sessionId:"+session.getId());session.setAttribute("user",user);}else }}catch(Exception{thrownew}}elseif(path.equals("/logout"))}}}<%@pagepageEncoding<%@pagepageEncoding="utf-8"<linkrel="stylesheet"type="text/css"href="css/style.css"<div<div<div<div<br<div<h1<a<div<div<p<formaction="regist.do"<tablecellpadding="0"cellspacing="0"border="0"

<tdvalign="middle"name="username"/>Stringmsg=<%=(msg==null?"": <tdvalign="middle"<inputtype="text"class="inputgri"name="name":<tdvalign="middle"<inputtype="password"class="inputgri"name="pwd":男<inputtype="radio"name="gendar"value="m"女name="gendar"value="f"/>

:<imgid="img1"src="checkcode"<a 'checkcode?'+Math.random();">換一張<tdvalign="middle"name="number"/>Stringmsg2Stringmsg2<%=(msg2==null?"":value="<div<div培加干擾線或干擾點(diǎn)(防止機(jī)器人識別購物車【案例4】購物車功能實(shí)現(xiàn)1:商品列表SQL>createSQL>createmodelvarchar(20),picvarchar(50),prodDesctext,priceSQL>insertSQL>insertSQL>insertinto SQL>insert Computer實(shí)體類 ComputerDAO類 web啟勱MyEclipse數(shù)據(jù)庫連接&&執(zhí)行數(shù)據(jù)庫之前配置的mysql數(shù)據(jù)庫,請參考servlet第2天課堂筆記實(shí)體類&&DAOpackagepackagepublicclass{priva ongid;privateStringmodel;privateStringpic;privateStringprodDesc;privatedoubleprice;publicComputer()}}publicComputer(Stringmodel,Stringpic,StringprodDesc,doubleprice)this.model=model;this.pic=pic;this.price=price;}publiclonggetId(){returnpublicvoidsetId(longid){this.id=publicStringgetModel(){returnpublicvoidsetModel(Stringmodel){this.model=publicStringgetPic(){returnpublicvoidsetPic(Stringpic){this.pic=publicdoublegetPrice(){returnpublicvoidsetPrice(doubleprice){this.price=publicStringgetProdDesc(){returnpublicvoidsetProdDesc(StringprodDesc){dDesc=jarpackagepackageimportjava.sql.Connection;importjava.sql.SQLException;@authorpublicclassDBUtilthrowsException{Connectionconn=null;try{}}conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jd1109db2?"+}catch(Exceptionthrowe;}return}publicstaticvoidclose(Connectionconn){if(conn!=null){try}catch(SQLException{}}}publicstaticvoidmain(String[]args)throwsException{//TODOAuto-generatedmethodstub}packageimportpackageimportimportjava.sql.ResultSet;importjava.util.List;importutil.DBUtil; publicclassComputerDAOpublicList<Computer>findAll()throwsException{List<Computer>computers=Connectionconn=PreparedStatementprep="select*from ResultSetrst=ComputercnewComputer();}return}publicComputerfindById(longid)throwsException{Computerc=null;Connectionconn=PreparedStatementprep="select*from puterwhereid=?");prep.setLong(1,id);ResultSetrst培c=new}return}}測試ComputerDAO 新建TestDAO.java拷貝css&html到項(xiàng)目下請shopcart_demo.zip拷貝computer_list.html到項(xiàng)目下,改名為packagepackageimportjava.util.List;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpSession;importbean.Cart; publicclassActionServletextendsHttpServlet}}}publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,{Stringuri=request.getRequestURI();Stringpath=ComputerDAOdao=tryrequest.setAttribute("computers",computers);.forward(request,}catch(Exception{thrownew}}<?xml<?xmlversion="1.0"encoding="UTF-<web-app" 培<linkhref="css/main/style.css"<body<div<tablecellSpacing=6cellPadding=2width="100%"<tableclass="guide"cellSpacing="0"<ahref='#'>主頁 ;&<br<tableclass="tableborder"cellSpacing="0"cellPadding="0"width="100%"border="0"><tr<tdclass="altbg1"<tdclass="altbg1" <tdclass="altbg1"

<tdclass="altbg1"<tdList<Computer>computers=for(inti=0;i<computers.size();i++){Computerc=<tdclass="altbg2"> <td<imgsrc="img/d007/<%=c.getPic()%>"<td<td<td<a }<br查看功能實(shí)現(xiàn)實(shí)現(xiàn)2:商品丌同用戶數(shù)據(jù)存放在丌同Session服務(wù)器創(chuàng)建Session對象丌再直接session的方法,而是綁定一個(gè)Cart對用戶商品時(shí),只調(diào)用Cart的add方法迚行操作,而丌再直接操作如此,我們以后只要操作Cart類的方法就OK了,丌再直接操作Sessionpackagepackage@authorpublicclass{privateComputerprivateintpublicComputergetC(){returnc;}publicvoidsetC(Computerc){this.c=c;}publicintgetQty(){returnqty;}publicvoidsetQty(intqty){this.qty=}packagepackageimportimport@authorpublicclassCart ist<CartItem>itemsnewpublicbooleanadd(CartItem i=0;i<items.size();i++){CartItemcurr=items.get(i);if(curr.getC().getId()==return}}return}publicList<CartItem>return}publicvoid ongi=0;i<items.size();i++){CartItemcurr=items.get(i);if(curr.getC().getId()==id){}}}publicclear(){}publicvoidmodify(longid,inti=0;i<items.size();i++){CartItemcurr=items.get(i);if(curr.getC().getId()==id){}}培}publicdoubletotal(){doubletotal=0;i=0;i<items.size();i++){CartItemcurr=items.get(i);total+=curr.getQty()*}return}packagepackageimportjava.util.List;importimportjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpSession;importbean.Cart; publicclassActionServletextendsHttpServletHttpServletResponseresponse)throwsServletException,{Stringuri=request.getRequestURI();Stringpath=AOdaonewtry

request.setAttribute("computers",computers);.forward(request,}catch(Exception{thrownew}}elselongid=Long.parseLong(request.getParameter("id"));ComputerDAOdao=newtryComputerc=dao.findById(id);CartItemitem=newCartItem();Cartcart=(Cart)session.getAttribute("cart");if(cart==null){//如果是第一 ,需要先創(chuàng)建好cart對//然后綁訂到sessioncart=newCart();}booleanflag=cart.add(item); .forward(request,}}catch(Exception{thrownew}}}}}}}地址跳向功能實(shí)現(xiàn)知識點(diǎn)列12理解并掌握URL34567*89*注 【案例1】購物車 錯(cuò)誤!未定義書簽功能 實(shí)現(xiàn) 用 以后,如何繼續(xù)使用 【案例2】URL重寫01 【案例3】URL重寫02 過濾器 【案例4】過濾器 器 上傳文件(擴(kuò)展 102功能實(shí)現(xiàn)功能3:查看購物車cart.jsp到項(xiàng)目中,修改為<%@pageimport="bean.*,java.util.*"<linkhref="css/main/style.css"<body<div<tablecellSpacing="6"cellPadding="2"width="100%"<tableclass="guide"cellSpacing="0"cellPadding="0"width="100%"border="0"><ahref='#'>主頁 <a筆記本訂購 <br<tableclass="tableborder"cellSpacing="0"cellPadding="0"width="100%"border="0"><tr<tdclass="altbg1"<tdclass="altbg1"<tdclass="altbg1"

Cartcart=if(cart!=null&&cart.list().size() CartItemitem=<td<td<td<td<inputtype="text"size="3"value=""<td<a &qty=' <td<a }

<tdclass="altbg1" <tdclass="altbg2"培}<inputclass="button"type="button"value="返回商品列表"name="settingsubmitonclick="location<inputclass="button"type="button"value="清空購物車"onclick="location=測點(diǎn)擊跳轉(zhuǎn)到查看功能完成功能4:刪除購物車中所有商品功能5:刪除購物車中指定商品功能6:修改購物車當(dāng)中的商品的數(shù)量更改數(shù)量功能完成解決方法是使用Session技術(shù),今天不做講解。(購物車案例結(jié)束用 以后,如何繼續(xù)使用session什么是url組件的地址,而應(yīng)該使用服務(wù)器生成的包含有sessionId的地址。如何生成包含有sessionId方式1(適用于、表單提交)response.encodeURL(String方式2(適用于重定向)2】URL01當(dāng)用戶禁用后,使用URL重寫方式1(適用于、表單提交response.encodeURL(Stringurl);繼續(xù)使用請新建項(xiàng)目web08_session CountServlet ①瀏覽器②服務(wù)器為該瀏覽器用戶創(chuàng)建一個(gè)Session③服務(wù)器將sessionId&&④瀏覽器將服務(wù)器傳回的sessionId⑤當(dāng)用戶點(diǎn)擊“”<ahref="count">時(shí),瀏覽器發(fā)送帶sessionId的請求給服務(wù)⑥服務(wù)器中的CountServletsessionId找到該用戶對應(yīng)的Session URL重寫方式,繼續(xù)使用 ①瀏覽器②服務(wù)器創(chuàng)建Session③test.jsp將頁面和SessionId因?yàn)闉g覽器禁用了,所以瀏覽器并不保存sessionId,為了能繼續(xù)使用Session,我們在test.jsp中重寫了URL,所以此時(shí)test.jsp返回給瀏覽器一個(gè)帶有sessionId的地址④當(dāng)用戶點(diǎn)擊“”,向服務(wù)器發(fā)送的請求中包含了⑤服務(wù)器通過這個(gè)sessionId可以找到對應(yīng)的form表單的URL3】URL02當(dāng)用戶禁用后,使用URL重寫方式2(適用于重定向response.encodeRedirectURL(StringurlSession瀏覽器沒有禁用重定向后可以顯示放入Session中的內(nèi)容則找丌到則找丌到 的地址中將加入過濾器寫一個(gè)javaFilter中,使用<FilterFilterConfig.getInitParameter(StringparaName服務(wù)器的Servlet引擎創(chuàng)建Request&&ResponseServletdoFilter方法,該方法有兩個(gè)參數(shù)request(在過濾器中可以到Request對象&&Response對象乊后調(diào)用SomeServletservice過濾器將service怎樣寫一個(gè)過濾器寫一個(gè)javaFilter丌添加過濾器,在Servlet中驗(yàn)證新建工程測輸入合法的字符串顯輸入丌合法字符串“wholetthedogs顯演示由過濾器負(fù)責(zé)過濾敏感packagepackage培importjava.io.PrintWriter;importimportjavax.servlet.http.HttpServletRequest;publicclassProcessServletextendsHttpServlet{publicvoidservice(HttpServletRequestrequest,throwsServletException,{System.out.println("servletbeginprocess...");PrintWriterout=response.getWriter();out.println("yourcommentis"+comment);System.out.println("servletprocess}}packagepackageimportjava.io.PrintWriter;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;publicclassCommentFilter1implements在容器刪除Filterpublicvoid{}當(dāng)請求到達(dá)容器,容器會(huì)調(diào)用doFilter方法。容器會(huì)將事先創(chuàng)建好的request,response對象作為如果調(diào)用了FilterChain.doFilterpublicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,{System.out.println("Filter1beginfilter...");HttpServletRequestrequest=if(comment.indexOf("dog")>0){}培}實(shí)例,可以Filter的初始化參數(shù)publicvoidinit(FilterConfigarg0)throws{}}<?xml<?xmlversion="1.0"encoding="UTF-<web-app" 培培配置初始化參數(shù)中,使用<FilterFilterConfig.getInitParameter(StringparaNamepackagepackageimportjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importimportpublicclassCommentFilter1implementsprivateFilterConfigpublicvoid{}publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,{System.out.println("Filter1begin Stringcomment=StringillegalStr=0){out.println("illegalarg2.doFilter(arg0,arg1);}System.out.println("Filter1process}培}實(shí)例,可 publicvoidinit(FilterConfigarg0)throws{config=}測當(dāng)用戶輸入帶”cat“的字符串時(shí)提示“丌合法當(dāng)用戶輸入“aaadog”沒有關(guān)課堂練習(xí)寫一個(gè)CommentFilter2comment20comment過濾器的優(yōu)先級當(dāng)有多個(gè)過濾器都滿足過濾的條件時(shí),依據(jù)<filter-map>的先后順序依次執(zhí)行過濾器的優(yōu)點(diǎn)【案例4】過濾器packagepackageimportjava.io.PrintWriter;importimportjavax.servlet.http.HttpServletRequest;publicclassProcessServletextendsHttpServletpublicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,{System.out.println("servletbeginprocess...");PrintWriterout=response.getWriter();out.println("yourcommentis"+comment);培}}System.out.println("servletprocesspackagepackageimportjava.io.PrintWriter;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.ServletRequest;importjavax.servlet.http.HttpServletRequest;publicclassCommentFilter1implementsFilter{privateFilterConfigconfig;在容器刪除Filterpublicvoid{}當(dāng)請求到達(dá)容器,容器會(huì)調(diào)用doFilter方法。容器會(huì)將事先創(chuàng)建好的request,response對象作為如果調(diào)用了FilterChain.doFilterpublicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,{System.out.println("Filter1beginfilter...");HttpServletRequestrequest=Stringcomment=request.getParameter("comment");StringillegalStr=config.getInitParameter("illegalStr");if(comment.indexOf(illegalStr)>0){}}實(shí)例,可 publicvoidinit(FilterConfigarg0)throws{config=}}packagepackageimportjava.io.PrintWriter;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;publicclassCommentFilter2implementsFilter{privateFilterConfigconfig;publicvoiddestroy(){}publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{HttpServletRequestrequest=PrintWriterout=response.getWriter();intsize=Integer.parseInt(if(comment.length()>size){out.println("illegal}}arg2.doFilter(arg0,}}publicvoidinit(FilterConfigarg0)throws{config=}<?xml<?xmlversion="1.0"encoding="UTF-<web-app" <filter><bodystyle="font-<formaction="process"method="post">inputyourcomment:<input<inputtype="submit" >>>> <formaction="process"inputyourcomment:<input<inputtype="submit"器綁訂事件,指的是當(dāng)調(diào)用request,session,ServletContextsetAttribute,removeAttribute實(shí)例如何獲得ServletContext實(shí)例。GenericServletgetServletContext()方法。HttpSession提供了getServletContext()方法。ServletConfig提供了getServletContext()方法。getAttribute(Stringname);removeAttribute(Stringname);在使用在servlet類當(dāng)中,不能夠使用request.getParameter方法來獲得參數(shù)值。要使用InputStream比較復(fù)雜,一般使用一些封裝好的工具(比如apache提供的如何寫器演示和Session丌同(關(guān)閉瀏覽器后session對象即),除非把服務(wù)器關(guān)閉,否則servletContext這樣的配置只能被SomeServlet,丌能被其他Servlet全局初始化參數(shù),能被所有Servlet到 配置當(dāng)用戶地址的默訃同時(shí)使用FF【案例5】器新建工程packagepackageimportjava.io.PrintWriter;importjavax.servlet.ServletContext;importimportjavax.servlet.http.HttpServletRequest;importpublicclassSomeServletextends{publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException培PrintWriterout=response.getWriter();sctx.setAttribute("username","user1");"已經(jīng)將username"ServletContext上面<br/>");Stringversion}}packagepackageimportjava.io.PrintWriter;importjavax.servlet.ServletContext;importimportjavax.servlet.http.HttpServletRequest;importpublicclassOtherServletextendsHttpServletResponseresponse)throwsServletException,IOException{培PrintWriterout=response.getWriter();Stringusername=(String)out.println("username:"+username);Stringversion=out.println("version:"+version);}}packagepackageimportjavax.servlet.ServletContext;importjavax.servlet.http.HttpSessionEvent;publicclassCountListenercount=0;publicvoid{count++;HttpSessionsessionServletContextsctx=}}}publicvoid{count--;HttpSessionsessionServletContextsctx=}<?xml<?xmlversion="1.0"encoding="UTF-<web-app" <!--配 器-- 培 <%@page<%@pagepageEncoding="utf-8" <ahref="logout.jsp">退出系統(tǒng)上傳文件(擴(kuò)展)在servlet類當(dāng)中,不能夠使用request.getParameter方法來獲得參數(shù)值。要使用InputStream比較復(fù)雜,一般使用一些封裝好的工具(比如apache提供的請commons-fileupload-1.2.1-【案例6】使用工具完成上傳文件請Jarusername:username:<input<inputtype="submit"packagepackageimportimportjava.util.List;importjavax.servlet.ServletContext;importimportpublicclassFileUploadServletextends{publicvoidservice(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException{DiskFileItemFactoryfactorynew//step2ServletFileUploadsfutry//step4itemsi=0;i<items.size();i++){FileItemitem=items.get(i);Stringpath=StringfileName=Filefile=newFile(path+"\\"+fileName);}}}catch(Exception{}}}}}<?xml<?xmlversion="1.0"encoding="UTF-<web-app "培 在tomcat服務(wù)器的 知識點(diǎn)列1問題:用戶購物信息保存于Session中,當(dāng)關(guān)閉2*3Servlet4567*8*9JSP注 購物車_02【案例1】購物車購物車的第二個(gè)版本,使 第1次時(shí),服務(wù)器將創(chuàng)建Session對用戶購物信息裝入購物車(Cart)對象中,Cart是一個(gè)CartItemList將Cart中保存的List集合轉(zhuǎn)換為一個(gè)等價(jià)的字符串保存到中在CartItem中最重要的信息就是商品ID和數(shù)量瀏覽器將信息保存到硬盤當(dāng)瀏覽器被關(guān)閉后,用戶重新該地址時(shí)帶著信服務(wù)器重新創(chuàng)建一個(gè)Session對象參考新建web09_shop&&拷修改“”功3,8;4,11;9,23,8;4,11;9,2publicStringStringBuffersb=new{i=0;i<items.size();i++){CartItemitem=items.get(i);+}}if(sb.length(){}return}(類似" @parampublicvoidload(Stringif(content==null||}String[]pcs=i=0;i<pcs.length;i++){Stringpc=pcs[i];String[]strs=pc.split(",");longid=intqty=Integer.parseInt(strs[1]);ComputerDAOdao=newComputerDAO();try{Computerc=CartItemitem=newCartItem();培}}catch(Exception{}packagepackageimportbean.Cart;importbean.CartItem; publicclassTestCartpublicstaticvoidmain(String[]{Cartcart=new1:storeComputerc=newCartItemitem=newCartItem();Computerc2=newCartItemitem2=newCartItem();Stringcontent=cart.store(); }}packageimportimport.URLDecoder;packageimportimport.URLDecoder;import.URLEncoder;importjavax.servlet.http. importimport**@author*public UtilprivatestaticStringdefault_path privatestaticintdefault_age=365*24**@param@param@param@param@throwspublicstaticvoid (Stringintage) name,URLEncoder.encode(value,"utf- }publicstaticvoid (Stringthrows }依 的名字,查 @param@param@throwspublicstaticStringfind (Stringname,HttpServletRequestrequest)UnsupportedEncodingException{String= s= s s.length;i++){okiecurr=packagepackageimportjava.util.List;importimportjavax.servlet.http.HttpServletRequest;importimport培}value}}}return}@param@parampublicstaticvoiddelete (Stringname,HttpServletResponseresponse){= }importbean.Cart; publicclassActionServletextendsHttpServlet{throwsServletException,IOExceptionStringuri=request.getRequestURI();Stringpath=if(path.equals("/list")){ComputerDAOdaonewtry

request.setAttribute("computers",computers);.forward(request,}catch(Exceptione)thrownew}}elselongid=Long.parseLong(request.getParameter("id"));ComputerDAOdao=newtryComputerc=dao.findById(id);CartItemitem=newCartItem();if(cart==null){ cart=new

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論