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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

9、據(jù)庫(kù)中去第三章 會(huì)話跟蹤簡(jiǎn)介在這一章里面我們將要學(xué)習(xí)以下幾點(diǎn)內(nèi)容:1:Servlet中頁(yè)面跳轉(zhuǎn)的方法2:Sevlet中session對(duì)像3:Serlvet中Cookie對(duì)像4:Serlvet上下文Servlet中頁(yè)面跳轉(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)頁(yè)的地址,sendRedirect顯示的是新網(wǎng)

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

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

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

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

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

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

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

17、tCookies();if (cookies!=null) /如果cookies不為空f(shuō)or (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 /為空,一定要?jiǎng)?chuàng)建cookie= new Cookie("Visted","1");cookie.setMaxAge(10000);response.addCookie(cookie); out.println("你共訪問(wèn)網(wǎng)"+cookie.getValue();4:在登錄時(shí),選擇自動(dòng)登錄,下

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

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

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

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

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

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

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

26、發(fā)信服務(wù)器->則發(fā)信人郵箱一定要是sina的郵箱,否則會(huì)出現(xiàn)錯(cuò)誤發(fā)送帶有附件的郵件具備知識(shí):要發(fā)送附件,必須有Multipart類。這個(gè)類用來(lái)負(fù)責(zé)管理附件,一個(gè)Multipart類同多個(gè)MimeBodyPart構(gòu)成。每一個(gè)MimeBodyPart就代表一個(gè)附件如果要發(fā)送附件,則"文本"也代表一個(gè)附件。文本是附件的第一個(gè)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("這是試驗(yàn)"); /=設(shè)置附件的正文= MimeBodyPart bp1=new MimeBodyPart();bp1.setText("正文");/=設(shè)置附件=MimeBodyPart bp2=new MimeBodyPart(); bp2.setDataHandler(new DataHan

29、dler(new FileDataSource("c:過(guò)濾器.ppt");bp2.setFileName(MimeUtility.encodeText("c:過(guò)濾器.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、器的主機(jī)名,一般是或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(); /得到一個(gè)Multipart,去讀出附件 p.getBodyPart(0).getContent().toString();得到郵件的文本/=第五章 Jsp簡(jiǎn)介Jsp概念:1:什么是JspJsp(Java Server Page)是一種Java服務(wù)器端技術(shù)。一個(gè)Jsp頁(yè)面包括三個(gè)方面的內(nèi)容Html,JavaScript,Jsp程序片斷2:如何

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

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

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

36、形式上與表達(dá)式的區(qū)別就是在<%.%>里面沒(méi)有"=",而且中間是一段Java代碼,不是表達(dá)式,每條語(yǔ)句要以分號(hào)結(jié)尾。舉例說(shuō)明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;%>說(shuō)明:1)聲明變量即可以在<%! %>只能

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

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

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

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

41、果顯示在表格中2)編寫一個(gè)頁(yè)面,讓用戶輸入兩個(gè)數(shù)和一個(gè)操作符,在另外一個(gè)頁(yè)面顯示計(jì)算的結(jié)果3)做一個(gè)民意調(diào)查頁(yè)面,來(lái)調(diào)查"在校大學(xué)生談戀愛(ài)",好,不好,不好說(shuō)三個(gè)選項(xiàng)一個(gè)頁(yè)面:顯示界面用來(lái)讓用戶進(jìn)行投票,另外一個(gè)頁(yè)面顯示投票的結(jié)果jtds連接Sql server4)使用Jsp實(shí)現(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隱式對(duì)像Jsp的隱式對(duì)像有以下幾個(gè):Aut對(duì)像:主要用來(lái)進(jìn)行輸出1)輸出字符串:out.println("字符串")2)輸出Java腳本:out.println("<script>alert('我是真的愛(ài)你');&

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

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

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

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

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

48、組件",提高了頁(yè)面的可維護(hù)性,和可復(fù)用性如何來(lái)編寫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; 說(shuō)明:1:在JavaBean中除了有set與get方法之外,還可以其它的方法2:在JavaBean的方法的變量大小寫要符合Java的命名規(guī)則:如果只有一個(gè)單詞,則全部小寫,如果一個(gè)變量名或方法由多個(gè)單詞構(gòu)成則除第一個(gè)單詞小寫外,其它的單詞第一個(gè)字母一律大寫比如:shopName 不能寫成 ShopName 或shopnamesetShopName 不能寫成 SetShopName或setShopName如何使用JavaBeanA:嵌入 java 代碼方式<

50、% page import="demo.BeanSum" %> 下邊就可以像在 java 語(yǔ)言中那樣用了: <% BeanSum demo=new TestBean(); demo.num1=10; /取屬性是一定要取小寫的num1,盡管定義時(shí)寫的是大寫demo.num2=20;out.println(demo.sum();%>這一種方式也就完全把JavaBean當(dāng)成了普通對(duì)像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()%> 注意這一個(gè)代碼要分開(kāi),因?yàn)檫@段代碼既不是實(shí)例化JavaBean又不是屬性。C:感覺(jué)用"jsp 標(biāo)記符方式"比起"嵌入 java 代碼方式"困難,那是因?yàn)闆](méi)有把JavaBean與表單元素結(jié)合起來(lái)D:通過(guò)<jsp:setProperty name="demo" property = " * " /> 能夠自動(dòng)地把上一個(gè)頁(yè)面提交過(guò)來(lái)的同名的表單元素的值賦給所有的屬性E:舉例:源頁(yè)面:<input name="num1" type="text"

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

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

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論