国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

servlet的相關(guān)內(nèi)部處理機(jī)制

2019-11-18 16:21:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  在編寫Servlet 時(shí)需要用到兩個(gè)用于所有 Servlet 的基本軟件包:javax.servlet 和 javax.servlet.http。下面主要介紹javax.servlet.http提供的HTTP Servlet應(yīng)用編程接口。

    首先介紹一下java Servlet的基本方法。
•        init() 方法
    在Servlet的生命周期中,僅執(zhí)行一次 init() 方法,即在服務(wù)器裝入Servlet時(shí)執(zhí)行。通過(guò)配置服務(wù)器,可以設(shè)定在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問(wèn)Servlet 時(shí)裝入Servlet。無(wú)論有多少客戶機(jī)訪問(wèn)Servlet,都不會(huì)重復(fù)執(zhí)行 init()。
•        service() 方法
    service()方法是Servlet的主體部分。客戶對(duì)一個(gè)HttpServlet對(duì)象的每次請(qǐng)求都會(huì)調(diào)用該對(duì)象的service() 方法,并傳遞給這個(gè)方法一個(gè)"請(qǐng)求"對(duì)象和一個(gè)"響應(yīng)"對(duì)象作為參數(shù)。"請(qǐng)求"對(duì)象提供有關(guān)請(qǐng)求的信息,而"響應(yīng)"對(duì)象提供了一個(gè)將響應(yīng)信息返回給瀏覽器的通信途徑。javax.servlet 軟件包中的相關(guān)類為ServletRequest和ServletResponse,而javax.servlet.http 軟件包中的相關(guān)類為HttpServletRequest 和 HttpServletResponse。Servlet 通過(guò)這些對(duì)象與服務(wù)器通信并最終與客戶機(jī)通信。Servlet 能通過(guò)調(diào)用"請(qǐng)求"對(duì)象的方法獲知客戶機(jī)環(huán)境、服務(wù)器環(huán)境的信息和所有由客戶機(jī)提供的信息;通過(guò)調(diào)用"響應(yīng)"對(duì)象的方法,Servlet可以向客戶機(jī)發(fā)送響應(yīng)。

    HttpServlet中的service()方法默認(rèn)的服務(wù)功能是調(diào)用與 HTTP 請(qǐng)求的方法相應(yīng)的 do 功能。例如,如果 HTTP 請(qǐng)求方法為 GET,則默認(rèn)情況下就調(diào)用 doGet()。當(dāng)一個(gè)客戶通過(guò)Html表單發(fā)出一個(gè)HTTP POST請(qǐng)求時(shí),doPost()方法被調(diào)用。與POST請(qǐng)求相關(guān)的參數(shù)作為一個(gè)單獨(dú)的HTTP 請(qǐng)求從瀏覽器發(fā)送到服務(wù)器。當(dāng)需要修改服務(wù)器端的數(shù)據(jù)時(shí),應(yīng)該使用doPost()方法。

    servlet的響應(yīng)可以是下列幾種類型:
    •一個(gè)輸出流,瀏覽器根據(jù)它的內(nèi)容類型(如text/HTML)進(jìn)行解釋。
    •一個(gè)HTTP錯(cuò)誤響應(yīng),重定向到另一個(gè)URL、Servlet和jsp
•        destroy() 方法
    destroy() 方法僅執(zhí)行一次,即在服務(wù)器停止且卸載Servlet 時(shí)執(zhí)行該方法。當(dāng)服務(wù)器卸載 Servlet 時(shí),將在所有 service() 方法調(diào)用完成后,或在指定的時(shí)間間隔過(guò)后調(diào)用 destroy() 方法。一個(gè)Servlet 在運(yùn)行service() 方法時(shí)可能會(huì)產(chǎn)生其他的線程,因此在調(diào)用 destroy() 方法時(shí),必須確認(rèn)這些線程已終止或完成。
•        GetServletConfig()方法
    GetServletConfig()方法返回一個(gè) ServletConfig 對(duì)象,該對(duì)象用來(lái)返回初始化參數(shù)和ServletContext。ServletContext 接口提供有關(guān)Servlet 的環(huán)境信息。
•        GetServletInfo()方法
    GetServletInfo()方法是一個(gè)可選的方法,它提供有關(guān)Servlet 的信息,如作者、版本、版權(quán)。

    下面介紹編寫一個(gè)基本http Servlet的步驟。

    (1)引入相應(yīng)的包和類,包括:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
//繼承javax.servlet.http.HttpServlet
public class MyServlet extends HttpServlet{

    (2)實(shí)現(xiàn)service方法。

    Servlet的主要功能是接受從瀏覽器發(fā)送過(guò)來(lái)的HTTP請(qǐng)求(request),并返回HTTP響應(yīng)(response)。
這個(gè)工作是在service方法中完成的。service方法包括從request對(duì)象獲得客戶端數(shù)據(jù)和向response對(duì)象創(chuàng)建輸出。

    如果一個(gè)Servlet從javax.servlet.http.HttpServlet繼承,實(shí)現(xiàn)了doPost或doGet方法,那么這個(gè)Servlet只能對(duì)POST或GET做出響應(yīng)。如果開發(fā)人員想處理所有類型的請(qǐng)求(request),只要簡(jiǎn)單地實(shí)現(xiàn)service方法即可(但假如選擇實(shí)現(xiàn)service方法,則不必實(shí)現(xiàn)doPost或doGet方法,除非在service方法的開始調(diào)用super.service())。其中的差別如圖14-2所示。

圖14-2 doGet、doPost、service的區(qū)別

    HTTP Servlet規(guī)范描述了用來(lái)處理其他請(qǐng)求(request)類型的方法,所有這些方法都可以歸屬于service方法。所有的service 方法使用一樣的參數(shù)。HttpServletRequest提供關(guān)于請(qǐng)求(request)的信息,Servlet可以使用 HttpServletResponse 對(duì)HTTP客戶端做出響應(yīng)。

public void service(HttpServletRequest req,HttpServletResponse res)
throws IOException{
// 設(shè)置響應(yīng)內(nèi)容的類型
res.setContentType("text/html");
// 獲得java.io.PRintWriter對(duì)象的引用,用來(lái)輸出
PrintWriter out = res.getWriter();
// 使用PrintWriter對(duì)象的println()方法創(chuàng)建一些HTML代碼,例如
out.println("<html><head><title>Hello  World!</title></head>");
out.println("<body><h1>Hello World!</h1></body></html>");
……
}


    (3)編譯Servlet。
    從存放此Servlet源代碼文件的目錄編譯此Servlet到包含此Servlet的應(yīng)用中的 WEB-INF/classes目錄。如:
    javac -d /your_application_dir/WEB-INF/classes your_servlet.java

    (4)將此Servlet作為應(yīng)用的一部分部署。
    把程序編譯到指定目錄后還是沒(méi)有開啟這個(gè)服務(wù),我們必須對(duì)它進(jìn)行配置,在C:/bea/wlserver6.1/config/mydomain/applications/DefaultWebApp/WEB-INF下有一個(gè)web.xml文件,這個(gè)就是應(yīng)用程序的配置文件。這個(gè)文件的一般形式如下:

<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 1.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
  <!--chapter 8  java  servlets -->
  <servlet>
  <servlet-name>HelloWorld2</servlet-name>
  <servlet-class>examples.servlets.HelloWorld2</servlet-class>
  <init-param>
   <param-name>greeting</param-name>
   <param-value>welcome</param-value>
   </init-param>
   <init-param>
    <param-name>person</param-name>
    <param-value>weblogic developer</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
  <servlet-name>HelloWorld2</servlet-name>
  <url-pattern>/HelloWorld2/*</url-pattern>
  </servlet-mapping>  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
</web-app>


    其中servlet-name是Servlet的名字,servlet-class是在/WEB-INF/classes下存放class文件的相對(duì)路徑。
我們還可以在此文件中初始化參數(shù),形式如下:

<init-param>
<param-name>greeting</param-name>
<param-value>welcome</param-value>
</init-param>


    param-name是參數(shù)的名稱,在本例中是greeting;param-value是參數(shù)的值,在本例是welcome。我們可以以此形式初始化更多的參數(shù)。

<servlet-mapping>
<servlet-name>HelloWorld2</servlet-name>
<url-pattern>/HelloWorld2/*</url-pattern>
</servlet-mapping>


    這段代碼是Servlet名稱與url-pattern路徑的映射。根據(jù)這段代碼,HelloWorld2這個(gè)Servlet程序的URL路徑就是http://SERVER_ADDRESS:/HelloWorld2。

    (5)從瀏覽器訪問(wèn)Servlet。一般說(shuō)來(lái),調(diào)用Servlet的URL 取決于包含Servlet的Web應(yīng)用的名字和Web應(yīng)用部署描述中的Servlet映射的名字。請(qǐng)求(request)參數(shù)也可以是調(diào)用Servlet的URL的一部分,一般Servlet 的URL如以下模式:
    http://SERVER_ADDRESS:/your_web_application_name/ mapped_servlet_name? Parameter

(出處:http://m.survivalescaperooms.com)



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 梁山县| 咸宁市| 阿拉善左旗| 当涂县| 尉犁县| 拉孜县| 高州市| 祥云县| 兴化市| 旌德县| 锡林浩特市| 酉阳| 台山市| 东乡县| 上蔡县| 柏乡县| 印江| 含山县| 宜昌市| 孟村| 星子县| 宁南县| 安达市| 宾阳县| 通化市| 淮南市| 珲春市| 青田县| 赣州市| 香河县| 清原| 赫章县| 全南县| 浮山县| 博湖县| 大洼县| 大洼县| 秀山| 榆林市| 乐都县| 博湖县|