傳智播客JavaWeb重點知識隨堂筆記_第1頁
傳智播客JavaWeb重點知識隨堂筆記_第2頁
傳智播客JavaWeb重點知識隨堂筆記_第3頁
傳智播客JavaWeb重點知識隨堂筆記_第4頁
傳智播客JavaWeb重點知識隨堂筆記_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第二章 Servlet使用入門在這一章里面我們將要學(xué)習(xí)以下幾點內(nèi)容:1:CGI與Servlet的區(qū)別 2:Servlet體系結(jié)構(gòu)3:Servlet的基礎(chǔ)知識4:Servlet的輸出5:Servlet的生命周期6:HttpServletResponse與HttpServletRequest幾個重要方法CGI與Servlet的區(qū)別1)在最早期的Web應(yīng)用程序主要是CGI(Common GateWay Interface 通用網(wǎng)關(guān)接口)。2)這類Web應(yīng)用程序是使用如Perl這樣的語言來編寫的。3)CGI有個致命的缺點,就是對每一個客戶端,必須創(chuàng)建一個新的實例,這將占用大量的內(nèi)存4)為了解決這個問題

2、,Servlet出現(xiàn)了。5)Servlet是一個用Java編寫的類,在服務(wù)器上運行,處理客戶端的請求,并把結(jié)果放給客戶端。6)對于每一個客戶端的請求,只需要創(chuàng)建一個Servlet的實例。從而大大的節(jié)省了內(nèi)存Servlet體系結(jié)構(gòu)客戶端:客戶端->Web服務(wù)器->Web容器->Servlet http請求 服務(wù)器端:Servlet->Web容器->Web服務(wù)器->客戶端 Servlet的基礎(chǔ)知識1)要編寫一個Servlet,一般繼承自HttpServlet抽像類。所以一般要導(dǎo)入包javax.servlet.*與javax.servlet.http.*;2)自定

3、義的Servlet一般要重寫doGet()方法和doPost()方法3)doGet方法用來處理客戶端通過Get方法發(fā)出的請求public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException 4)doPost()方法用來處理客戶端通過Post方法發(fā)出的請求public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletExce

4、ption, IOException5)request參數(shù)用來表示客戶端的請求,response參數(shù)用來服務(wù)器對客戶端的響應(yīng)6)為了讓一個Serlvet能夠處理Get請求與Post請求。一般會在doPost的方法里面寫上doGet(request, response)表示把所有的請求轉(zhuǎn)化成為Get請求Servlet的輸出1)Servlet可以通過兩種方法來輸出運算的結(jié)果A:通過System.out.Print方法。此方法會把結(jié)果輸出到Cmd中,也就是TomCat中。B:通過response參數(shù)的getWriter()方法得到一個PrintWriter對像進行輸出,此輸出會把計算結(jié)果輸出到IE上

5、,一般用此方法PrintWriter out = response.getWriter();out.printlnServlet的生命周期1)Servlet的生命周期是指從一個Servle的創(chuàng)建開始到消亡的全過程2)Servlet的生命周期各階段如下:A:實例化:也就是創(chuàng)建一個Servlet類的實例B:初始化:向window申請資源。此時會自動去執(zhí)行Init方法C:服務(wù):去不斷地接受客戶端的請求,并做出響應(yīng)D:釋放:把以前分配的資源進行歸還給操作系統(tǒng),此時會自動執(zhí)行destroy方法舉例:做一個servlet計數(shù)器,用來輸出servlet被調(diào)用了多少次步驟:1)定義一個全局變量2)在Init中

6、賦初值為03)在doGet把變量加1, 并輸出提問:1)同時打開另外一個IE瀏覽器,做一個新的客戶端,討論計數(shù)器會不會清零結(jié)論:不管有多少個客戶端,都只有一份實例。2)討論什么時候計數(shù)器才會清零,關(guān)閉TomCat容器結(jié)論:說明Web容器一旦關(guān)閉,則容器里面的servlet也就會消亡HttpServletResponse與HttpServletRequest幾個重要方法 1:HttpServletResponseA:response.setContentType("編碼")設(shè)置向客戶端輸出的文本的編碼,一般設(shè)為"text/html; charset=GBK"

7、;response.setContentType("text/html; charset=GBK");如果不設(shè)置,可能會出現(xiàn)亂碼BrintWriter out = response.getWriter();產(chǎn)生一個PrintWriter對像,此對像能夠把信息輸入到網(wǎng)頁中去 此對像不僅可以輸出普通字符,還可以輸出html標(biāo)記在不使用此對像時,應(yīng)該關(guān)閉該對像。out.close();C:response.sendRedirect("Index.html");使頁面進行跳轉(zhuǎn)2:HttpServletRequestA:request.getParameter(&

8、quot;變量名")B:如果接受中文再輸出會是亂碼,為了解決這個問題,可以在接受之間加上request.setCharacterEncoding("GBK");request.getParameter("變量名")可以得到客戶端以Post或Get方法提交過來的變量舉例: 1:創(chuàng)建一個登錄的Html頁面,通過Post提交到Servlet中,通過Servlet來判斷數(shù)據(jù)庫中用戶名是否正確,如果正確則跳到主頁面,否則打印錯誤,并提供"返回"超鏈接2:編寫一個用于注冊會員的html頁面,讓用戶填寫會員的資料后,能夠把這些資料保存到數(shù)

9、據(jù)庫中去第三章 會話跟蹤簡介在這一章里面我們將要學(xué)習(xí)以下幾點內(nèi)容:1:Servlet中頁面跳轉(zhuǎn)的方法2:Sevlet中session對像3:Serlvet中Cookie對像4:Serlvet上下文Servlet中頁面跳轉(zhuǎn)的方法1:request.getRequestDispatcher("目標(biāo)").forward(request,response);2:response.sendRedirect("目標(biāo)");3:forward與sendRedirect的區(qū)別:A:forward跳轉(zhuǎn)之后在地址欄中顯示依然是舊網(wǎng)頁的地址,sendRedirect顯示的是新網(wǎng)

10、頁的地址B:forward只能跳轉(zhuǎn)到當(dāng)前Web程序中的頁面,而sendRedirect可以跳到任何目錄。比如:request.getRequestDispatcher("").forward(request,response);錯誤response.sendRedirect(""); 正確什么是Session對像1:首先你應(yīng)該把session想像成為一個大盒子,里面用來存放客戶的數(shù)據(jù)2:當(dāng)你打開一個網(wǎng)站的首頁時,服務(wù)器就會為你創(chuàng)建一個大盒子,并且為這個大盒子編一個號,于是這個大盒子就可以讓你在這個網(wǎng)站的不同頁面之間共享,直到你離開這個網(wǎng)站的時候,這服務(wù)器

11、又會 收回這個大盒子3:可見session對像的其中的一個功能就是為了實現(xiàn)讓同一個客戶端在不同頁面之間實現(xiàn)數(shù)據(jù)共享.但是一旦用戶離開這個網(wǎng)站,那么session也就會自動消失4:一個網(wǎng)站可以被很多人同時訪問,訪問的每一個人在打開主頁時,都會有一個大盒子,即session.如果另一個用戶也同時訪問網(wǎng)站,他也擁有自己的Session,但兩個用戶之間無法通過Session共享信息5:以游泳分配一個柜子為例來說明sesson的用法6:session對像的常用手法:A:在一個頁面里面創(chuàng)建一個session變量.B:在另外一個頁面里面去使用該session變量.Session對像的方法1)在Servlet

12、中要使用Session,必須要使用HttpSession接口2)Session對像是一個數(shù)據(jù)集合,也就是一個Session對像里面可以放很多session變量,每一個Session變量都可以存放數(shù)據(jù)3)if(request.getSession().getAttribute("IsLogin")!=null) 判斷一個Session變量IsLogin是否存在,只有存在才可以繼續(xù)讀取里面的數(shù)據(jù)3)得到一個IsLogin變量的值if(request.getSession().getAttribute("IsLogin")!=null) 只有判斷存在了,才可以

13、讀數(shù)據(jù)request.getSession().getAttribute("IsLogin"):4)request.getSession().setAttribute("IsLogin","Yes");設(shè)置session中IsLogin里面的值什么是Cookies對像cookies對像可以客戶端長期保存信息。在客戶端的計算機里面會有一個cookies文件夾,那里就是存放客戶端的信息的。當(dāng)客戶端第一次去訪問某個網(wǎng)站時,該網(wǎng)站就會在客戶端的計算機里面偷偷地寫入一個Cookies下一次再訪問該網(wǎng)站時,它就會讀取你的計算機硬盤上cookies

14、,并將新的信息保存在你的計算機上。跟session不同的,cookies是把信息存儲在客戶端,不是在服務(wù)器里面。操作cookies1:得到所有的Cookies Cookie cookies=request.getCookies();2:得到指定Cookies的名字:Cookie.getName() 3:得到指定Cookies的值Cookie.getValue();4:設(shè)置指定Cookies的值cookie.setValue(值)5:添加一個Cookiescookie= new Cookie("Visted","1");cookie.setMaxAge(1

15、0000);設(shè)置cookie的過期時間以鈔為單位response.addCookie(cookie);4:修改指定cookie的值:注意修改之后也要重新添加,否則添加之后無效cookie.setValue(值); cookie.setMaxAge(1000);response.addCookie(cookie); 應(yīng)用舉例:1:證明正常情況下,一個網(wǎng)頁或Servlet的數(shù)據(jù)是不能給另外一個網(wǎng)頁或servelt共享做兩個servlet,一個servlet里面給一個session變量賦值,給一個私有變量賦值在另外一個servlet里面去使用session變量與私有變量的值,看一下結(jié)果2:有一個登錄

16、界面(login.html),一個主頁面(index),在主頁面里面有二個超鏈接分別為無限下載,新聞快遞。用戶必須要登錄之后進入主頁面,然后才能使用這二個超鏈接功 能,如果直接使用Index.html則會提示沒有登錄,然后轉(zhuǎn)到登錄界面 注意使用session對像登錄頁面->轉(zhuǎn)到servlet1,用來處理用戶名是否正確,如果正確,轉(zhuǎn)到主頁面,否則轉(zhuǎn)到 錯誤頁面主頁面->轉(zhuǎn)到servlet2,用來判斷用戶是否登錄過,如果登錄過則轉(zhuǎn)到無限下載或新聞 快遞頁面,否則轉(zhuǎn)到登錄頁面3:統(tǒng)計某個客戶端曾經(jīng)訪問某個網(wǎng)站的次數(shù),和網(wǎng)站的所有訪問次數(shù) Cookie cookies=request.ge

17、tCookies();if (cookies!=null) /如果cookies不為空for (i = 0; i < cookies.length; i+) if (cookies.getName().equals("Visted")break;if (i<cookies.length) /找到cookie=cookies;int n=Integer.parseInt(cookie.getValue();cookie.setValue(Integer.toString(n+1); cookie.setMaxAge(1000);response.addCookie

18、(cookie);elsecookie= new Cookie("Visted","1");cookie.setMaxAge(10000);response.addCookie(cookie); else /為空,一定要創(chuàng)建cookie= new Cookie("Visted","1");cookie.setMaxAge(10000);response.addCookie(cookie); out.println("你共訪問網(wǎng)"+cookie.getValue();4:在登錄時,選擇自動登錄,下

19、次在登錄時直接進入主頁面 創(chuàng)建一個Servlet,在里面判斷是否有Cookies,如果有則直接進入主頁面,如果沒有則首先進入登錄頁面 Serlvet上下文1:Servlet中的Session可以讓同一個客戶端在不同網(wǎng)頁之間進行共享2:Servlet中的上下文可以讓不同的客戶端來共享一些數(shù)據(jù),這些數(shù)據(jù)要存放在上下文中,可以把上下文看成一個容器,里面存放的數(shù)據(jù)可以被所有客戶端來共享 3:如何得到上下文的一個實例:ServletContext context=this.this.getServletContext();4:如何得到一個上下文指定鍵的值:if (context.getAttribute

20、("Pwd")!=null)Pwd=context.getAttribute("Pwd").toString();5:如何設(shè)置一個上下文的值: if (context.getAttribute("Pwd")=null)context.setAttribute("Pwd","*");舉例: 1:通過示例,說明Servlet中的Session與上下文的不同步驟:1)做一個appser1,在它里面創(chuàng)建一個Session和一個上下文,創(chuàng)建在appser2中輸出Session和上下文2)打開IE,先在同一

21、個瀏覽器中先執(zhí)行appser1,再執(zhí)行appser23)打開另外一個IE直接執(zhí)行appser2,看數(shù)據(jù)共享情況2:通過上下文做一個聊天室A:一個登錄頁面,提交到Dowithser中B:一個Dowith的Serlvet用來把Dowithser中的用戶名放入session中C:一個框架集,含有上下兩部分,下一部分包含一個talk.html頁面,上一個是一個topser的Servlet,用來顯示所有發(fā)言第四章 JavaMail和Servlet發(fā)送郵件的工作原理:1:客戶端把郵件發(fā)送給->發(fā)信服務(wù)器->發(fā)送到目的地2:發(fā)信服務(wù)器是各大電子郵箱的服務(wù)器。一般在前面加上smtp。比如:,等 3

22、:只要去申請一個免費的電子郵箱,就可以獲得一個發(fā)信服務(wù)器發(fā)送郵件必須需要兩個包:mail,activation包。這兩個包可以在jakarta-tomcat-4.1.31commonlib下面找到。一定要復(fù)制到web模塊下面WebModWEB-INFlib下面 發(fā)送郵件需要導(dǎo)入的包:import javax.mail.*;import ernet.*;import javax.activation.*; 發(fā)送郵件的涉及到的類Aroperties類:用來指定發(fā)信服務(wù)器,和使用發(fā)信服務(wù)器時是否需要身份驗證:Properties props = new Propertie

23、s();/創(chuàng)建一個Properties的實例props.put("mail.smtp.host", "");/設(shè)置發(fā)信服務(wù)器props.put("mail.smtp.auth", "true");/要經(jīng)過身份驗證B:Session類,會話類。要發(fā)郵件必須要創(chuàng)建一個Session類Session session = Session.getInstance(props);C:MimeMessage類.用來指定發(fā)送郵件的標(biāo)題,文本,等MimeMessage message = new MimeMessage(sessio

24、n);/得到MimeMessage的實例message.setFrom(new InternetAddress("chengyuqing110");/設(shè)置發(fā)件人message.addRecipients(Message.RecipientType.TO,"url=mailto:chengyu-qing,chengyu-qingchengyu-qing,chengyu-qing/url"); /設(shè)置收件人,可以同時指定多個收件人message.setSubject("主題");/設(shè)置郵件的主題message.setText("

25、內(nèi)容文本");/設(shè)置郵件的內(nèi)容文本D:Transport類。用來把郵件進行實際的發(fā)送Transport transport = session.getTransport("smtp");/得到Transport類的一個實例transport.connect(host, username, password);/連接發(fā)信服務(wù)器transport.sendMessage(message, message.getAllRecipients();/發(fā)送郵件 transport.close();/發(fā)送之后關(guān)閉說明:1:選擇發(fā)信人郵箱一定要是發(fā)信服務(wù)器里面申請的郵箱比如:如果

26、發(fā)信服務(wù)器->則發(fā)信人郵箱一定要是sina的郵箱,否則會出現(xiàn)錯誤發(fā)送帶有附件的郵件具備知識:要發(fā)送附件,必須有Multipart類。這個類用來負責(zé)管理附件,一個Multipart類同多個MimeBodyPart構(gòu)成。每一個MimeBodyPart就代表一個附件如果要發(fā)送附件,則"文本"也代表一個附件。文本是附件的第一個MimeBodyPartString host = ""String from = "chengyuqing110"String to = "chengyu-qing"String userna

27、me = "chengyuqing110"String password = "12345678"Properties props = new Properties();props.put("mail.smtp.host", host);props.put("mail.smtp.auth", "true");Session session = Session.getInstance(props);session.setDebug(true);MimeMessage message = new M

28、imeMessage(session);message.setFrom(new InternetAddress(from);message.addRecipients(Message.RecipientType.TO,to);message.setSubject("這是試驗"); /=設(shè)置附件的正文= MimeBodyPart bp1=new MimeBodyPart();bp1.setText("正文");/=設(shè)置附件=MimeBodyPart bp2=new MimeBodyPart(); bp2.setDataHandler(new DataHan

29、dler(new FileDataSource("c:過濾器.ppt");bp2.setFileName(MimeUtility.encodeText("c:過濾器.ppt"); /處理中文 /=加入附件里面=Multipart mp=new MimeMultipart();mp.addBodyPart(bp1); mp.addBodyPart(bp2); message.setContent(mp); /= Transport transport = session.getTransport("smtp");transport.co

30、nnect(host, username, password);transport.sendMessage(message, message.getAllRecipients();transport.close(); /= 收郵件String Uid =request.getParameter("txtUid");/郵件服務(wù)器的用戶名String Pwd =request.getParameter("txtPwd");/郵件服務(wù)器的密碼String Host =request.getParameter("txtHost");/郵件服務(wù)

31、器的主機名,一般是或Properties props = new Properties(); Session Getsession=Session.getDefaultInstance(props);/建立session Store store = Getsession.getStore("pop3"); store.connect(Host,Uid,Pwd); Folder folder=store.getFolder("INBOX");folder.open(Folder.READ_ONLY);Message message=folder.getMe

32、ssages(); message.getSubject()/得到郵件的主題message.getSentDate().toLocaleString()/得到發(fā)信日期Multipart p=(Multipart)message.getContent(); /得到一個Multipart,去讀出附件 p.getBodyPart(0).getContent().toString();得到郵件的文本/=第五章 Jsp簡介Jsp概念:1:什么是JspJsp(Java Server Page)是一種Java服務(wù)器端技術(shù)。一個Jsp頁面包括三個方面的內(nèi)容Html,JavaScript,Jsp程序片斷2:如何

33、寫Jsp腳本把Jsp腳本寫在<% %>里面把Js腳本寫在<script>代碼</script>里面3:可見Jsp實際上就是在Html語言中嵌入Jsp腳本4:編寫第一個Jsp應(yīng)用程序Jsp的執(zhí)行過程:瀏覽器->請求->Web服務(wù)器->找到Jsp頁面->編譯|瀏覽器<-響應(yīng)<-Serverlet 從該執(zhí)行過程不難看出Jsp在最后實際上要變成Serverlet之后才能發(fā)給客戶端Jsp與Servelet的區(qū)別:1)Jsp是在Serverlet的基礎(chǔ)上發(fā)展起來的2)Serverlet一般用于處理沒有界面的業(yè)務(wù)邏輯,如果處理有界面的程

34、序,就顯示比較笨拙Serverlet用out.println一句一句的輸出Html標(biāo)記(界面),當(dāng)整個網(wǎng)頁非常多且復(fù)雜的時候就會有很多的out.println來輸出html標(biāo)記3)Jsp很好的解決了這個問題,對于Html標(biāo)記可以直接書寫,只有需要寫程序代碼時才以<% %>的方式加入4)Jsp把界面部分與代碼部分分離,這樣可以在開發(fā)網(wǎng)站時實現(xiàn)分工。美工只管界面部分,而程序員只管代碼部分Jsp的語法:A)Jsp的輸出:out.println用來輸出1)輸出字符串:out.println("字符串")2)輸出Java腳本:out.println("<s

35、cript>alert('我是真的愛你');</script>");3)輸出Html標(biāo)記:out.println("<a href=>新浪網(wǎng)</a>");鏈接到QQ對話ut.println("<a target=blank href=B)表達式。<%=Java表達式%>。表達式后面不要加分號例如:<%=Math.max(100,90)%>,<%=3+4*5%>等C)Scriptlet:Scriptlet就是在<%.%>里面嵌入Java代碼。它在

36、形式上與表達式的區(qū)別就是在<%.%>里面沒有"=",而且中間是一段Java代碼,不是表達式,每條語句要以分號結(jié)尾。舉例說明D)聲明:<% ! Java變量,方法 %>1):聲明變量: <%! int a=3,b=4 %> 2)聲明類:<%!public class studpublic String GetId()return "W1"%> 3)聲明函數(shù): <%!public int sum(int a,int b)return a+b;%>說明:1)聲明變量即可以在<%! %>只能

37、夠聲明,不能實現(xiàn)比如:<%! int a=3,b=4,c; c=a+b;%>錯誤<%! int a=3,b=4,int c=a+b;%>正確2)聲明變量既可以<%! %>中聲明,也可以在<%中聲明%>。<%! %>中聲明的變量:servlet(Jsp最終要轉(zhuǎn)換成Serverlet)的實例變量。根據(jù)Servlet的原理,所以的客戶端只共享一個Serlvet的實例,所以在此處定義的變量可以其它的頁面來共享,也就是具備有繼承性<% %>中聲明的變量:是局部變量,只能夠給本頁面使用,不具備繼承性<%!int i=0; /實例

38、變量,有繼承性%><%i+;out.println(i);%>與的區(qū)別<%int i=0; /局部變量,無繼承性i+;out.println(i);%>3)但是聲明函數(shù)與類只能夠在<%! %>中聲明,而不能在<% %>4)一般聲明變量都在<% %>中聲明,而聲明函數(shù)與類都在<%!中聲明%>5)為了代碼的可讀性一般都把類用一個單獨的Java文件來保存,而不會在一個Jsp頁面中去定義E)Jsp指令:1)Jsp指令控制對整個頁面的處理。2)Page指令:1:導(dǎo)入Java包,與自定義的類格式:<% page impor

39、t="aspproject.Student,java.util.*"%>說明:自定義的類一定要放在WEB-INF下面的classes下面,不過只要引用了一個類,Jbulider會自動的創(chuàng)建一個classes文件夾,并放入相應(yīng)的類2:當(dāng)本頁面發(fā)生錯誤時,跳轉(zhuǎn)到錯誤頁面進行處理 格式:源頁面:<%page errorPage="Error.jsp" isErrorPage="false" %>錯誤頁面:<% page isErrorPage="true" %> 說明:錯誤是當(dāng)出現(xiàn)異常,但是

40、沒有捕獲時,如果捕獲了,則不會發(fā)生頁面跳轉(zhuǎn)3)include指令:1:該指令用于把一個Jsp頁面包含到另外一個Jsp頁面中2:格式:<% include file="HeadPic.jsp" %>說明:嵌入一個頁面是為了重用這個頁面,而不必在每一個頁面上寫一些相同的代碼。例如:在很多的Jsp頁面中都要在頂部顯示同樣的圖片,這時就不必在每個頁面都去包含這些圖片,而是單獨寫一個文件來完成此任務(wù),然后在其它的Jsp頁面中利用include包含即可作業(yè):1)編寫一個Java類,用來描述學(xué)生。包含學(xué)生的學(xué)號,姓名,性別。聲明三個實例,并加到一個ArraryList,并把結(jié)

41、果顯示在表格中2)編寫一個頁面,讓用戶輸入兩個數(shù)和一個操作符,在另外一個頁面顯示計算的結(jié)果3)做一個民意調(diào)查頁面,來調(diào)查"在校大學(xué)生談戀愛",好,不好,不好說三個選項一個頁面:顯示界面用來讓用戶進行投票,另外一個頁面顯示投票的結(jié)果jtds連接Sql server4)使用Jsp實現(xiàn)用戶登錄/* Class.forName("net.sourceforge.jtds.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:jtds:sqlserver:/chen:1433;

42、DatabaseName=jsp", "sa", "");java.sql.PreparedStatement ps = conn.prepareStatement(Sql);java.sql.ResultSet rs = ps.executeQuery();/*第六章 Jsp隱式對像Jsp的隱式對像有以下幾個:Aut對像:主要用來進行輸出1)輸出字符串:out.println("字符串")2)輸出Java腳本:out.println("<script>alert('我是真的愛你');&

43、lt;/script>");3)輸出Html標(biāo)記:out.println("<a href=>新浪網(wǎng)</a>");B:request對像:用來獲取客戶端的請求1)request.getParameter("名字"):獲取用戶提交過來的請求2)request.getParameterValues("名字"):獲取單選框的值3)request.getRemoteAddr():得到發(fā)送請求的主機名 4)request.getRequestURI():得到發(fā)送請求的UrlC:Response對像:用來向

44、客戶端輸出響應(yīng)結(jié)果 1)response.setContentType("編碼")設(shè)置向客戶端輸出的文本的編碼,一般設(shè)為"text/html; charset=GBK"response.setContentType("text/html; charset=GBK");如果不設(shè)置,可能會出現(xiàn)亂碼 2)response.setHeader("refresh","1");使頁面進行刷新擴展:response.setHeader("refresh","5;URL=新頁面&q

45、uot;);過5鈔鐘跳轉(zhuǎn)到新的頁面3):response.sendRedirect("Index.html");使頁面進行跳轉(zhuǎn)D:Session對像E:application對像。相當(dāng)于Serlvet上下文FageContext對像。只能夠在同一個頁面里面使用。一般很少用其中PageContext,request,session,application四種對像都可以通過 setAttribute()方法存儲值,通過getAttribute()得到值但是四種對像的范圍不一樣PageContext(也被稱為Page對像):一個頁面中Request:一次請求中session:一次

46、會話中application:一個應(yīng)用程序中范圍大小是:application>session>request>pageContext舉例: 1:舉例顯示會話計數(shù)、應(yīng)用程序計數(shù)、頁面計數(shù)的區(qū)別2:做一個在線購物的例子第七章 JavaBean和Jsp的標(biāo)準(zhǔn)動作什么是JavaBean: 1)是一個可重復(fù)使用的軟件組件2)JavaBean實際上就是一個Java類,這個Java類可以重復(fù)使用3)JavaBean在網(wǎng)站開發(fā)中一般用來封裝業(yè)務(wù)層和數(shù)據(jù)庫操作4)雖然我們可以像開發(fā)一個普通Java類一樣去開發(fā)一個JavaBean,但是JavaBean有它自己的規(guī)則5)JavaBean的規(guī)則:

47、A:是一個公有類B:具有不帶任何參數(shù)的構(gòu)造函數(shù)C:具有g(shù)etXxx(),setXxx(),用來讀取或?qū)懭隑ean的屬性(注意get與set一定要小寫*)6)JavaBean與Java類之間的區(qū)別在于JavaBean有特定的規(guī)則,并且不需要繼承自特定的類。而Java類一定要繼承自特定的類。默認為Object類 為什么要使用JavaBean:1:以前編寫Jsp時,都是在HTML代碼中夾雜著一大堆的 scriptlet-即java 代碼段,這樣整個頁面的可維護性,可復(fù)用性比較低2:用javaBean可以有效的將HTML中夾雜的java 代碼段剝離,然后包裝成一個可在多個頁面復(fù)用的"邏輯處理

48、組件",提高了頁面的可維護性,和可復(fù)用性如何來編寫JavaBean 選擇File->new->general->JavaBeanpackage demo;public class BeanSumprivate int num1;private int num2;public BeanSum()public void setnum1(int num1)this.num1=num1;public void setnum2(int num2)this.num2=num2;public int getnum1()return this.num1;public int get

49、num2()return this.num2;public int sum()return this.num1+this.num2; 說明:1:在JavaBean中除了有set與get方法之外,還可以其它的方法2:在JavaBean的方法的變量大小寫要符合Java的命名規(guī)則:如果只有一個單詞,則全部小寫,如果一個變量名或方法由多個單詞構(gòu)成則除第一個單詞小寫外,其它的單詞第一個字母一律大寫比如:shopName 不能寫成 ShopName 或shopnamesetShopName 不能寫成 SetShopName或setShopName如何使用JavaBeanA:嵌入 java 代碼方式<

50、% page import="demo.BeanSum" %> 下邊就可以像在 java 語言中那樣用了: <% BeanSum demo=new TestBean(); demo.num1=10; /取屬性是一定要取小寫的num1,盡管定義時寫的是大寫demo.num2=20;out.println(demo.sum();%>這一種方式也就完全把JavaBean當(dāng)成了普通對像B:使用 jsp 標(biāo)記符方式<jsp:useBean id="demo" class="demo.BeanSum" scope=&quo

51、t;session" /> 相當(dāng)于 BeanSum demo=new TestBean(); <jsp:setProperty name="besum" property="num1" value="10" />相當(dāng)于demo.num1=10;<jsp:setProperty name="besum" property="num2" value="20"/> 相當(dāng)于demo.num2=20;<%out.println(demo.s

52、um()%> 注意這一個代碼要分開,因為這段代碼既不是實例化JavaBean又不是屬性。C:感覺用"jsp 標(biāo)記符方式"比起"嵌入 java 代碼方式"困難,那是因為沒有把JavaBean與表單元素結(jié)合起來D:通過<jsp:setProperty name="demo" property = " * " /> 能夠自動地把上一個頁面提交過來的同名的表單元素的值賦給所有的屬性E:舉例:源頁面:<input name="num1" type="text"

53、id="num1" size="12"> 名字為num1<input name="num2" type="text" id="num2" size="12"> 名字為num2目的頁面: <jsp:useBean id="demo" class="demo.BeanSum" /> <jsp:setProperty name="demo" property = " * &qu

54、ot; /> 會自動賦值<%out.println(demo.sum()%>F:在通過jsp標(biāo)記來使用JavaBean時,有一個關(guān)鍵字scope用來指定這個JavaBean的活動范圍Page:只能在其頁面時使用,當(dāng)頁面刷新時,就會將其銷毀,這是默認的情況session:一直存在于會話中,也就是說可以被同個客戶端的不同頁面之間共享application:能夠給所有的客戶端來共享G:也就是說不同的頁面可以通過 Bean 交互, 而你在一個頁面中的普通類,就沒有這個功能。Jsp的標(biāo)準(zhǔn)動作:1:<jsp:setProperty>用來給JavaBean設(shè)置值2:<js

55、p:getProperty>用來得到JavaBean屬性的值3:<jsp:forwad page="url">用來把頁面跳轉(zhuǎn)到page所指的頁面。與response.sendRedirect()的區(qū)別1)response.sendRedirect()是在客戶端進行跳轉(zhuǎn),地址欄中會出現(xiàn)新的頁面的地址<jsp:forwad page="url">是在服務(wù)器端跳轉(zhuǎn),地址欄中依然是以前舊的地址。被稱為跳轉(zhuǎn)2)<jsp:forwad page="url">是傳遞請求,所以這個請求到下一個頁面依然可以使用

56、,而response.sendRedirect()是在跳轉(zhuǎn),請求在下一個頁面不在可以使用可以使用request.setAttribute來設(shè)置值。被稱為"轉(zhuǎn)發(fā)"舉例:讓用戶輸入用戶名和密碼如果用戶名正確則轉(zhuǎn)到首頁,如果錯誤則轉(zhuǎn)到錯誤頁面4:<jsp:include page="url" flush="true"/>:用于把其它的頁面合并到本頁面與<% include %>的區(qū)別:A:jsp:include是動作,而<% include %>是指令B:jsp:include是在運行時進行合并,而<

57、;% include %>在編譯時合并Jsp:inclulde->1.jsp->編譯->servlet |->合并2.jsp->編譯->servlet |<%include %>->1.jsp-|->合并->編譯2.jsp-|舉例:做一個JavaBean讓用戶輸入商品名稱,商品數(shù)量,折扣。然后根據(jù)商品名稱求出單價,根據(jù)數(shù)量與折扣求出應(yīng)付款第七章 Jsp表達式語言什么是jsp表達式語言:Jsp用于在網(wǎng)頁上顯示動態(tài)的內(nèi)容。通常需要在Jsp頁面中嵌入Java腳本以完成復(fù)雜的功能。但是大量的Java腳本使得Jsp頁面難以維護。Js

58、p表達式語言(Expression language)可用于在Jsp頁面上生成動態(tài)的內(nèi)容,并代替jsp腳本元素,以一種更簡潔方式來顯示內(nèi)容。Jsp表達式語言是從Jsp2.0規(guī)范開始支持的什么要使用Jsp表達式語言:可以更加簡潔的實現(xiàn)下面的三個功能1)簡潔訪問存儲對像(PageContext,Request,Session,Application)里面的值2)利用EL簡潔訪問從表單元素取過來的值取替request.getParameter方法3)JavaBean屬性的簡略記法Jsp表達式語言(EL)的格式:$表達式如何利用EL簡潔訪問存儲對像的值A(chǔ):先對比。頁面1.jsp中<%session.setAttribute("Uid","chen"); %><jsp:forward page="jsp2.jsp"

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論