版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第12章JSP與Servlet技術(shù)主要內(nèi)容12.1JSP簡(jiǎn)介12.2JSP頁(yè)面元素12.3JSP內(nèi)置對(duì)象12.4Servlet12.5ServletAPI接口12.6開(kāi)發(fā)Servlet12.1JSP概念Java服務(wù)器頁(yè)面(JavaServerPage,JSP)以擴(kuò)展名.jsp保存在JavaServerPage里面使用Java編程語(yǔ)言和基礎(chǔ)類庫(kù)HTML用于表示頁(yè)面,而Java代碼用于訪問(wèn)動(dòng)態(tài)內(nèi)容,并有效控制動(dòng)態(tài)內(nèi)容的生成JSP概念簡(jiǎn)單jsp頁(yè)面舉例:<%@pagelanguage="java"import="java.util.*"pageEncoding="GBK"%><html><head><title>avceit</title></head><bodybgcolor="#ffffff"><%java.util.Datenow=newjava.util.Date();out.println("當(dāng)前時(shí)間是:"+now);%><h1>你好,這就是一個(gè)JSP頁(yè)面</h1></body></html>JSP執(zhí)行過(guò)程TomcatJSP執(zhí)行過(guò)程Jsp容器管理jsp頁(yè)面生命周期,分為兩個(gè)階段:轉(zhuǎn)換階段和執(zhí)行階段轉(zhuǎn)換階段當(dāng)有一個(gè)對(duì)jsp頁(yè)面的請(qǐng)求到來(lái)時(shí),jsp容器檢查jsp頁(yè)面的語(yǔ)法是否正確,將jsp頁(yè)面轉(zhuǎn)換為Servlet源文件,然后調(diào)用javac命令編譯Servlet源文件生成字節(jié)碼文件.執(zhí)行階段Servlet容器加載轉(zhuǎn)換后的Servlet類主要內(nèi)容12.1JSP簡(jiǎn)介12.2JSP頁(yè)面元素12.3JSP內(nèi)置對(duì)象12.4Servlet12.5ServletAPI接口12.6開(kāi)發(fā)Servlet12.2JSP頁(yè)面元素靜態(tài)內(nèi)容指令表達(dá)式Scriptlet<%Java代碼%><%=Java表達(dá)式%>HTML靜態(tài)文本以“<%@”開(kāi)始,以“%>”結(jié)束。比如:<%@includefile="
Filename"%>聲明動(dòng)作<%!函數(shù)或方法%>以“<jsp:動(dòng)作名”開(kāi)始,以“</jsp:動(dòng)作名>”結(jié)束比如:<jsp:includepage="Filename"/>注釋<!--這是注釋,但客戶端可以查看到--><%--這也是注釋,但客戶端不能查看到--%>腳本元素包含三個(gè)部分:聲明,腳本段,表達(dá)式聲明:用于聲明在其它腳本元素中可以使用的變量和方法腳本段:是一段java代碼表達(dá)式:java語(yǔ)言中完整的表達(dá)式聲明聲明以<%!開(kāi)始,以%>結(jié)束 <%!inti=0;%> <%! publicvoidmethod(){ } %>利用<%!%>聲明的變量,在jsp容器將jsp轉(zhuǎn)換為servlet時(shí)將作為servlet類的屬性,聲明的方法將成為servlet的方法腳本段在請(qǐng)求處理期間要執(zhí)行的java代碼段<% if(){}else{}%>在腳本段中可以聲明變量,并且在后面的腳本中可以使用該變量。容器轉(zhuǎn)換jsp頁(yè)面為servlet的時(shí)候,一次性被轉(zhuǎn)換為_(kāi)jspService()方法中的代碼表達(dá)式<%=表達(dá)式%>計(jì)算表達(dá)式的值插入到當(dāng)前流中<%=newjava.util.Date().toLocaleString()%>例:計(jì)數(shù)器<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%><html><head></head>
<body>
<%!
inti=0;%><%i++;%><p>您是第<%=i%>個(gè)訪問(wèn)本站的客戶<br></body></html>注意和以下代碼的區(qū)別:<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%><html><head></head><body>
<%
inti=0;%><%++i;%><p>您是第<%=i%>個(gè)訪問(wèn)本站的客戶<br></body></html>分析:1、這兩個(gè)代碼唯一的區(qū)別是聲明變量i的方式不同,前者是成員變量,后者是局部變量。2、這個(gè)計(jì)數(shù)器有計(jì)數(shù)漏洞,有可能出現(xiàn)計(jì)數(shù)不同步的可能,原因是可能會(huì)有若干人同時(shí)訪問(wèn)i的值,這樣大家獲取的是同一個(gè)i值,與事實(shí)不符。解決的辦法是synchronized加鎖。聲明方法舉例<%@pagelanguage="java"import="java.util.*"pageEncoding="GBK"%><html><head></head>
<body><%--聲明一個(gè)方法countpeople()--%><%!
intnumber=0;
synchronized
voidcountPeople(){number++;}%><%--調(diào)用countPeople()計(jì)算人數(shù)--%><%countPeople();%><p>您是第<%=number%>個(gè)訪問(wèn)本站的客戶</body></html>JSP指令元素<%@pagecontentType="text/html;charset=GBK"language="java"import="java.util.Calendar"%><%!StringgetHello(Stringname){return"Hi,"+name+"!";}%><%Calendarnow=Calendar.getInstance();%>JSPScriptletJSP指令page指令page指令作用于整個(gè)jsp頁(yè)面,定義了許多與頁(yè)面相關(guān)的屬性,這些屬性將規(guī)定和jsp容器通信時(shí)的約定。
語(yǔ)法:<%@pageattr1=“value”%attr2=“value”%>屬性值總是用單引號(hào)或雙引號(hào)括起來(lái)。如果一個(gè)屬性有多個(gè)值的時(shí)候,這些值用逗號(hào)分開(kāi)。例如:
<@pageimport=“java.util.*”,”java.io.*”%>page指令屬性屬性默認(rèn)值說(shuō)明languagejavaimport默認(rèn)不引入包import=”java.io.*,java.util.*”sessiontrue制定一個(gè)Http會(huì)話中這個(gè)頁(yè)面是否參與bufferBuffer=”64K”客戶輸出流緩沖模式autoFlashtrueinfo關(guān)于jsp頁(yè)面的信息isErrorPagefalseerrorPage定義該頁(yè)面出現(xiàn)異常時(shí)調(diào)用的頁(yè)面isThreadSafetruecontentType“text/html”;charset=iso8859-1pageEncodingpageEncoding=”ISO-8859-1”Include指令該指令的作用是將JSP頁(yè)面出現(xiàn)該指令的位置處?kù)o態(tài)的插入一個(gè)文件。其語(yǔ)法為:<%@includefile=“文件”%>例:<body><%@includefile="test.txt"%></body>JSP動(dòng)作元素JSP中一共制定了7種標(biāo)準(zhǔn)的“動(dòng)作元素”,分別是:<jsp:include><jsp:forward><jsp:plugin><jsp:param><jsp:useBean><jsp:getProperty><jsp:setProperty><jsp:include>動(dòng)作
include動(dòng)作標(biāo)簽格式為: <jsp:includepage=“文件的名字”/> <jsp:includepage=“文件的名字”><jsp:paramname=“”value=“”> </jsp:include>Include動(dòng)作標(biāo)簽的功能:告訴JSP頁(yè)面動(dòng)態(tài)包含一個(gè)文件,即JSP頁(yè)面運(yùn)行時(shí)才將文件加入。JSP頁(yè)面元素<html><head><title>JSP頁(yè)面構(gòu)成</title></head><!--這是注釋,但客戶端可以察看到--><%--這也是注釋,但客戶端不能察看到--%><body><h1align="center">JSP頁(yè)面構(gòu)成</h1><%=getHello("朋友")%><%if(now.get(Calendar.AM_PM)==Calendar.AM){%>早上好!<%}else{%>下午好!<%}%><br><br><jsp:includeflush="false"page="welcome.jsp"><jsp:paramname="str"value="參數(shù)"/></jsp:include></body></html><jsp:forward>動(dòng)作forward指令格式: <jsp:forwardpage=“要轉(zhuǎn)向的頁(yè)面”/><jsp:forwardpage=“要轉(zhuǎn)向的頁(yè)面”><jsp:paramname=“”value=“”/> </jsp:forward>forward指令功能:
從該指令處停止當(dāng)前頁(yè)面的繼續(xù)執(zhí)行,而轉(zhuǎn)向其他的一個(gè)jsp頁(yè)面。JSPexample1<html>
<head><title>demo1.jsp</title></head>
<body>
<%
if(choice.equals("manage")){
%>
<jsp:forwardpage="demo1.1.jsp">
<jsp:paramname="username"
value="<%=username%>"/>
<jsp:paramname="password"value="<%=password%>"/>
</jsp:forward>
<%}%>
</body>
</html>
JSPexample2-文件訪問(wèn)<%@pagecontentType="text/html;charset=GB2312"%><%@pagelanguage="java"%><%@pageimport="java.io.*"%><HTML><HEAD><TITLE>取得目錄中的文件</TITLE></HEAD><BODY><CENTER><FONTSIZE=5COLOR=blue>取得目錄中的文件</FONT></CENTER><BR><HR><BR></BODY></HTML><%//取得目前目錄的磁盤目錄Stringpath=request.getRealPath("/");Filed=newFile(path);Filelist[]=d.listFiles();%>在<Fontcolor=red><%=path%></Font>目錄下的文件有<BR><Fontcolor=blue><ul><%for(inti=0;i<list.length;i++){%><li><%=list[i].getName()%><BR><%}%></ul></Font>主要內(nèi)容12.1JSP簡(jiǎn)介12.2JSP頁(yè)面元素12.3JSP內(nèi)置對(duì)象12.4Servlet12.5ServletAPI接口12.6開(kāi)發(fā)Servlet12.3JSP內(nèi)置對(duì)象九種內(nèi)置對(duì)象request,response,out,session,application,cookie,config,page,exception。HttpServletRequest類的Request對(duì)象該對(duì)象封裝了用戶提交的信息,通過(guò)調(diào)用該對(duì)象的方法可以獲取用戶提交的信息。getParameter(StringstrTextName)獲取表單提交的信息。getRermoteAddr()獲取客戶的IP地址。getProtocol()獲取客戶使用的協(xié)議。
JSP內(nèi)置對(duì)象HttpServletResponse類的Respone對(duì)象對(duì)客戶的請(qǐng)求做出動(dòng)態(tài)的響應(yīng),向客戶端發(fā)送數(shù)據(jù)。(1)將客戶重新引導(dǎo)至另一個(gè)頁(yè)面使用response的sendRedirect(URL)方法實(shí)現(xiàn)客戶的重定向。例如:response.sendRedirect("index.jsp");(2)動(dòng)態(tài)響應(yīng)contentType屬性使用response對(duì)象的setContentType(Strings)方法來(lái)改變contentType的屬性值。格式:response.setContentType(Strings);
參數(shù)s可取text/html,application/x-msexcel,application/msword等HttpSession類的session對(duì)象從一個(gè)客戶打開(kāi)瀏覽器并連接到服務(wù)器開(kāi)始,到客戶關(guān)閉瀏覽器離開(kāi)這個(gè)服務(wù)器結(jié)束,被稱為一個(gè)會(huì)話。publicStringgetId():獲取Session對(duì)象編號(hào);publicvoidsetAttribute(Stringkey,Objectobj):將參數(shù)Object指定的對(duì)象obj添加到Session對(duì)象中,并為添加的對(duì)象指定一個(gè)索引關(guān)鍵字。publicObjectgetAttribute(Stringkey):獲取Session對(duì)象中含有關(guān)鍵字的對(duì)象。如:session.setAttribute(“username",“jack");JSP內(nèi)置對(duì)象JSP內(nèi)置對(duì)象ServletContex類的application對(duì)象服務(wù)器啟動(dòng)后產(chǎn)生了Application對(duì)象,直到服務(wù)器關(guān)閉。與Session對(duì)象不同的時(shí),所有客戶的Application對(duì)象都是同一個(gè),即所有客戶共享這個(gè)內(nèi)置的Application對(duì)象。setAttribute(Stringkey,Objectobj):getAttribute(Stringkey):JSPexample3-模擬登陸Login.jsp<%@pagecontentType="text/html;charset=GB2312"%><html><head><title>CH5-Login.jsp</title></head><body><h2>javax.servlet.http.HttpSession-session對(duì)象</h2><formaction=“Login.jsp”method="POST">LoginName:<inputtype="text"name="Name"><br>LoginPassword:<inputtype="text"name="Password"><br><inputtype="submit"value="Send"><br><form><%if(request.getParameter("Name")!=null&&request.getParameter("Password")!=null){StringName=request.getParameter("Name");StringPassword=request.getParameter("Password");if(Name.equals("mike")&&Password.equals("1234")){session.setAttribute("Login","OK");
response.sendRedirect("Member.jsp");}else{out.println("登錄錯(cuò)誤,請(qǐng)輸入正確名稱");}}%></body></html>JSPexample3-模擬登陸Member.jsp<%@pagecontentType="text/html;charset=GB2312"%><html><head><title>CH5-Member.jsp</title></head><body><h2>javax.servlet.http.HttpSession-session對(duì)象</h2><%StringLogin=(String)session.getAttribute("Login");if(Login!=null&&Login.equals("OK")){out.println("歡迎進(jìn)入");}else{out.println("請(qǐng)先登錄,謝謝");}%></body></html>主要內(nèi)容12.1JSP簡(jiǎn)介12.2JSP頁(yè)面元素12.3JSP內(nèi)置對(duì)象12.4Servlet12.5ServletAPI接口12.6開(kāi)發(fā)Servlet12.4什么是ServletServlet(java服務(wù)器小程序)是一個(gè)用Java編寫的程序,此程序在服務(wù)器上運(yùn)行以處理客戶端請(qǐng)求。是按照Servlet規(guī)范編寫的java類請(qǐng)求客戶端響應(yīng)Servlet運(yùn)行于服務(wù)器上ServletAPIServlet的框架是由兩個(gè)java包組成:javax.servlet和javax.servlet.httpjavax.servlet包中定義了所有的servlet類都必須實(shí)現(xiàn)的接口和類。Servlet的框架的核心是:javax.servlet.Servlet接口,所有的Servlet都必須實(shí)現(xiàn)這一接口.javax.servlet.http包中定義了采用HTTP協(xié)議通信的HttpServlet類ServletAPI創(chuàng)建自定義ServletpublicvoiddoGet(HttpServletRequestreq,HttpServletResponseres)publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres)用戶自定義的ServletGenericServletHttpServletServlet1.實(shí)現(xiàn)servlet接口2.繼承GenericServlet類3.繼承HttpServlet類,并重寫doGet()或doPost()方法實(shí)現(xiàn)對(duì)HTTP請(qǐng)求信息的動(dòng)態(tài)響應(yīng)。(在Web程序設(shè)計(jì)中,表單數(shù)據(jù)的提交方法常用有兩種:Post方法和Get方法)創(chuàng)建自定義Servlet有兩個(gè)參數(shù):HttpServletRequest和HttpServletResponse,這兩個(gè)類實(shí)現(xiàn)了ServletRequest接口和ServletResponse接口ServletRequest接口中封裝了客戶請(qǐng)求信息.如客戶請(qǐng)求方式,參數(shù)名,參數(shù)值,客戶端正在使用的協(xié)議,以及發(fā)出客戶請(qǐng)求的遠(yuǎn)程主機(jī)信息等ServletResponse接口為Servlet提供了返回響應(yīng)結(jié)果的方法HelloWordServlet編寫一個(gè)HelloWordServlet類Servlet的生命周期Servlet容器創(chuàng)建Servlet的一個(gè)實(shí)例Servlet的生命周期就是指創(chuàng)建Servlet實(shí)例之后其存在的時(shí)間以及何時(shí)消失生命周期的3個(gè)方法為:init()service()destroy()Servlet的生命周期生命周期的各個(gè)階段為:實(shí)例化Servlet容器創(chuàng)建Servlet的實(shí)例初始化該容器調(diào)用init()方法服務(wù)如果請(qǐng)求Servlet,則容器調(diào)用service()方法銷毀實(shí)例之前調(diào)用destroy()方法銷毀不可用銷毀實(shí)例并標(biāo)記為垃圾收集Service方法會(huì)自動(dòng)根據(jù)請(qǐng)求的方式,調(diào)用doGet或者doPost方法,如果Service方法被重寫,則doGet或者doPost方法失效部署、運(yùn)行HelloWorldServlet在web.xml中部署Servlet后才能夠使用Servlet在瀏覽器中輸入,“http://localhost:8080/HelloWordServlet”,主要內(nèi)容12.1JSP簡(jiǎn)介12.2JSP頁(yè)面元素12.3JSP內(nèi)置對(duì)象12.4Servlet12.5ServletAPI接口12.6開(kāi)發(fā)Servlet12.5ServletAPI接口目的類、接口Servlet實(shí)現(xiàn)javax.servlet.Servlet,javax.servlet.SingleThreadModeljavax.servlet.GenericServlet,javax.servlet.http.HttpServletServlet配置javax.servlet.ServletConfigServlet異常javax.servlet.ServletException,javax.servlet.UnavailableException請(qǐng)求和應(yīng)答javax.servlet.ServletRequest,javax.servlet.ServletResponsejavax.servlet.ServletInputStream,javax.servlet.ServletOutputStreamjavax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse會(huì)話跟蹤javax.servlet.http.HttpSession,javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionBindingEventServlet上下文javax.servlet.ServletContextServlet協(xié)作javax.servlet.RequestDispatcher其他javax.servlet.http.Cookie,javax.servlet.http.HttpUtils一個(gè)簡(jiǎn)單的JSP+Servlet實(shí)例<html>
<head>
<title>Sayhi.html</title>
<metahttp-equiv=“Content-Type”content=“text/html;charset=UTF-8”>
</head>
<body>
<h2>Servlet范例程序</h2>
<formname=“Sayhi”Method=“Post”action=“/myapp/Sayhi”>
<p>請(qǐng)?jiān)L問(wèn)者輸入姓名:<inputtype="text"name="Name"size="30"></p><inputtype="submit"value="提交">
<inputtype="reset"value="清除">
</form>
</body>
</html>importjavax.servlet.*;importjavax.servlet.http.*;importjava.io.*;publicclassSayhiextendsHttpServlet{publicvoidinit(ServletConfigconfig)throwsServletException{
super.init(config);
}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType(“text/html;charset=UTF-8”);
PrintWriterout=response.getWriter();
request.setCharacterEncoding(“UTF-8”);
StringName=request.getParameter(“Name”);
out.println(“<html>”);
out.println(“<head><title>Sayhi</title></head>”);
out.println(“<body>”);
out.println(“Hi”+Name);
out.println(“</body>”);
out.println(“</html>”);
out.close();
//RequestDispatcherrd=request.getRequestDispatcher("userlist.jsp");//request.setAttribute(“Name“,"hello“+Name);
//rd.forward(request,response);}}一個(gè)簡(jiǎn)單的JSP+Servlet實(shí)例一個(gè)簡(jiǎn)單的JSP+Servlet實(shí)例<?xmlversion="1.0"encoding="ISO-8859-1"?>
<web-appxmlns="/xml/ns/j2ee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>Sayhi</servlet-name>
<servlet-class>Sayhi</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Sayhi</servlet-name>
<url-pattern>/Sayhi</url-pattern>
</servlet-mapping>
</web-app>
HttpSession使用實(shí)例importjav
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度公路建設(shè)項(xiàng)目承包墊資合同樣本3篇
- 建設(shè)工程材料供應(yīng)合同
- 山西省二手車買賣合同
- 2025年度個(gè)人版權(quán)使用合同范本3篇
- 23年-24年項(xiàng)目安全培訓(xùn)考試題及答案【奪冠】
- 2023-2024年項(xiàng)目部安全管理人員安全培訓(xùn)考試題及完整答案(名校卷)
- 2023-2024年企業(yè)主要負(fù)責(zé)人安全培訓(xùn)考試題含答案AB卷
- 23年-24年項(xiàng)目安全培訓(xùn)考試題附答案【鞏固】
- 2024年項(xiàng)目安全培訓(xùn)考試題附參考答案(奪分金卷)
- 2024項(xiàng)目部安全管理人員安全培訓(xùn)考試題含答案【突破訓(xùn)練】
- 泵站運(yùn)行管理現(xiàn)狀改善措施
- 2024屆武漢市部分學(xué)校中考一模數(shù)學(xué)試題含解析
- SYT 0447-2014《 埋地鋼制管道環(huán)氧煤瀝青防腐層技術(shù)標(biāo)準(zhǔn)》
- 第19章 一次函數(shù) 單元整體教學(xué)設(shè)計(jì) 【 學(xué)情分析指導(dǎo) 】 人教版八年級(jí)數(shù)學(xué)下冊(cè)
- 浙教版七年級(jí)下冊(cè)科學(xué)全冊(cè)課件
- 弧度制及弧度制與角度制的換算
- GB/T 33322-2016橡膠增塑劑芳香基礦物油
- 瓦楞紙箱計(jì)算公式測(cè)量方法
- 江蘇省中等職業(yè)學(xué)校學(xué)業(yè)水平考試商務(wù)營(yíng)銷類(營(yíng)銷方向)技能考試測(cè)試題
- DB32-T 4004-2021水質(zhì) 17種全氟化合物的測(cè)定 高效液相色譜串聯(lián)質(zhì)譜法-(高清現(xiàn)行)
- DB15T 2724-2022 羊糞污收集處理技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論