亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java Web編程之Servlet技術(shù)詳解

 更新時(shí)間:2016年05月05日 09:06:33   作者:阮一峰 酷殼  
這篇文章主要為大家詳細(xì)介紹了Java Web編程之Servlet技術(shù),Servlet就是一種實(shí)現(xiàn)了Servlet接口的類,它由Web容器(Tomcat/Jetty等)負(fù)責(zé)調(diào)用并創(chuàng)建,用于接收和響應(yīng)用戶請(qǐng)求,感興趣的小伙伴們可以參考一下

Java Web編程之Servlet技術(shù),知多少?

1、Servlet基礎(chǔ)
  針對(duì)Servlet技術(shù)開(kāi)發(fā),Sun公司提供了一些列接口和類,其中最重要的是javax.servlet.Servlet接口,兩個(gè)重要的包是javax.servlet和javax.servlet.http,Servlet就是一種實(shí)現(xiàn)了Servlet接口的類,它由Web容器(Tomcat/Jetty等)負(fù)責(zé)調(diào)用并創(chuàng)建,用于接收和響應(yīng)用戶請(qǐng)求。Servlet接口中定義了5個(gè)抽象方法:

Servlet頂層類結(jié)構(gòu)如下所示:

2、第一個(gè)Servlet程序

新建一個(gè)Java Web工程,然后新建Hello類,Hello.java源碼如下:

package zzz;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Hello extends HttpServlet {
 @Override
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
  // 設(shè)置響應(yīng)消息編碼
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  out.println("Hello World");
 }
 
 @Override
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  this.doGet(request, response);
 }
}


配置文件web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 <display-name>zzz</display-name>

 <servlet> <!-- 注冊(cè)Servlet -->
  <servlet-name>Hello</servlet-name> <!-- 指定Servlet名稱 -->
  <servlet-class>zzz.Hello</servlet-class> <!-- 指定Servlet完整類名 -->
 </servlet>
 <servlet-mapping> <!-- 映射Servlet對(duì)外訪問(wèn)路徑 -->
  <servlet-name>Hello</servlet-name> <!-- 指定Servlet名稱 -->
  <url-pattern>/hello</url-pattern> <!-- 指定訪問(wèn)Servlet的虛擬路徑 -->
 </servlet-mapping>
</web-app>


啟動(dòng)運(yùn)行瀏覽器顯示如下:

3、Servlet生命周期

Servlet生命周期大致分為3個(gè)階段,初始化階段、運(yùn)行階段銷毀階段。以下是各個(gè)階段詳細(xì)說(shuō)明:

初始化階段:客戶端向Servlet容器發(fā)出請(qǐng)求訪問(wèn)Servlet時(shí),容器首先解析請(qǐng)求,查看內(nèi)存中是否有該Servlet對(duì)象,如果有直接使用;否則創(chuàng)建該Servlet對(duì)象,然后調(diào)用init()方法,注意,Servlet整個(gè)聲明周期中,init()只會(huì)調(diào)用一次
運(yùn)行階段:這個(gè)是Servlet最重要的階段,此階段容器會(huì)構(gòu)造一個(gè)ServletRequest和ServletResponse對(duì)象作為參數(shù)傳遞到Servlet的service()方法中。對(duì)于Servlet的每一次訪問(wèn),Servlet容器都會(huì)調(diào)用一次service()方法,service()方法在Servlet整個(gè)生命周期中會(huì)被調(diào)用多次
銷毀階段:當(dāng)服務(wù)器關(guān)閉或者Web應(yīng)用被移除出容器時(shí),會(huì)進(jìn)入到此階段,此時(shí)會(huì)調(diào)用destroy()方法,整個(gè)生命周期中destroy()方法只會(huì)被調(diào)用一次
  在客戶端首次訪問(wèn)Servlet時(shí),容器會(huì)創(chuàng)建該Servlet對(duì)象,但是有時(shí)希望Servlet對(duì)象在Tomcat啟動(dòng)時(shí)跟隨啟動(dòng),這怎么處理呢?此時(shí),只需要在web.xml中使用<load-on-startup>元素即可,示例配置如下:

<servlet>
  <servlet-name>Hello</servlet-name>
  <servlet-class>zzz.Hello</servlet-class>
 <!-- 自動(dòng)加載servlet程序 -->
 <load-on-startup>1</load-on-startup> 
 </servlet>
 <servlet-mapping>
  <servlet-name>Hello</servlet-name>
  <url-pattern>/hello</url-pattern>
 </servlet-mapping>

4、ServletConfig和ServletContext

ServletConfig接口
  Servlet運(yùn)行期間,如果需要一些輔助信息,例如文件編碼、使用Servlet的公司等,這些信息可以在web.xml中使用<init-param>元素進(jìn)行配置,當(dāng)Tomcat初始化一個(gè)Servlet時(shí),會(huì)將該Servlet配置信息封裝成一個(gè)ServletConfig對(duì)象通過(guò)init(ServletConfig config)傳遞到Servlet。ServletConfig定義了一系列獲取配置信息的方法:

接下來(lái)以getInitParameter()為例,講解該方法使用示例:

web.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 <display-name>zzz</display-name>

 <servlet>
  <servlet-name>Hello</servlet-name>
  <servlet-class>zzz.Hello</servlet-class>
  <init-param>
   <param-name>company</param-name>
   <param-value>dahua</param-value>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>Hello</servlet-name>
  <url-pattern>/hello</url-pattern>
 </servlet-mapping>
</web-app>

Hello.java文件如下:

package zzz;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Hello extends HttpServlet {
 @Override
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
  // 設(shè)置響應(yīng)消息編碼
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  
  ServletConfig config = this.getServletConfig();
  String param = config.getInitParameter("company");
  out.println("company: " + param);
 }
 
 @Override
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  this.doGet(request, response);
 }
} 

ServletContext接口
  當(dāng)Servlet容器啟動(dòng)時(shí),會(huì)為每一個(gè)Web應(yīng)用創(chuàng)建一個(gè)唯一的ServletContext對(duì)象代表當(dāng)前Web應(yīng)用,該對(duì)象不僅封裝了該Web應(yīng)用的所有信息,而且實(shí)現(xiàn)了多個(gè)Servlet對(duì)象間的數(shù)據(jù)共享。在web.xml中不僅可以配置Servlet的初始化信息,還可以配置整個(gè)Web應(yīng)用的初始化信息,配置方式如下所示:

<context-param>
 <param-name>name</param-name>
 <param-value>luoxn28</param-value>
</context-param>
<context-param>
 <param-name>company</param-name>
 <param-value>dahua</param-value>
</context-param>

注意:一個(gè)<context-param>元素里只能有一個(gè)<param-name>和<param-value>,上面的配置在web.xml中<web-app>下配置。Hello.java文件如下:

package zzz;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Hello extends HttpServlet {
 @Override
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
  // 設(shè)置響應(yīng)消息編碼
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  
  ServletContext context = this.getServletContext();
  Enumeration<String> paramNames = context.getInitParameterNames();
  while (paramNames.hasMoreElements()) {
   String name = paramNames.nextElement();
   String value = context.getInitParameter(name);
   out.println(name + ": " + value + "<br/>");
  }
 }
 
 @Override
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  this.doGet(request, response);
 }
}

  由于一個(gè)Web應(yīng)用中所有Servlet共享一個(gè)ServletContext對(duì)象,所以ServletContext對(duì)象的域?qū)傩钥梢员籛eb應(yīng)用中所有的Servlet訪問(wèn)。在ServletContext接口中定義了分別增加、刪除、設(shè)置ServletContext域?qū)傩缘?個(gè)方法:

通過(guò)以上方法就可以實(shí)現(xiàn)多個(gè)Servlet間共享數(shù)據(jù),這個(gè)具體實(shí)例就不貼代碼了,網(wǎng)上可參考的資料很多,比如可以點(diǎn)擊:

javaweb Servlet開(kāi)發(fā)總結(jié)(二)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家了解Java Web的Servlet技術(shù)有所幫助。

參考資料

1、《Java Web程序開(kāi)發(fā)入門(mén)》Servlet技術(shù)章節(jié)

相關(guān)文章

  • Java面向?qū)ο蠡A(chǔ)教學(xué)(一)

    Java面向?qū)ο蠡A(chǔ)教學(xué)(一)

    這篇文章主要介紹了Java的面相對(duì)象編程思想,包括類對(duì)象方法和封裝繼承多態(tài)等各個(gè)方面的OOP基本要素,非常推薦,需要的朋友可以參考下,希望可以對(duì)你有所幫助
    2021-07-07
  • JAVA類變量及類方法代碼實(shí)例詳解

    JAVA類變量及類方法代碼實(shí)例詳解

    這篇文章主要介紹了JAVA類變量及類方法代碼實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 初識(shí)Spring boot監(jiān)控

    初識(shí)Spring boot監(jiān)控

    這篇文章主要介紹了spring boot監(jiān)控的相關(guān)知識(shí),文中給大家介紹了查看監(jiān)控?cái)?shù)據(jù),數(shù)據(jù)可視化的相關(guān)知識(shí),需要的朋友可以參考下
    2018-03-03
  • Mybatis內(nèi)置參數(shù)之_parameter和_databaseId的使用

    Mybatis內(nèi)置參數(shù)之_parameter和_databaseId的使用

    這篇文章主要介紹了Mybatis內(nèi)置參數(shù)之_parameter和_databaseId的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 關(guān)于Java大整數(shù)運(yùn)算之BigInteger類

    關(guān)于Java大整數(shù)運(yùn)算之BigInteger類

    這篇文章主要介紹了關(guān)于Java大整數(shù)運(yùn)算之BigInteger類,BigInteger提供高精度整型數(shù)據(jù)類型及相關(guān)操作,所有操作中,都以二進(jìn)制補(bǔ)碼形式表示,需要的朋友可以參考下
    2023-05-05
  • Java動(dòng)態(tài)代理模式的深入揭秘

    Java動(dòng)態(tài)代理模式的深入揭秘

    這篇文章主要給大家介紹了關(guān)于Java動(dòng)態(tài)代理模式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 淺談Slf4j與其他日志系統(tǒng)兼容的使用方法

    淺談Slf4j與其他日志系統(tǒng)兼容的使用方法

    下面小編就為大家分享一篇淺談Slf4j與其他日志系統(tǒng)兼容的使用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Java 如何調(diào)用long的最大值和最小值

    Java 如何調(diào)用long的最大值和最小值

    這篇文章主要介紹了Java 如何調(diào)用long的最大值和最小值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring Bean常用依賴注入方式詳解

    Spring Bean常用依賴注入方式詳解

    這篇文章主要介紹了Spring Bean常用三種依賴注入方式詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot服務(wù)器端解決跨域問(wèn)題

    SpringBoot服務(wù)器端解決跨域問(wèn)題

    這篇文章主要介紹了SpringBoot服務(wù)器端解決跨域問(wèn)題,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論