2015年播客javaee第168期就業(yè)視頻教程-day_第1頁
2015年播客javaee第168期就業(yè)視頻教程-day_第2頁
2015年播客javaee第168期就業(yè)視頻教程-day_第3頁
2015年播客javaee第168期就業(yè)視頻教程-day_第4頁
2015年播客javaee第168期就業(yè)視頻教程-day_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

day11總JSPELJSPJavaWeb早期:applet有的<html>response.getWriter().println(“<html>”);<html>--<body></body>--</html>--什么是html+java代碼+JSP動態(tài)=通常臺開發(fā)給出靜態(tài)頁面后,開發(fā)只需在靜態(tài)頁面中添加動態(tài)信息即可,而Servlet一行一行的去輸出了。JSP真身JSPJSPServlet是否存在,如果存在,那么直接JSPServlet,JSPServletServletHTMLJSPServletJSPServlet在“真身”中,所有的靜態(tài)內容會被輸出。例如<html>就是靜態(tài)內容,它對應“真身”中的out.println()的 <%!...%>:。對應“真身”中的屬性和方法EL什么是JSP2.0要把html和css分離、要把html和javascript分離、要把Java代碼塊替換成。的好處是非Java都可以使用。JSP2.0–純頁面,即:不包含<%…%>、<%!…%>,以及<%=…EL(ExpressionLanguage)是一門表達式語言,它對應<%=…%>JSP中,表達式會EL表達式也會被輸出。ELpageisELIgnoredfalseJSP在編譯成.java時,才不會忽略EL表達式。\概述什么翻譯成中文是點小餅干的意思在HTTP中它表示服務器送給客戶端瀏覽器的點。其實就是一個鍵和一個值構成的,隨著服務器端的響應發(fā)送給客戶端瀏覽器。然后客端瀏覽器會把保存起來,當下一次再服務器時把再發(fā)送給服務器。規(guī) 最多只有4KB,一個服務器最多只能發(fā)送到客戶端20個 并且瀏覽器最多可以保存300個 的大小為8KB,最多可保存500個 不同的瀏覽器之間不能共享的作 們知道是服務器保存在客戶端的信息,然后客戶端會在下次請求時把在還給服務器IDCooke,而你本的屬4名字(name值(value路徑(path域 現(xiàn)在我們只需要關心name和value,而path和 javax.servlet.http.類只有一個構造器: (Stringname,Stringvalue)。你應該知道怎么 對象吧:c=new (“id”,“HZ_001”);保 到客戶publicclassAServletextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionc=("id",}}void(publicclassAServletextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionc=("id",}}void(使用瀏覽器然后通過HttpWatch查看響應頭信息中是存在 當再交方法時,查看請求頭信息中是否存在 息當然也可以嘗試是否在請求頭中存 嘗試,你可能會說,BServlet不存在,沒錯,BServlet是 請求頭信息。這說明不只是AServlet才會有 頭信息,而是只要這個day07_03就會有 的生 存中存活,也就是說,當你關閉瀏覽器后,就會! #setMaxAge(intexpiry)來設置 的存活時間。參數expiry表示 .setMaxAge(60*60):表示1小時。就算關閉瀏覽器,就算重啟客戶端電腦,也會存活1小時。因為當maxAge大于0時,瀏覽器不僅會把保存在瀏覽器內存中,還會把保存到硬盤上。 思,表示只在瀏覽器內存中存活。一旦關閉瀏覽器窗口,那么就會。 .setMaxAge(0):被作廢!表示即不在內存中存活,也不在硬盤上存活,這樣的設置只有一個目的,那就是覆蓋客戶端原來的這個,使其作廢。下面是瀏覽器查看的試IE查 服務我們現(xiàn)在已經可以保存到客戶端了,但還沒有學習讓服務器如 如果瀏覽器保存了,那么會在下一次請求時把放到請求頭中發(fā)送給服務器,這 。既然是在請求中,那么當然是使用request對象來了。HttpServletReqookie[]get注意,它返回的是數組,而不是一個對象。如果請求中沒有,那么該方null。[][]cs=if(cs!=null)for c:cs)Stringstr=c.getName()+":"+c.getValue()+"<br/>";}} 的路 信息也就是說,就算你不設置的path,也是有路徑的。這個路徑就是請求的路徑。例如在請求時,服務器響應了一個,那么這個的默認例如請求的路徑是時,服務器響應了一個,那么這個的默認路徑就是/day07_03/servlet/。 的path有什么用,現(xiàn)在我們來聊聊path的作用。首先一點,path不是指在客戶端存放的路徑不同的瀏覽器存放的路徑是不同的你不能通過的path來指定文件的存放路徑!那么path是干什么的呢?假設你的瀏覽器當前已經有了兩個c1:name=id; ;;當*時,請求頭中會包含c1,而不會包含c2。當*時,請求頭中會包含c1和c2。也就是說,在子路徑時,會包含其父路徑的,而在父路徑時,不包含子路徑的如果你想在BServlet中設置的 ,在客戶端AServlet時也包含在請求頭中,那么就需要設置BServlet中的 的path: 的路徑,保存在AServlet時,也會包含BServlet中添加 的的屬性可以讓中二級域共享,次要現(xiàn)在我希望在這些主機之間共享(例如在 中響應的,可以在設 的path為“/:c.etath(“/”);設 為 :c.set 當為“ ”時,無論前綴是什么,都會共享的。但是現(xiàn)在我們需要設 windowsDNS<Host <Host <Hostname=" unpackWARs="true"autoDeploy="true"xmlValidation="false"xmlNamespaceAware="false"/>c=("id", 。把A項目的 到 下,并把 [][]cs=if(cs!=null) c:cs)Strings=c.getName()+":"+c.getValue()+"<br/>";}}把B項目的 到 下,并把 第五步:\AServlet,然后再\BServlet中保存中中保存中文,次要。中是不可以設置中文的但可以使用URLEncodor.encode()方法編碼后在存放到 時,需要先使用URLDecoder.decode()方法,再使用。Stringname=URLEncoder.encode("","UTF-8");Stringvalue=URLEncoder.encode(" ",Stringname=URLEncoder.encode("","UTF-8");Stringvalue=URLEncoder.encode(" ","UTF-8");c=new (name,value); []cs=request.get if(cs!=[]cs=request.get if(cs!=null) c:cs)Stringname=URLDecoder.decode(c.getName(),"UTF-8");Stringvalue=URLDecoder.decode(c.getValue(),"UTF-8");Strings=name+":"+value+"<br/>";}}練使用來驗證用戶是否已經登錄 中,轉發(fā)到 <h3>請求輸入你的<formaction="/login/LoginServlet":<inputtype="text"name="username"<inputtype="submitvalue="提交StringStringusername=request.getParameter("username");PrintWriterout=response.getWriter();if(username==null||"".equals(username)){}(response,("username",PrintWriterout=response.getWriter();PrintWriterout=response.getWriter();Stringnameif(name==null)(request,}out.print("您好:"+name+",歡迎登錄本系統(tǒng)<br/>");out.print("<aout.print("<aPrintWriterout=response.getWriter();PrintWriterout=response.getWriter();Stringnameif(name==null)(request,}out.print("您好:"+name+",歡迎登錄本系統(tǒng)<br/>");out.print("<aout.print("<apublicUtilspublicstaticStringget (HttpServletRequestrequest,Stringname){[]cs=request.get if(cs==null)return} c:cs)tryStringStringn=URLDecoder.decode(c.getName(),"utf-if(n.equals(name))returnURLDecoder.decode(c.getValue(),"utf-}}catch(UnsupportedEncodingExceptione)thrownew}}return}publicstaticvoidtry(HttpServletResponsec)Stringname=URLEncoder.encode(c.getName(),"utf-8");Stringvalue=URLEncoder.encode(c.getValue(),"utf-8");= (name, }catch(UnsupportedEncodingExceptione)thrownew}}}HttpSession會話之就要有getAttribute()setAttribute()系列方法了。在一個會話內共個session對象,所以session中可以保存一個會話內的數據。例如當前用獲取session對有了session,就不用使用 來會話了!但是session不能像 戶關閉瀏覽器窗口,那么session就死掉了。HttpSessionsession=request.getSession();session.setAttribute("data"," osession");HttpSessionsession=request.getSession();session.setAttribute("data"," osession");HttpSessionsession=request.getSession();session.setAttribute("data"," osession");HttpSessionsession=request.getSession();session.setAttribute("data"," osession");HttpSessionHttpSessionsession=Stringdata=(String)session.getAttribute("data");response.getWriter().print("session_data:"+data);session原理(依 我們都知道HTTP是無狀態(tài)協(xié)議,但是為什么session可以會話狀態(tài)呢?沒錯,session依賴上我們只需要把卡就可以看到卡上余額呢?原因是ATM獲取卡上的ID,然后通過ID去銀行數應的賬戶!所以你大可以放心,壞掉了沒有關系,錢不會掉的,因為賬戶余額在銀行的數據庫中,你只需要重新去銀行辦一張卡,的置入到新卡中就OK了。sessionid屬性,sessionsessionId就相當于卡!銀Tomcat服務器,而手里只有卡的我們就是客戶端瀏覽器。理業(yè)務時就不需要再辦卡了,但你記帶著卡去銀行。當客戶端第一次服務器時,服務器會為客戶端創(chuàng)建一個session對象,然后把session對象放到session池中,在響應時把sessionId通過響應給客戶端。注意,只有在第一次時,sessionsessionId。從此以后就不會了!當客戶端再次服務器時會在請求中帶著sessionId給服務器服務器通過sessionId到池中找到session對象,這就可以完成會話了。也就是說,服務器端保存的是session對象,session中保存的數據就可以再次被使用了。sessionId是服務器通過 的maxAge為-1,即只在瀏覽器內存中存在。如果你關閉所有瀏覽器窗口,那么這個就會了!session失session是服務器設置的maxAge為0導致的(客戶端沒有)(session.invalidate()(銀行賬戶找到了,但賬戶已被凍結)StringgetId()session30TomcatsessionvoidsetMaxInactiveInterval(intinterval)session允許的最大不活動時間(秒1session1session就會被移除;voidinvalidate():讓session失效!調用這個方被session失效,當session失效后,客戶端再次請求,服務器會給客戶端創(chuàng)建一個新的session,并在響應中給客戶端新sessionsessionId;booleanisNew():查看session是否為新。當客戶端第一次請求時,服務器為客戶端創(chuàng)建sessionsessionId響應給客戶端時,這session的狀態(tài)為新。URL重我們知道,session依賴 的支持,那么session就有了。這時可以使用URL重寫的方式!<a <a 還有重定向,以及請求轉發(fā)中都添加參數,這樣就可以在多個Servlet,以及頁面之間傳遞sessionIdsessionIdsessionIdsession對象! 中找到sessionId,還是在URL的參數中找到sessionId,這都是一樣的。只要請求中有sessionId,那么就可以找到對應的session,有了session就可以客戶端狀態(tài)。HttpSessionHttpSessionsession=Stringdata=(String)session.getAttribute("data");response.getWriter().print("session_data:"+data);Stringdata=HttpSessionsession=request.getSession();session.setAttribute("data",data);response.getWriter().print("datadata"<br/>");,發(fā)出請求時使用httpWatch查看響應頭中的sessionId,然后下來,例如C267D05CF45E993DB68A909917E85B36。這時服務器端已經創(chuàng)建了sessionsessionId發(fā)送給客戶端!BServlet時就不會給服務器發(fā)送sessionId了。把下的sessionId使用上oworld!你可能發(fā)現(xiàn)了,參數jsessionId與路徑之間使用的是分號,而不是問號。這是服務器的要求!responseencodeURL(String)jsessionIdStringpathStringpath=注意,response.encodeURL()方去判斷是否使用了session,是否瀏覽器不支持 是這樣,這個方法才會去重寫URL。Stringpath="/sess/BServlet?data=path=response.encodeURL(path);Stringpath="/sess/BServlet?data=path=response.encodeURL(path); HttpSession練:登錄分驗證失敗,把輸出用戶名或錯誤如果session中包含用戶信息,那么輸出用戶信息,并顯示BServlet的超BServletAServlet <formaction="/sessionlogin/LoginServlet"用戶名:<inputtype="text:<inputtype="password"<inputtype="submitvalue="登錄publicpublicvoiddoPost(HttpServletRequestrequest,HttpServletResponsethrowsServletException,IOException{Stringusername=request.getParameter("username");Stringpassword=request.getParameter("pwd");Stringcxt=request.getContextPath();if(validate(username,password)){HttpSessionsession=session.setAttribute("username",publicpublicstaticbooleanvalidate(Stringusername,Stringpassword)if(username!=null)return}return}}response.sendRedirect(cxt+}elseStrings點擊<ahrefcxtindex.jsp'>這里</a>返回到登錄頁面!";PrintWriterout=response.getWriter(); }AServletpublicpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponsethrowsServletException,IOException{PrintWriterout=response.getWriter();HttpSessionsession=request.getSession();Stringusername=(String)session.getAttribute("username");Stringcxt=request.getContextPath();if(username!=null){out.print(username您好!歡迎登錄本系統(tǒng)<br/>");out.print("<ahref='"+cxt+out.print("<ahrefcxtindex.jsp'>重新登錄}elseStrings點擊<ahrefcxtindex.jsp'>這里</a>返回到登錄頁面!";}}HttpSession練習2: 回顧VerifyCode類(看懂即可publicclassVerifyCode{privateintw=70;privateinth=35;privateRandomr=newprivateStringfontNames宋體華文楷體黑體華文新魏華文隸書微軟雅黑","楷體_GB2312"};privateStringcodes privateColorbgColor=newColor(240,240,privateStringprivateColorrandomColor(){intred=r.nextInt(256);intgreen=r.nextInt(256);intblue=r.nextInt(256);returnnewColor(red,green,}privateFontrandomFont()intindex=r.nextInt(fontNames.length);StringfontName=fontNames[index];intstyle=intsize=r.nextInt(5)+returnnewFont(fontName,style,}privatevoiddrawLine(BufferedImageimage)intnum=Graphics2Dg2=for(inti=0;i<num;i++)intx1=r.nextInt(w);inty1=r.nextInt(h);intx2=r.nextInt(w);inty2=g2.setStroke(newBasicStroke(1.5F));g2.drawLine(x1,y1,x2,y2);}}privatecharrandomChar()intindex=return}privateprivateBufferedImagecreateImage()BufferedImageimage=newBufferedImage(w,h,BufferedImage.TYPE_INT_RGB);Graphics2Dg2=(Graphics2D)image.getGraphics();g2.fillRect(0,0,w,return}publicBufferedImagegetImage(){BufferedImageimage=createImage();Graphics2Dg2=(Graphics2D)image.getGraphics();StringBuildersb=newStringBuilder();// for(inti=0;i<4;i++){Strings=randomChar()+"";floatx=i*1.0F*w/4;g2.drawString(s,x,h);}this.text=sb.toString();return}publicStringgetText()return}publicstaticvoidoutput(BufferedImageimage,OutputStreamthrowsIOException{ImageIO.write(image,"JPEG",out);}}頁面validaoginsessionloginindex.jsp添加一個文本框,用來輸入,還需要一個<img>元素用來顯示。添加一個VerifyCodeServlet,給頁面中的<img>Verify

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論