亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP數據交互(二)和Servlet基礎

2019-11-14 15:05:11
字體:
來源:轉載
供稿:網友

01.application原理與應用

 

01.application對象的作用域范圍是整個應用服務,而它在應用中所承擔的責任就類似于一個全局變量。只要服務啟動,則application對象就會存在。

 

02.在一個應用中只有一個application,每一個用戶都會共享這一個application對象。

 

03.通過統計網站訪問次數來講解application的用法

 

02.對象作用域

 

03.Cookie簡介

解析:cookie是Web服務器保存在客戶端的一系列文本信息,根據域名和端口號區分是否保存成一個文件,文件大小為4k。注意:http://localhost:8080/news 和http://localhost:8080/news/util會形成兩個cookie文件。

 

1. 什么是cookie

 

瀏覽器與WEB服務器之間是使用HTTP協議進行通信的,當某個用戶發出頁面請求時,WEB服務器只是簡單的進行響應,然后就關閉與該用戶的連接。因此當一個請求發送到WEB服務器時,無論其是否是第一次來訪,服務器都會把它當作第一次來對待,這樣的不好之處可想而知。為了彌補這個缺陷,Netscape開發出了cookie這個有效的工具來保存某個用戶的識別信息,因此人們昵稱為“小甜餅”。cookies是一種WEB服務器通過瀏覽器在訪問者的硬盤上存儲信息的手段:Netscape Navigator使用一個名為cookies.txt本地文件保存從所有站點接收的Cookie信息;而IE瀏覽器把Cookie信息保存在類似于C:/windows/cookies的目錄下。當用戶再次訪問某個站點時,服務端將要求瀏覽器查找并返回先前發送的Cookie信息,來識別這個用戶。

2.使用Cookie

解析:

 

 獲取指定key值cookie的核心代碼

   <%

Cookie[] cookies = request.getCookies();

if(cookies!=null){

for(int i=0;i<cookies.length;i++){

if(cookies[i].getName().equals("uname")){

   response.sendRedirect(path+"/welcome.jsp");

}

}

}

   %>

 

3.javaBean

   解析:從JavaBean的功能上可以分為封裝數據和封裝業務的JavaBean

   一個JavaBean至少符合以下條件

01.是一個公有類

02.屬性私有

03.有getter和setter方法

04.無參的公有構造

3.補充一下   session使用

TTP協議是無狀態的,即信息無法通過HTTP協議本身進傳遞。為了跟蹤用戶的操作狀態,asp應用SESSION對象。JSP使用一個叫HttpSession的對象實現同樣的功能。HTTPSession 是一個建立在cookies 和URL-rewriting上的高質量的界面。Session的信息保存在服務器端,Session的id保存在客戶機的cookie中。事實上,在許多服務器上,如果瀏覽器支持的話它們就使用cookies,但是如果不支持或廢除了的話就自動轉化為URL-rewriting,session自動為每個流程提供了方便地存儲信息的方法。

  Session一般在服務器上設置了一個30分鐘的過期時間,當客戶停止活動后自動失效。Session 中保存和檢索的信息不能是基本數據類型如 int, double等,而必須是java的相應的對象,如Integer, Double。

  Httpsession具有如下API:

  getId 此方法返回唯一的標識,這些標識為每個session而產生。當只有一個單一的值與一個session聯合時,或當日志信息與先前的sessions有關時,它被當作鍵名用。

  GetCreationTime 返回session被創建的時間。最小單位為千分之一秒。為得到一個對打印輸出很有用的值,可將此值傳給Date constructor 或者GregorianCalendar的方法setTimeInMillis。

  GetLastaccessedTime 返回session最后被客戶發送的時間。最小單位為千分之一秒。

  GetMaxInactiveInterval 返回總時間(秒),負值表示session永遠不會超時。

  getAttribute 取一個session相聯系的信息。(在jsp1.0中為 getValue)

  Integer item = (Integer) session.getAttrobute("item") //檢索出session的值并轉化為整型

  setAttribute 提供一個關鍵詞和一個值。會替換掉任何以前的值。(在jsp1.0中為putValue)

  session.setAttribute("ItemValue", itemName); // ItemValue 必須不是must簡單類型

  在應用中使用最多的是getAttribute和setAttribute?,F以一個簡單的例子來說明session的應用,  test1.jsp(信息寫入session),test2.jsp(從session讀出信息)。

 1 test1.jsp 2  3 <HTML> 4  5 <HEAD> 6  7 <TITLE> Document </TITLE> 8  9 </HEAD>10 11 <BODY BGCOLOR="#FFFFFF">12 session.setAttribute("str",new String(“this is test”));13 </BODY>14 15 </HTML>16 test2.jsp17 <HTML>18 19 <HEAD>20 <TITLE> New Document </TITLE>21 22 </HEAD>23 24 <BODY BGCOLOR="#FFFFFF">25 <%26 String ls_str=null;27 ls_str=(String)session.getAttribute("str");28 out.PRintln(“從session里取出的值為:”+ls_str);29 %>30 </BODY>31 32 </HTML> 

 

 

 

Servlet基礎

 

Onclass

 

只要能處理客戶端請求的類都可以看成Servlet。

 

00.HttpServletRequest  和ServletRequest區別?

 

解析: HttpServletRequest接口中方法更容易操作,而ServletRequest應用場景更廣一些(可以處理任何協議請求).

 

01.servlet和jsp并行技術

 

servlet是和jsp并行的兩套用于開發動態web網站的技術

 

02.簡述什么是Servlet?

 

解析:Servlet就是一個實現了特定接口或者父類的java類。

 

Servlet 是一個 Java程序,是在服務器上(Tomcat容器中)運行以處理客戶端請求并做出響應的程序.Servlet的職責就是接收客戶端的請求并且對請求作出響應.

 

03.實現Servlet三種方案:

 

 01.Servlet接口:5個方法

 

 init(){

 

   //初始化

 

 }

 

 service(){

 

    //處理請求

 

 }

 

//泥石流摧毀了整個村莊

 

 destory(){

 

  //銷毀

 

 }

 

 getServletConfig(){

 

   //獲取Servlet配置信息

 

 }

 

 getServletInfo(){

 

    //獲取Servlet相關信息,例如版本作者等。

 

 }

 

 5個方法:  init():初始化,只被執行一次

 

                Destory():tomcat關閉的時候執行,釋放資源,執行一次

 

                Service():處理客戶端請求,并且對客戶端請求作出相應 

 

                getServletConfig():獲取配置

 

                getServletInfo():版本等信息

 

 

 

 02.實現GenericServlet抽象類

 

 修改了Servlet類一定要重啟服務器,而修改了jsp頁面可以不重啟

 

 03.實現HttpServlet抽象類

 

 service():調度作用

 

//如果我們自己的Servlet類繼承的是HttpServlet抽象類,那么不用重寫父類的service(),service()方法只不過是起到一個調度的作用

 

 doXXX:doPost(HttpServletRequest request,HttpServletResponse response )  doGet()

04.手動實現自己的Servlet

01.Servlet就是運行在服務器端的能夠處理客戶端請求的一個java類,如果一個

普通類實現了Servlet接口或者是繼承自GenericServlet或者繼承自HttpServlet,那么該類就變成了一個Servlet

02.如果類實現的是Servlet接口,那么處理請求的就是service()方法

如果類繼承的是HttpServlet抽象類, 那么處理請求的是doGet()和doPost()方法,這里

service()只是調度的作用。

 

05.ServletContext解說

 

ServletContext我們可以將ServletContext看做是一個全局的變量,類似于jsp中的

 

appliction對象。

 

06.URI和URL

 

URI:統一資源標識符,抽象的資源標識方法。

 

URL:統一資源定位符,不僅僅標識一個資源,而且還指定了如何定位到該資源。

 

07.Servlet的生命周期

 

生命周期:

 

 在程序執行的某個特定時刻必然會執行的代碼

 

 出生:洗澡!!!!    20-30歲結婚      80歲死亡

08.修改servlet模板

如何偷懶??

請注意聽下面2分鐘

修改Serverlet的模板

 在common文件夾的插件文件夾(plugins)下找到

com.genuitec.eclipse.wizards_9.0.0.me201108091322.jar

08.如何使用Servlet實現轉發和重定向?

解析:和jsp中一模一樣

 

09.在servlet如何拿到Session對象并給里面set數據.

 

解析:request.getSession().setAttribute(name, value)

 

10.init()和destory()以及service()執行次數問題

 

解析:servlet中的init()和destory()只會被執行一次,客戶端每次訪問相應的Servlet類,都會調用一次service()                                                              (重點)

 

11.獲取servlet初始化參數

 

12.獲取Servlet上下文參數

 

獲取方案:

補充!

Servlet初始化參數:
Servlet初始化參數定義在web.xml中的一個servlet元素中,例如:
<servlet>
 <servlet-name>test</servlet-name>
 <servlet-class>com.bk.Test</servlet-class>
 <init-param>
  <param-name>default-time</param-name>
  <param-value>60</param-value>
 </init-param>
</servlet>
可以有若干個<init-param>對。

怎樣取得Servlet初始化參數?
A 單個參數值的獲取

通過ServletConfig接口的getInitParameter(java.lang.String name)方法。

getServletConfig()該方法定義在Servlet接口中,返回ServletConfig接口的引用。
所有的servlet都繼承了該方法。當容器實例化一個servlet之前,會從web.xml中讀取這個servlet的初始化參數,并把這些參數交給ServletConfig,然后在調用init()方法時,容器會傳送這個ServletConfig的引用到servlet。每個servlet都會有一個唯一的ServletConfig引用。一旦有了ServletConfig的引用就可以調用getInitParameter()方法來
取得我們在servlet中設置的初始化參數。

2 獲取方式:

public void service(ServletRequest req,ServletResponse res) throws

ServletException,IOException{
...  
     out.println("init parameters");
     Enumeration myEnum=getInitParameterNames();
     while(myEnum.hasMoreElements()){
        String name=(String)myEnum.nextElement();//取得參數名
        out.println(name+":"+getInitParameter(name));//獲取參數值
     }
...
}


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

上下文初始化參數:

上下文初始化參數與Servlet初始化參數類似,區別是上下文初始化參數對整個web應用而不是Servlet初

始化參數只對應一個servlet。
在web應用的整個生命周期中上下文初始化參數都存在,任意的servlet和jsp都可以隨時隨地的訪問它。
在web.xml中的配置例子如下:
<context-param>
 <param-name>default-time</param-name>
 <param-value>60</param-value>
</context-param>
上下文初始化參數對應于整個web應用,因此它不在某個servlet元素內。一個web應用有一個ServletContext,而一個servlet有一個ServletConfig。


怎樣取得上下文初始化參數?

servlet的ServletConfig對象擁有該servlet的ServletContext的一個引用,所以可這樣取得上下文初始化參數;
getServletConfig().getServletContext().getInitParameter()
也可以在servlet中直接調用getServletContext().getInitParameter(),兩者是等價的。

13.MVC模式的探討

mvc:model(模型),view(視圖)和 controller(控制器)

01.所有的請求都歸結到控制器(Controller),今天的Servlet充當控制器的角色

  只做解析請求(拆解request的各個屬性)并且給出響應(轉發確定交給哪一個jsp頁面去渲染視圖)

收藏的 

13.HTTP協議與狀態保持  

HTTP協議本身是無狀態的,這與HTTP協議本來的目的是相符的,客戶端只需要簡單的向服務器請求下載某些文件,無論是客戶端還是服務器都沒有必要記錄彼此過去的行為,每一次請求之間都是獨立的,好比一個顧客和一個自動售貨機或者一個普通的(非會員制)大賣場之間的關系一樣。  

  

然而聰明(或者貪心?)的人們很快發現如果能夠提供一些按需生成的動態信息會使web變得更加有用,就像給有線電視加上點播功能一樣。這種需求一方 面迫使HTML逐步添加了表單、腳本、DOM等客戶端行為,另一方面在服務器端則出現了CGI規范以響應客戶端的動態請求,作為傳輸載體的HTTP協議也 添加了文件上載、cookie這些特性。其中cookie的作用就是為了解決HTTP協議無狀態的缺陷所作出的努力。至于后來出現的session機制則 是又一種在客戶端與服務器之間保持狀態的解決方案。  

  

讓我們用幾個例子來描述一下cookie和session機制之間的區別與聯系。筆者曾經常去的一家咖啡店有喝5杯咖啡免費贈一杯咖啡的優惠,然而一次性消費5杯咖啡的機會微乎其微,這時就需要某種方式來記錄某位顧客的消費數量。想象一下其實也無外乎下面的幾種方案:  

1、該店的店員很厲害,能記住每位顧客的消費數量,只要顧客一走進咖啡店,店員就知道該怎么對待了。這種做法就是協議本身支持狀態。  

2、發給顧客一張卡片,上面記錄著消費的數量,一般還有個有效期限。每次消費時,如果顧客出示這張卡片,則此次消費就會與以前或以后的消費相聯系起來。這種做法就是在客戶端保持狀態。  

3、發給顧客一張會員卡,除了卡號之外什么信息也不紀錄,每次消費時,如果顧客出示該卡片,則店員在店里的紀錄本上找到這個卡號對應的紀錄添加一些消費信息。這種做法就是在服務器端保持狀態。  

  

由于HTTP協議是無狀態的,而出于種種考慮也不希望使之成為有狀態的,因此,后面兩種方案就成為現實的選擇。具體來說cookie機制采用的是在 客戶端保持狀態的方案,而session機制采用的是在服務器端保持狀態的方案。同時我們也看到,由于采用服務器端保持狀態的方案在客戶端也需要保存一個 標識,所以session機制可能需要借助于cookie機制來達到保存標識的目的,但實際上它還有其他選擇。  

14.網摘解讀之不借助cookie機制完成Session

Java Servlet API 中引用 Session 機制來追蹤客戶的狀態。Servlet API 中定義了 javax.servlet.http.HttpSession 接口,Servlet 容器必須實現這個接口。當一個 Session 開始時,Servlet 容器將創建一個 HttpSession 對象,Servlet 容器為 HttpSession 分配一個唯一標識符,稱為 Session ID。Servlet 容器將 Session ID 作為 Cookie 保存在客戶的瀏覽器中。每次客戶發出 HTTP 請求時,Servlet 容器可以從 HttpRequest 對象中讀取 Session ID,然后根據 Session ID 找到相應的 HttpSession 對象,從而獲取客戶的狀態信息。 

    當客戶端瀏覽器中禁止 Cookie,Servlet 容器無法從客戶端瀏覽器中取得作為 Cookie 的 Session ID,也就無法跟蹤客戶狀態。 

    Java Servlet API 中提出了跟蹤 Session 的另一種機制,如果客戶端瀏覽器不支持 Cookie,Servlet 容器可以重寫客戶請求的 URL,把 Session ID 添加到 URL 信息中。 

    HttpServletResponse 接口提供了重寫 URL 的方法:public java.lang.String encodeURL(java.lang.String url) 

   該方法的實現機制為: 

    ● 先判斷當前的 Web 組件是否啟用 Session,如果沒有啟用 Session,直接返回參數 url。 

    ● 再判斷客戶端瀏覽器是否支持 Cookie,如果支持 Cookie,直接返回參數 url;如果不支持 Cookie,就在參數 url 中加入 Session ID 信息,然后返回修改后的 url。 

    我們可以對網頁中的鏈接稍作修改,解決以上問題: 

    修改前: 

        <a href=“maillogin.jsp“> 

   修改后: 

        <a href=“<%=response.encodeURL(“maillogin.jsp“)%>“> 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线视频播放| 亚洲电影成人av99爱色| 精品亚洲aⅴ在线观看| 亚洲福利在线视频| 成人网在线免费观看| 日韩精品在线播放| 欧美激情伊人电影| 欧美成人精品xxx| 亚洲激情久久久| 色婷婷av一区二区三区久久| x99av成人免费| 午夜精品一区二区三区在线视| 国语对白做受69| 国产精品一区专区欧美日韩| 精品国产网站地址| 国产婷婷97碰碰久久人人蜜臀| 国产亚洲精品美女久久久久| 欧美国产亚洲精品久久久8v| 国产经典一区二区| 91在线国产电影| 中文字幕欧美视频在线| 国产欧美亚洲精品| 亚洲精品福利免费在线观看| 国产日韩在线观看av| 日韩一区二区三区xxxx| 26uuu日韩精品一区二区| 国产成人小视频在线观看| 日韩电影中文 亚洲精品乱码| 中文在线资源观看视频网站免费不卡| 精品无人区乱码1区2区3区在线| 欧美日韩国产中文精品字幕自在自线| 亚洲香蕉伊综合在人在线视看| 国产亚洲免费的视频看| 日韩中文字幕免费看| 欧美日韩美女视频| 亚洲欧美制服第一页| 中文字幕亚洲二区| 日韩免费在线电影| 国产精品日日做人人爱| 亚洲欧美日韩一区二区三区在线| 国产大片精品免费永久看nba| 久久精品影视伊人网| 国产免费一区二区三区香蕉精| 在线观看精品国产视频| 91久久综合亚洲鲁鲁五月天| 欧美巨乳美女视频| 久久免费视频在线观看| 欧美电影免费观看| 中日韩午夜理伦电影免费| 亚洲成人黄色网址| 亚洲精品福利资源站| 欧美日本精品在线| 中文字幕亚洲一区在线观看| 久久99青青精品免费观看| 欧美性xxxx在线播放| 欧美精品做受xxx性少妇| 日韩av网址在线观看| 福利二区91精品bt7086| 国产v综合v亚洲欧美久久| 欧美日韩成人在线视频| 欧美性生活大片免费观看网址| 久久视频在线免费观看| 国产裸体写真av一区二区| 欧美老女人xx| 欧美精品在线极品| 亚洲国产97在线精品一区| 欧美精品在线第一页| 伊人伊成久久人综合网站| 日本伊人精品一区二区三区介绍| 视频在线观看一区二区| 高清欧美性猛交xxxx黑人猛交| 欧美裸体xxxx| 日韩精品在线播放| 亚洲最大福利视频网| 欧美日韩性视频在线| xx视频.9999.com| 欧美日韩在线视频一区| 亚洲一区二区福利| 精品国产一区久久久| 国产精品免费一区豆花| 色综合色综合久久综合频道88| 色综合老司机第九色激情| 91热精品视频| 欧美激情亚洲激情| 久久久久久久激情视频| 国产玖玖精品视频| 日韩在线免费视频观看| 日韩精品免费视频| 国产欧美日韩中文字幕在线| 国产精品第一视频| 国产精品久久久久久久午夜| 成人欧美一区二区三区在线湿哒哒| 在线观看久久久久久| 日本国产高清不卡| 中文字幕最新精品| 亚洲一区二区中文字幕| 日韩理论片久久| 日韩电影免费在线观看中文字幕| 久久深夜福利免费观看| 插插插亚洲综合网| 欧美激情视频播放| 国产精品aaa| 日韩hd视频在线观看| www日韩中文字幕在线看| 亚洲天堂日韩电影| 欧美自拍视频在线| 日韩在线中文视频| 精品国产欧美一区二区三区成人| 色综合亚洲精品激情狠狠| 国产精彩精品视频| 亚洲久久久久久久久久| 国产成人精品一区| 亚洲天堂av在线免费观看| 亚洲欧美国产日韩中文字幕| 久久精品这里热有精品| 在线亚洲午夜片av大片| 久久人人爽人人爽人人片av高清| 视频在线观看一区二区| 欧美日韩一区二区三区| 亚洲欧美精品一区二区| 欧美成人免费小视频| 成人xxxx视频| 久久影视免费观看| 亚洲一区国产精品| 国产在线视频91| 在线看国产精品| 欧美裸体xxxx极品少妇软件| 国产精品入口日韩视频大尺度| 亚洲精品97久久| 色综合导航网站| 久久午夜a级毛片| 中文字幕v亚洲ⅴv天堂| 中文字幕一区日韩电影| 欧美日韩亚洲系列| 98精品国产高清在线xxxx天堂| 欧美视频免费在线观看| 日本高清久久天堂| 国产一区二区三区三区在线观看| 国产精品久久久久一区二区| 亚洲欧美在线一区二区| 国产成人精品一区二区| 91精品久久久久久| 久久色在线播放| 性欧美长视频免费观看不卡| 欧美成人在线影院| 人人澡人人澡人人看欧美| 欧美日韩国产一区中文午夜| 欧美黑人巨大xxx极品| 成人午夜高潮视频| 亚洲欧美另类在线观看| 欧美成人激情在线| 亚洲第一区在线观看| 久国内精品在线| 亚洲欧美国产另类| 亚洲一区免费网站| 欧美精品久久一区二区| 日韩av在线资源| 欧美电影在线播放| 亚洲精品美女久久久久| 懂色aⅴ精品一区二区三区蜜月| 成人久久久久久| 久久久精品欧美| 国产精品国产自产拍高清av水多| 欧洲日本亚洲国产区|