淺談一下Servlet的定義以及運行原理
1.什么是servlet?
sun(oracle)公司制訂的一種用來擴展web服務器端功能的組件規(guī)范。
背景:

常用的web服務器:
- apache http Server
- nginx:俄羅斯小伙子寫的
- IIS
以上服務器只能處理靜態(tài)的資源請求。網(wǎng)頁要提前寫好,不能動態(tài)生成。
web服務器需要處理動態(tài)的資源請求。頁面并不是提前寫好,需要計算。我們的web服務器不能做到這一點,所以需要擴展。
1.1 擴展web服務器端功能
web服務器端(比如apache http webServer,nginx,iis等)只能夠處理靜態(tài)資源的請求,不能夠處理動態(tài)資源的請求。所以需要擴展web服務器的功能來處理動態(tài)資源的請求。
注:靜態(tài)資源,指的是需要事先將網(wǎng)頁寫好。動態(tài)資源:指的是需要經(jīng)過計算,動態(tài)生成相應的網(wǎng)頁。
注:servelet出現(xiàn)之前,如何處理這些動態(tài)的請求呢?早期使用CGI(Common GateWay Interface-通用網(wǎng)關接口)程序來擴展。CGI程序開發(fā)復雜,移植性差,很少用了
1.2 servlet組件
符合相應的規(guī)范,具有部分功能的,并且需要部署到相應的容器里面才能運行的軟件模塊。比如servlet就是一個組件,需要符合servlet規(guī)范,并且需要部署到servlet容器里面才能運行。
注:容器:符合相應的規(guī)范,提供組件運行環(huán)境的程序。比如Tomcat就是比較有名的servlet容器。jetty jboss weblogic都是servlet容器。這些servlet把網(wǎng)絡相關的問題已經(jīng)全部處理好,我們寫servlet只需要關注業(yè)務邏輯即可。
2.如何寫一個servlet?
寫一個java類,需要實現(xiàn)Servlet接口或者繼承HttpServlet類。編譯。打包(將這個java類變成servlet組件)
注:創(chuàng)建一個具有如下結構的文件夾:
appname(文件夾名字,可以自定義) WEB-INF(appname下面的子文件夾,是固定的) classes(該文件夾放之前寫好的java類的字節(jié)碼文件)lib(里面放的是一些需要用到的jar包)web.xml(用來描述servlet)

部署:將第三部創(chuàng)建好的文件夾拷貝到servlet容器指定的文件夾下面。(注:可以將第三步創(chuàng)建好的文件夾先使用jar命令壓縮成以".war"結尾的文件,然后再拷貝。)啟動servlet容器,訪問servlet。
http://ip:port/appname(文件夾的名字)/servlet-url(或者url-pattern,會在web.xml中描述)

3.servlet是如何運行的?
打開瀏覽器,輸入http://ip:port/servlet01/hello

- 瀏覽器依據(jù)ip,port建立與容器(同時也是一個簡單的web server)之間的連接。
- 瀏覽器將相關數(shù)據(jù)打包(按照http協(xié)議將相關數(shù)據(jù)創(chuàng)建一個請求數(shù)據(jù)包),然后發(fā)送請求。
- 容器 將請求數(shù)據(jù)包解析出來,然后將解析到的數(shù)據(jù)放到請求對象里面,同時還會創(chuàng)建一個響應對象response。
- 容器創(chuàng)建servlet對象,然后調用該對象的service方法。(注:容器會將request對象和response對象作為參數(shù)傳進來??梢酝ㄟ^request對象獲得請求參數(shù)值,并將處理結果寫到response對象中。)
- 容器通過response獲取處理結果,然后打包(響應數(shù)據(jù)包)發(fā)送給瀏覽器。
- 瀏覽器解析響應數(shù)據(jù)包,生成響應的頁面。
4.常見問題
4.1 狀態(tài)碼
是一個三位數(shù)字,由http協(xié)議指定,表示服務器處理請求的狀態(tài)。
4.2 404
- 含義:服務器依據(jù)請求路徑,找不到對應的資源。
- 原因:
a.沒有部署該應用。
b.servlet-name不一致。
c.路徑寫錯。
4.3 500
- 含義:系統(tǒng)出錯(應用程序在運行中出錯了)。
- 原因: a.servlet類沒有繼承HttpServletb.servlet類出錯,例如將不合法的字符串轉換成數(shù)字。b.servlet類出錯,例如將不合法的字符串轉換成數(shù)字。
4.4 405
- 含義:找不到service方法。
- 原因:沒有service方法。
到此這篇關于淺談一下Servlet的定義以及運行原理的文章就介紹到這了,更多相關Servlet定義和運行原理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- ServletWebServerApplicationContext創(chuàng)建Web容器Tomcat示例
- Springboot如何添加server.servlet.context-path相關使用
- Java Servlet線程中AsyncContext異步處理Http請求
- Java?Servlet實現(xiàn)表白墻的代碼實例
- Java servlet后端開發(fā)超詳細教程
- JavaWeb Servlet生命周期細枝末節(jié)處深究
- JavaWeb通過IDEA配置Servlet操作流程詳解
- JavaWeb ServletConfig作用及原理分析講解
- Java中Servlet的生命周期詳解
相關文章
java多線程實現(xiàn)同步鎖賣票實戰(zhàn)項目
本文主要介紹了java多線程實現(xiàn)同步鎖賣票實戰(zhàn)項目,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01
RocketMQ特性Broker存儲事務消息實現(xiàn)
這篇文章主要為大家介紹了RocketMQ特性Broker存儲事務消息實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
java 運行報錯has been compiled by a more recent version of the J
java 運行報錯has been compiled by a more recent version of the Java Runtime (class file version 54.0)2021-04-04

