java課件 第12章 JSP與Servlet技術(共十套)_第1頁
java課件 第12章 JSP與Servlet技術(共十套)_第2頁
java課件 第12章 JSP與Servlet技術(共十套)_第3頁
java課件 第12章 JSP與Servlet技術(共十套)_第4頁
java課件 第12章 JSP與Servlet技術(共十套)_第5頁
已閱讀5頁,還剩51頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第12章JSP與Servlet技術主要內容12.1JSP簡介12.2JSP頁面元素12.3JSP內置對象12.4Servlet12.5ServletAPI接口12.6開發Servlet12.1JSP概念Java服務器頁面(JavaServerPage,JSP)以擴展名.jsp保存在JavaServerPage里面使用Java編程語言和基礎類庫HTML用于表示頁面,而Java代碼用于訪問動態內容,并有效控制動態內容的生成JSP概念簡單jsp頁面舉例:<%@pagelanguage="java"import="java.util.*"pageEncoding="GBK"%><html><head><title>avceit</title></head><bodybgcolor="#ffffff"><%java.util.Datenow=newjava.util.Date();out.println("當前時間是:"+now);%><h1>你好,這就是一個JSP頁面</h1></body></html>JSP執行過程TomcatJSP執行過程Jsp容器管理jsp頁面生命周期,分為兩個階段:轉換階段和執行階段轉換階段當有一個對jsp頁面的請求到來時,jsp容器檢查jsp頁面的語法是否正確,將jsp頁面轉換為Servlet源文件,然后調用javac命令編譯Servlet源文件生成字節碼文件.執行階段Servlet容器加載轉換后的Servlet類主要內容12.1JSP簡介12.2JSP頁面元素12.3JSP內置對象12.4Servlet12.5ServletAPI接口12.6開發Servlet12.2JSP頁面元素靜態內容指令表達式Scriptlet<%Java代碼%><%=Java表達式%>HTML靜態文本以“<%@”開始,以“%>”結束。比如:<%@includefile="

Filename"%>聲明動作<%!函數或方法%>以“<jsp:動作名”開始,以“</jsp:動作名>”結束比如:<jsp:includepage="Filename"/>注釋<!--這是注釋,但客戶端可以查看到--><%--這也是注釋,但客戶端不能查看到--%>腳本元素包含三個部分:聲明,腳本段,表達式聲明:用于聲明在其它腳本元素中可以使用的變量和方法腳本段:是一段java代碼表達式:java語言中完整的表達式聲明聲明以<%!開始,以%>結束 <%!inti=0;%> <%! publicvoidmethod(){ } %>利用<%!%>聲明的變量,在jsp容器將jsp轉換為servlet時將作為servlet類的屬性,聲明的方法將成為servlet的方法腳本段在請求處理期間要執行的java代碼段<% if(){}else{}%>在腳本段中可以聲明變量,并且在后面的腳本中可以使用該變量。容器轉換jsp頁面為servlet的時候,一次性被轉換為_jspService()方法中的代碼表達式<%=表達式%>計算表達式的值插入到當前流中<%=newjava.util.Date().toLocaleString()%>例:計數器<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%><html><head></head>

<body>

<%!

inti=0;%><%i++;%><p>您是第<%=i%>個訪問本站的客戶<br></body></html>注意和以下代碼的區別:<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%><html><head></head><body>

<%

inti=0;%><%++i;%><p>您是第<%=i%>個訪問本站的客戶<br></body></html>分析:1、這兩個代碼唯一的區別是聲明變量i的方式不同,前者是成員變量,后者是局部變量。2、這個計數器有計數漏洞,有可能出現計數不同步的可能,原因是可能會有若干人同時訪問i的值,這樣大家獲取的是同一個i值,與事實不符。解決的辦法是synchronized加鎖。聲明方法舉例<%@pagelanguage="java"import="java.util.*"pageEncoding="GBK"%><html><head></head>

<body><%--聲明一個方法countpeople()--%><%!

intnumber=0;

synchronized

voidcountPeople(){number++;}%><%--調用countPeople()計算人數--%><%countPeople();%><p>您是第<%=number%>個訪問本站的客戶</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指令作用于整個jsp頁面,定義了許多與頁面相關的屬性,這些屬性將規定和jsp容器通信時的約定。

語法:<%@pageattr1=“value”%attr2=“value”%>屬性值總是用單引號或雙引號括起來。如果一個屬性有多個值的時候,這些值用逗號分開。例如:

<@pageimport=“java.util.*”,”java.io.*”%>page指令屬性屬性默認值說明languagejavaimport默認不引入包import=”java.io.*,java.util.*”sessiontrue制定一個Http會話中這個頁面是否參與bufferBuffer=”64K”客戶輸出流緩沖模式autoFlashtrueinfo關于jsp頁面的信息isErrorPagefalseerrorPage定義該頁面出現異常時調用的頁面isThreadSafetruecontentType“text/html”;charset=iso8859-1pageEncodingpageEncoding=”ISO-8859-1”Include指令該指令的作用是將JSP頁面出現該指令的位置處靜態的插入一個文件。其語法為:<%@includefile=“文件”%>例:<body><%@includefile="test.txt"%></body>JSP動作元素JSP中一共制定了7種標準的“動作元素”,分別是:<jsp:include><jsp:forward><jsp:plugin><jsp:param><jsp:useBean><jsp:getProperty><jsp:setProperty><jsp:include>動作

include動作標簽格式為: <jsp:includepage=“文件的名字”/> <jsp:includepage=“文件的名字”><jsp:paramname=“”value=“”> </jsp:include>Include動作標簽的功能:告訴JSP頁面動態包含一個文件,即JSP頁面運行時才將文件加入。JSP頁面元素<html><head><title>JSP頁面構成</title></head><!--這是注釋,但客戶端可以察看到--><%--這也是注釋,但客戶端不能察看到--%><body><h1align="center">JSP頁面構成</h1><%=getHello("朋友")%><%if(now.get(Calendar.AM_PM)==Calendar.AM){%>早上好!<%}else{%>下午好!<%}%><br><br><jsp:includeflush="false"page="welcome.jsp"><jsp:paramname="str"value="參數"/></jsp:include></body></html><jsp:forward>動作forward指令格式: <jsp:forwardpage=“要轉向的頁面”/><jsp:forwardpage=“要轉向的頁面”><jsp:paramname=“”value=“”/> </jsp:forward>forward指令功能:

從該指令處停止當前頁面的繼續執行,而轉向其他的一個jsp頁面。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-文件訪問<%@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>主要內容12.1JSP簡介12.2JSP頁面元素12.3JSP內置對象12.4Servlet12.5ServletAPI接口12.6開發Servlet12.3JSP內置對象九種內置對象request,response,out,session,application,cookie,config,page,exception。HttpServletRequest類的Request對象該對象封裝了用戶提交的信息,通過調用該對象的方法可以獲取用戶提交的信息。getParameter(StringstrTextName)獲取表單提交的信息。getRermoteAddr()獲取客戶的IP地址。getProtocol()獲取客戶使用的協議。

JSP內置對象HttpServletResponse類的Respone對象對客戶的請求做出動態的響應,向客戶端發送數據。(1)將客戶重新引導至另一個頁面使用response的sendRedirect(URL)方法實現客戶的重定向。例如:response.sendRedirect("index.jsp");(2)動態響應contentType屬性使用response對象的setContentType(Strings)方法來改變contentType的屬性值。格式:response.setContentType(Strings);

參數s可取text/html,application/x-msexcel,application/msword等HttpSession類的session對象從一個客戶打開瀏覽器并連接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱為一個會話。publicStringgetId():獲取Session對象編號;publicvoidsetAttribute(Stringkey,Objectobj):將參數Object指定的對象obj添加到Session對象中,并為添加的對象指定一個索引關鍵字。publicObjectgetAttribute(Stringkey):獲取Session對象中含有關鍵字的對象。如:session.setAttribute(“username",“jack");JSP內置對象JSP內置對象ServletContex類的application對象服務器啟動后產生了Application對象,直到服務器關閉。與Session對象不同的時,所有客戶的Application對象都是同一個,即所有客戶共享這個內置的Application對象。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對象</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("登錄錯誤,請輸入正確名稱");}}%></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對象</h2><%StringLogin=(String)session.getAttribute("Login");if(Login!=null&&Login.equals("OK")){out.println("歡迎進入");}else{out.println("請先登錄,謝謝");}%></body></html>主要內容12.1JSP簡介12.2JSP頁面元素12.3JSP內置對象12.4Servlet12.5ServletAPI接口12.6開發Servlet12.4什么是ServletServlet(java服務器小程序)是一個用Java編寫的程序,此程序在服務器上運行以處理客戶端請求。是按照Servlet規范編寫的java類請求客戶端響應Servlet運行于服務器上ServletAPIServlet的框架是由兩個java包組成:javax.servlet和javax.servlet.httpjavax.servlet包中定義了所有的servlet類都必須實現的接口和類。Servlet的框架的核心是:javax.servlet.Servlet接口,所有的Servlet都必須實現這一接口.javax.servlet.http包中定義了采用HTTP協議通信的HttpServlet類ServletAPI創建自定義ServletpublicvoiddoGet(HttpServletRequestreq,HttpServletResponseres)publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres)用戶自定義的ServletGenericServletHttpServletServlet1.實現servlet接口2.繼承GenericServlet類3.繼承HttpServlet類,并重寫doGet()或doPost()方法實現對HTTP請求信息的動態響應。(在Web程序設計中,表單數據的提交方法常用有兩種:Post方法和Get方法)創建自定義Servlet有兩個參數:HttpServletRequest和HttpServletResponse,這兩個類實現了ServletRequest接口和ServletResponse接口ServletRequest接口中封裝了客戶請求信息.如客戶請求方式,參數名,參數值,客戶端正在使用的協議,以及發出客戶請求的遠程主機信息等ServletResponse接口為Servlet提供了返回響應結果的方法HelloWordServlet編寫一個HelloWordServlet類Servlet的生命周期Servlet容器創建Servlet的一個實例Servlet的生命周期就是指創建Servlet實例之后其存在的時間以及何時消失生命周期的3個方法為:init()service()destroy()Servlet的生命周期生命周期的各個階段為:實例化Servlet容器創建Servlet的實例初始化該容器調用init()方法服務如果請求Servlet,則容器調用service()方法銷毀實例之前調用destroy()方法銷毀不可用銷毀實例并標記為垃圾收集Service方法會自動根據請求的方式,調用doGet或者doPost方法,如果Service方法被重寫,則doGet或者doPost方法失效部署、運行HelloWorldServlet在web.xml中部署Servlet后才能夠使用Servlet在瀏覽器中輸入,“http://localhost:8080/HelloWordServlet”,主要內容12.1JSP簡介12.2JSP頁面元素12.3JSP內置對象12.4Servlet12.5ServletAPI接口12.6開發Servlet12.5ServletAPI接口目的類、接口Servlet實現javax.servlet.Servlet,javax.servlet.SingleThreadModeljavax.servlet.GenericServlet,javax.servlet.http.HttpServletServlet配置javax.servlet.ServletConfigServlet異常javax.servlet.ServletException,javax.servlet.UnavailableException請求和應答javax.servlet.ServletRequest,javax.servlet.ServletResponsejavax.servlet.ServletInputStream,javax.servlet.ServletOutputStreamjavax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse會話跟蹤javax.servlet.http.HttpSession,javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionBindingEventServlet上下文javax.servlet.ServletContextServlet協作javax.servlet.RequestDispatcher其他javax.servlet.http.Cookie,javax.servlet.http.HttpUtils一個簡單的JSP+Servlet實例<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>請訪問者輸入姓名:<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);}}一個簡單的JSP+Servlet實例一個簡單的JSP+Servlet實例<?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使用實例importjav

溫馨提示

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

評論

0/150

提交評論