淺談一下Servlet的定義以及運(yùn)行原理
1.什么是servlet?
sun(oracle)公司制訂的一種用來(lái)擴(kuò)展web服務(wù)器端功能的組件規(guī)范。
背景:
常用的web服務(wù)器:
- apache http Server
- nginx:俄羅斯小伙子寫(xiě)的
- IIS
以上服務(wù)器只能處理靜態(tài)的資源請(qǐng)求。網(wǎng)頁(yè)要提前寫(xiě)好,不能動(dòng)態(tài)生成。
web服務(wù)器需要處理動(dòng)態(tài)的資源請(qǐng)求。頁(yè)面并不是提前寫(xiě)好,需要計(jì)算。我們的web服務(wù)器不能做到這一點(diǎn),所以需要擴(kuò)展。
1.1 擴(kuò)展web服務(wù)器端功能
web服務(wù)器端(比如apache http webServer,nginx,iis等)只能夠處理靜態(tài)資源的請(qǐng)求,不能夠處理動(dòng)態(tài)資源的請(qǐng)求。所以需要擴(kuò)展web服務(wù)器的功能來(lái)處理動(dòng)態(tài)資源的請(qǐng)求。
注:靜態(tài)資源,指的是需要事先將網(wǎng)頁(yè)寫(xiě)好。動(dòng)態(tài)資源:指的是需要經(jīng)過(guò)計(jì)算,動(dòng)態(tài)生成相應(yīng)的網(wǎng)頁(yè)。
注:servelet出現(xiàn)之前,如何處理這些動(dòng)態(tài)的請(qǐng)求呢?早期使用CGI(Common GateWay Interface-通用網(wǎng)關(guān)接口)程序來(lái)擴(kuò)展。CGI程序開(kāi)發(fā)復(fù)雜,移植性差,很少用了
1.2 servlet組件
符合相應(yīng)的規(guī)范,具有部分功能的,并且需要部署到相應(yīng)的容器里面才能運(yùn)行的軟件模塊。比如servlet就是一個(gè)組件,需要符合servlet規(guī)范,并且需要部署到servlet容器里面才能運(yùn)行。
注:容器:符合相應(yīng)的規(guī)范,提供組件運(yùn)行環(huán)境的程序。比如Tomcat就是比較有名的servlet容器。jetty jboss weblogic都是servlet容器。這些servlet把網(wǎng)絡(luò)相關(guān)的問(wèn)題已經(jīng)全部處理好,我們寫(xiě)servlet只需要關(guān)注業(yè)務(wù)邏輯即可。
2.如何寫(xiě)一個(gè)servlet?
寫(xiě)一個(gè)java類,需要實(shí)現(xiàn)Servlet接口或者繼承HttpServlet類。編譯。打包(將這個(gè)java類變成servlet組件)
注:創(chuàng)建一個(gè)具有如下結(jié)構(gòu)的文件夾:
appname(文件夾名字,可以自定義) WEB-INF(appname下面的子文件夾,是固定的) classes(該文件夾放之前寫(xiě)好的java類的字節(jié)碼文件)lib(里面放的是一些需要用到的jar包)web.xml(用來(lái)描述servlet)
部署:將第三部創(chuàng)建好的文件夾拷貝到servlet容器指定的文件夾下面。(注:可以將第三步創(chuàng)建好的文件夾先使用jar命令壓縮成以".war"結(jié)尾的文件,然后再拷貝。)啟動(dòng)servlet容器,訪問(wèn)servlet。
http://ip:port/appname(文件夾的名字)/servlet-url(或者url-pattern,會(huì)在web.xml中描述)
3.servlet是如何運(yùn)行的?
打開(kāi)瀏覽器,輸入http://ip:port/servlet01/hello
- 瀏覽器依據(jù)ip,port建立與容器(同時(shí)也是一個(gè)簡(jiǎn)單的web server)之間的連接。
- 瀏覽器將相關(guān)數(shù)據(jù)打包(按照http協(xié)議將相關(guān)數(shù)據(jù)創(chuàng)建一個(gè)請(qǐng)求數(shù)據(jù)包),然后發(fā)送請(qǐng)求。
- 容器 將請(qǐng)求數(shù)據(jù)包解析出來(lái),然后將解析到的數(shù)據(jù)放到請(qǐng)求對(duì)象里面,同時(shí)還會(huì)創(chuàng)建一個(gè)響應(yīng)對(duì)象response。
- 容器創(chuàng)建servlet對(duì)象,然后調(diào)用該對(duì)象的service方法。(注:容器會(huì)將request對(duì)象和response對(duì)象作為參數(shù)傳進(jìn)來(lái)。可以通過(guò)request對(duì)象獲得請(qǐng)求參數(shù)值,并將處理結(jié)果寫(xiě)到response對(duì)象中。)
- 容器通過(guò)response獲取處理結(jié)果,然后打包(響應(yīng)數(shù)據(jù)包)發(fā)送給瀏覽器。
- 瀏覽器解析響應(yīng)數(shù)據(jù)包,生成響應(yīng)的頁(yè)面。
4.常見(jiàn)問(wèn)題
4.1 狀態(tài)碼
是一個(gè)三位數(shù)字,由http協(xié)議指定,表示服務(wù)器處理請(qǐng)求的狀態(tài)。
4.2 404
- 含義:服務(wù)器依據(jù)請(qǐng)求路徑,找不到對(duì)應(yīng)的資源。
- 原因:
a.沒(méi)有部署該應(yīng)用。
b.servlet-name不一致。
c.路徑寫(xiě)錯(cuò)。
4.3 500
- 含義:系統(tǒng)出錯(cuò)(應(yīng)用程序在運(yùn)行中出錯(cuò)了)。
- 原因: a.servlet類沒(méi)有繼承HttpServletb.servlet類出錯(cuò),例如將不合法的字符串轉(zhuǎn)換成數(shù)字。b.servlet類出錯(cuò),例如將不合法的字符串轉(zhuǎn)換成數(shù)字。
4.4 405
- 含義:找不到service方法。
- 原因:沒(méi)有service方法。
到此這篇關(guān)于淺談一下Servlet的定義以及運(yùn)行原理的文章就介紹到這了,更多相關(guān)Servlet定義和運(yùn)行原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- ServletWebServerApplicationContext創(chuàng)建Web容器Tomcat示例
- Springboot如何添加server.servlet.context-path相關(guān)使用
- Java Servlet線程中AsyncContext異步處理Http請(qǐng)求
- Java?Servlet實(shí)現(xiàn)表白墻的代碼實(shí)例
- Java servlet后端開(kāi)發(fā)超詳細(xì)教程
- JavaWeb Servlet生命周期細(xì)枝末節(jié)處深究
- JavaWeb通過(guò)IDEA配置Servlet操作流程詳解
- JavaWeb ServletConfig作用及原理分析講解
- Java中Servlet的生命周期詳解
相關(guān)文章
idea每次修改代碼都需要重新install的問(wèn)題
這篇文章主要介紹了idea每次修改代碼都需要重新install的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Spring?Boot?整合RocketMq實(shí)現(xiàn)消息過(guò)濾功能
這篇文章主要介紹了Spring?Boot?整合RocketMq實(shí)現(xiàn)消息過(guò)濾,本文講解了RocketMQ實(shí)現(xiàn)消息過(guò)濾,針對(duì)不同的業(yè)務(wù)場(chǎng)景選擇合適的方案即可,需要的朋友可以參考下2022-06-06Java使用Junit4.jar進(jìn)行單元測(cè)試的方法
今天通過(guò)本文給大家介紹Java使用Junit4.jar進(jìn)行單元測(cè)試的方法,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-11-11SpringBoot多模塊打包部署Docker的項(xiàng)目實(shí)戰(zhàn)
本文通過(guò)介紹最常見(jiàn)的Maven管理的Spring Boot項(xiàng)目多模塊打包部署Docker來(lái)介紹一下項(xiàng)目部署過(guò)程中操作流程和幾個(gè)需要注意的點(diǎn),具有一定的參加價(jià)值,感興趣的可以了解一下2023-08-08java返回集合為null還是空集合及空集合的三種寫(xiě)法小結(jié)
這篇文章主要介紹了java返回集合為null還是空集合及空集合的三種寫(xiě)法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Spring Data Jpa 復(fù)合主鍵的實(shí)現(xiàn)
這篇文章主要介紹了Spring Data Jpa 復(fù)合主鍵的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04