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

首頁 > 網站 > WEB開發 > 正文

servlet學習筆記(一)

2024-04-27 15:07:10
字體:
來源:轉載
供稿:網友

SERVLET入門(一)

參考:http://www.cnblogs.com/xdp-gacl/p/3760336.html 這個博主的知識點寫的非常棒而且細致,推薦新手入門的大家直接過去充能~

一.什么是servlet

servlet是按照servlet規范編寫的java類。它運行于支持java的應用服務器中,主要用于響應web(HTTP)方面的請求。

二.servlet的作用

servlet在服務器端運行,主要用于處理客戶端的請求。 web服務器習慣于處理靜態頁面,對于動態請求,一般交由一個幫助程序進行處理,再將處理后的靜態頁面返回給web服務器。servlet就是這樣的幫助程序。通常由瀏覽器向web容器發送HTTP請求,根據web容器中的web.xml文件,決定由具體的某個servlet來對其進行處理。

三.servlet生命周期

servlet生命周期指的是,從創建servlet實例后,servlet存在到銷毀的整個過程。 生命周期中主要有以下幾個階段: 1.實例化。servlet容器加載servlet類,并將.class 文件讀取到內存中,由servlet容器創建一個servlet實例。 2.初始化。servlet容器調用init()函數完成參數的初始化。 3.運行。當servlet容器接收到請求時,會根據請求創建ServletRequest和ServletResponse對象,并將其傳遞給調用的service()方法。service()方法通過request獲取請求的內容,并對其進行處理,將請求的結果封裝在response中。每個請求均在獨立的線程中運行。 4.銷毀。servlet容器調用destroy()方法,銷毀servlet對象,并釋放它占用的資源。

在一個生命周期中,init()方法和destroy()方法都只會被調用一次。而service方法執行的次數則取決于被客戶端訪問的次數。

四.使用MyEclipse建立一個基礎的servlet

1.新建一個web-PRoject,生成的目錄如下: web-project 2.在src目錄下,新建一個servlet文件 新建servlet1 新建servlet2 新建servlet3 那么,自動生成的servlet文件和在web.xml文件中的配置如下: AutoServlet文件:

package com.test1;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class AutoServlet extends HttpServlet { /** * Constructor of the object. */ public AutoServlet() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the GET method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here }}

對于每一個具體的程序塊的用途,MyEclipse自動生成時都附上了詳細的注釋。 web.xml文件:

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>AutoServlet</servlet-name> <servlet-class>com.test1.AutoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AutoServlet</servlet-name> <url-pattern>/servlet/AutoServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>

主要看<servlet></servlet><servlet-mapping></servlet-mapping> 這兩對標簽中的內容。在這里,配置了對特定servlet文件的映射關系。

注意: (1)兩個servlet-name必選相同; (2)默認的url-pattern為:/servlet/servlet-name

接下來,將這個web-project部署到tomcat上,啟動tomcat后,就可以在網頁上訪問這個servlet了。 網頁訪問servlet

訪問的地址為: http://localhost:8080/servlet-test/servlet/AutoServlet 也就是:"http://localhost:8080/" + web項目名稱+web.xml中配置的url-pattern

五.其他細節

1.servlet的url映射配置

由于客戶端是根據url來訪問web中的資源,因此,要想訪問一個servlet,就要把它映射到一個url地址上,這個工作,在web.xml中,由<servlet></servlet><servlet-mapping></servlet-mapping> 這兩對標簽來完成。 <servlet></servlet> 標簽用于注冊servlet,其中,servlet-name是servlet的名稱,servlet-class中寫servlet所在的完整類名。 <servlet-mapping></servlet-mapping> 標簽用于映射一個已注冊的servlet和它的對外訪問路徑。一個注冊的servlet可以有多個訪問路徑。 如:

<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>AutoServlet</servlet-name> <servlet-class>com.test1.AutoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AutoServlet</servlet-name> <url-pattern>/servlet/AutoServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AutoServlet</servlet-name> <url-pattern>/1.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AutoServlet</servlet-name> <url-pattern>/2.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AutoServlet</servlet-name> <url-pattern>/3.php</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AutoServlet</servlet-name> <url-pattern>/4.aspX</url-pattern> </servlet-mapping>

那么,使用地址: http://localhost:8080/servlet-test/servlet/AutoServlet http://localhost:8080/servlet-test/1.html http://localhost:8080/servlet-test/2.jsp http://localhost:8080/servlet-test/3.php http://localhost:8080/servlet-test/4.ASPX 都可以訪問同一servlet。

此外,還可以使用*通配符來匹配映射的url地址。 使用通配符時,只有兩種固定格式: 1.使用*.擴展名 2.使用正斜杠(/)開頭,并以/*結尾。 如: 對于上述例子中的servlet,在web.xml中配置

<servlet-mapping> <servlet-name>AutoServlet</servlet-name> <url-pattern>/servlet/AutoServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AutoServlet</servlet-name> <url-pattern>/find/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AutoServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>

那么,就可以使用: http://localhost:8080/servlet-test/find/aabbcc 或: http://localhost:8080/servlet-test/aabbcc.do 來訪問上述servlet (aabbcc可以由任意字符串代替)

對于多個注冊的servlet都使用了通配符的情況,在映射過程中,遵循那個更相似,就匹配到哪一個的原則

2.<load-on-startup>標簽

根據上面的知識點,可以知道,在處理客戶端的servlet請求時,首先需要有一個servlet實例。對于多次請求,僅創建一個實例,調用一次init()方法。每次請求過程中,servlet引擎將創建新的HttpServletRequest請求對象和HttpServletResponse響應對象,并將其作為參數傳遞給service(),service()再根據請求的內容,調用響應的doXXX方法,對請求進行處理。 在web.xml中配置<load-on-startup>,那么,在web應用啟動時,就會裝載并實例化servlet,并調用實例對象的init()方法。

<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>AutoServlet</servlet-name> <servlet-class>com.test1.AutoServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>

標簽中的數字,用于標記容器是否在啟動時就加載這個servlet,以及加載的優先級。 當數字為負數或是無指定值時,容器只在該servlet被選擇是才對它進行加載。 當數字為非負數是,表示容器在啟動時就加載這個servlet。數字越小,啟動這個servlet的優先級越高(如:0的優先級大于1)

3.缺省的servlet

當一個servlet的訪問路徑(url-pattern)配置為一個正斜杠(/)時,這個servlet就稱為web容器的缺省servlet。 即,凡是找不到對應的<servlet-mapping></servlet-mapping>的url請求,都將訪問該缺省servlet。

4.servlet線程安全

當多個客戶端并發訪問一個servlet時,web服務器就會為每一個訪問創建一個線程,每個線程分別調用servlet實例的service()方法。如果多個service()方法同時訪問同一個資源,就會導致線程安全問題。 線程安全問題只存在多個線程并發操作同一個資源的情況下,所以在編寫Servlet的時候,如果并發訪問某一個資源(變量,集合等),就會存在線程安全問題。 就之前學過的java基礎部分的知識點而言,可以使用線程鎖synchronized來解決線程問題.即,將可能產生線程安全問題的程序塊寫在

synchronized(this) { ....}

中。當有線程訪問該資源時,它就拿到了這把鎖。那么,如果有并發的線程同時訪問該資源,就必須等待上一個線程訪問完畢,將鎖釋放出來。 但是,在實際的應用中,使用servlet時,不可以使用該方式。針對線程安全問題,在servlet2.4之前,采用的方法是,讓servlet繼承Sun公司提供的標記接口:SingleThreadModel,這樣,這個servlet無論何時,都將單線程運行。 需要注意的是,這種方法的實質是產生多個Servlet實例對象,每個并發的線程分別對應一個實例對象。因此,這種方法并沒有真正解決多并發的線程安全性問題,在servlet2.4以后,已被標記為deprecated(過時)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美人与性动交| 欧美另类69精品久久久久9999| 欧美电影《睫毛膏》| 日韩欧美有码在线| 日本中文字幕久久看| 色综合久久久888| 懂色aⅴ精品一区二区三区蜜月| 久久免费视频网| 法国裸体一区二区| 欧美精品一本久久男人的天堂| 亚洲国产成人久久综合| 日韩美女在线看| 国产深夜精品福利| 欧美午夜影院在线视频| 国产精品啪视频| 精品中文字幕在线观看| 69av成年福利视频| 日韩女在线观看| 亚洲精品中文字幕有码专区| 亚洲欧美在线一区| 亚洲男人第一av网站| 久久天天躁日日躁| 亚洲自拍偷拍色片视频| 国产91精品久久久久久| 成人中心免费视频| 亚洲免费视频在线观看| 日韩午夜在线视频| 日韩在线视频导航| 中文字幕在线成人| 国产日韩中文字幕在线| 国产欧美va欧美va香蕉在| 日本一区二区三区在线播放| 国产不卡视频在线| 精品成人久久av| 91网站在线看| 一本色道久久88综合日韩精品| 国产精自产拍久久久久久蜜| 91系列在线观看| 欧美大荫蒂xxx| 色阁综合伊人av| 欧美性高跟鞋xxxxhd| 欧美日韩国产二区| 欧美性生交大片免网| 91嫩草在线视频| 韩曰欧美视频免费观看| 国产视频精品自拍| 色一情一乱一区二区| 国产欧美在线看| 亚洲黄色av女优在线观看| 91美女福利视频高清| 欧美综合在线第二页| 国产精品7m视频| 国产精品午夜视频| 亚洲天堂免费观看| 亚洲美女福利视频网站| 揄拍成人国产精品视频| 久久人91精品久久久久久不卡| 亚洲视频在线观看免费| 中文一区二区视频| 色悠久久久久综合先锋影音下载| 欧美日韩在线视频观看| 国产精品视频白浆免费视频| 国产日韩一区在线| 国产精品美女999| 国产精品 欧美在线| 国产精品一区二区在线| 亚洲欧洲国产一区| 欧美最顶级的aⅴ艳星| 亚洲精品98久久久久久中文字幕| 欧洲亚洲免费在线| 国产欧美精品久久久| 97视频在线观看播放| 日韩av123| 久久精品国产69国产精品亚洲| 欧美日韩激情视频8区| 亚洲天堂av在线播放| 欧美激情精品久久久久久久变态| 欧美激情一区二区三区在线视频观看| 国产成人精品日本亚洲| 亚洲国产精品高清久久久| 国模吧一区二区三区| 91丨九色丨国产在线| 亚洲自拍在线观看| 亚洲自拍小视频免费观看| www.精品av.com| 欧美国产日韩一区| 中文字幕日韩欧美精品在线观看| 欧美精品在线第一页| 日韩精品免费一线在线观看| 国产日韩欧美日韩| 久久精品亚洲94久久精品| 欧美成人精品h版在线观看| 日韩av在线网页| 欧美日韩精品在线播放| 亚洲a级在线观看| 欧美午夜视频在线观看| 国语自产精品视频在线看| 成人免费观看网址| 国产日韩在线亚洲字幕中文| 欧美日韩精品中文字幕| 欧美精品在线播放| 国产精品电影久久久久电影网| 日韩成人中文字幕在线观看| 亚洲一区二区三区成人在线视频精品| 日韩精品亚洲精品| 国产精品美女久久久久久免费| 国产亚洲在线播放| 国产精品视频男人的天堂| 亚洲国产日韩欧美在线99| 97视频在线观看免费高清完整版在线观看| 久久九九精品99国产精品| 国产免费久久av| 91国偷自产一区二区三区的观看方式| 另类视频在线观看| 亚洲娇小xxxx欧美娇小| 91精品国产乱码久久久久久久久| 国产精品91在线观看| 亚洲精品91美女久久久久久久| 亚洲精品av在线播放| 亚洲国产欧美久久| 精品av在线播放| 欧美激情一区二区三区久久久| 精品日本美女福利在线观看| 亚洲精品www久久久久久广东| 国产精品美腿一区在线看| 久久久女人电视剧免费播放下载| 欧美在线亚洲在线| 久久久999成人| 成人黄在线观看| 色av吧综合网| 97在线精品国自产拍中文| 97香蕉久久夜色精品国产| 亚洲国产成人精品女人久久久| 亚洲天堂男人天堂| www欧美xxxx| 日韩免费在线观看视频| 91精品国产777在线观看| 亚洲网在线观看| 国产精品久久久久久久久久三级| 色婷婷av一区二区三区在线观看| 成人日韩av在线| 懂色aⅴ精品一区二区三区蜜月| 久久在线精品视频| 隔壁老王国产在线精品| 欧洲成人午夜免费大片| 国产日韩欧美成人| 国产精品激情av在线播放| 国产精品一区二区av影院萌芽| 亚洲精品综合久久中文字幕| 中文字幕亚洲天堂| 久久久www成人免费精品| 国产v综合v亚洲欧美久久| 亚洲乱码国产乱码精品精| 国产欧美一区二区三区在线看| 日韩精品欧美国产精品忘忧草| 91av在线免费观看视频| 久久久亚洲精品视频| 国产精品视频在线观看| 国产精品视频午夜| 国产成人中文字幕| 亚洲美女中文字幕| 国产玖玖精品视频| 欧美专区中文字幕| 亚洲人成电影在线|