一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - Java Web編程之Servlet技術(shù)詳解

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

2020-04-25 15:20酷殼阮一峰 JAVA教程

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

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

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

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

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

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

2、第一個Servlet程序

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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 -->
  <servlet-name>Hello</servlet-name> <!-- 指定Servlet名稱 -->
  <servlet-class>zzz.Hello</servlet-class> <!-- 指定Servlet完整類名 -->
 </servlet>
 <servlet-mapping> <!-- 映射Servlet對外訪問路徑 -->
  <servlet-name>Hello</servlet-name> <!-- 指定Servlet名稱 -->
  <url-pattern>/hello</url-pattern> <!-- 指定訪問Servlet的虛擬路徑 -->
 </servlet-mapping>
</web-app>

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

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

3、Servlet生命周期

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

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

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

?
1
2
3
4
5
6
7
8
9
10
<servlet>
  <servlet-name>Hello</servlet-name>
  <servlet-class>zzz.Hello</servlet-class>
 <!-- 自動加載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初始化一個Servlet時,會將該Servlet配置信息封裝成一個ServletConfig對象通過init(ServletConfig config)傳遞到Servlet。ServletConfig定義了一系列獲取配置信息的方法:

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

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

web.xml配置文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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容器啟動時,會為每一個Web應(yīng)用創(chuàng)建一個唯一的ServletContext對象代表當(dāng)前Web應(yīng)用,該對象不僅封裝了該Web應(yīng)用的所有信息,而且實(shí)現(xiàn)了多個Servlet對象間的數(shù)據(jù)共享。在web.xml中不僅可以配置Servlet的初始化信息,還可以配置整個Web應(yīng)用的初始化信息,配置方式如下所示:

?
1
2
3
4
5
6
7
8
<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>

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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);
 }
}

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

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

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

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

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

參考資料

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日日草视频 | 麻豆夏晴子 | 2021国产精品视频一区 | 精品免费视频 | 91调教 | 视频在线观看入口一二三2021 | 日韩拍拍拍 | aaa大片| 国产第7页 | 国产成人欧美视频在线 | 国产视频三区 | 国产综合成色在线视频 | 免费看男人使劲躁女人小说 | 色婷丁香 | juy799大岛优香在线观看 | 日本伊人久久 | 九九国产在线 | 亚洲国产成人久久午夜 | 国产午夜免费 | a毛片免费全部在线播放毛 a级在线看 | 亚洲AV无码专区国产乱码网站 | 免费看3d小舞被躁视频网站 | 97影音| 四虎一区| 免费看又黄又爽又猛的视频软件- | 欧美坐爱 | 97社区| 亚洲乱亚洲23p女 | 精品国产乱码久久久久久免费 | a∨79成人网 | 特黄特黄一级片 | 国产亚洲人成网站在线观看不卡 | 精品小视频在线观看 | 欧美亚洲高清日韩成人 | 欧美疯狂做爰3xxx | 免费一级毛片在级播放 | 国产精品反差婊在线观看 | 亚洲欧美一区二区三区在饯 | 欧美日韩国产超高清免费看片 | 国内亚州视频在线观看 | 国产精品极品美女自在线 |