servlet容器_Servlet详解(一)之基本概念
天天學,應該把這些基本spring底層概念了解下,更好的理解我們常用框架的套路。
1.Servlets是SUN公司指定的一套開發動態網頁的技術。一般JavaEE相關的類,都是以javaX開頭
2. Servlet規范核心類圖,他們之間的關系如圖下:
1. 編寫一個Servlet案例應用的基本過程:
a) 建立一個標準的JavaWeb應用目錄:
比如:
|--MyWebApp:
|--WEB-INF
|--classes:用來存放java運行的class文件
|--lib:存放web應用中需要的jar包
web-xml:配置文件,通常配置servlet類的訪問映射
|--jsp css js等網頁文件
b) 進入classes目錄,建立一個java擴展名文件,這些java文件統稱為Servlet,它們都必須間接或直接實現javax.servlet.Servlet接口。例如以下代碼:
package com.lsh.itcast;import java.io.*;import javax.servlet.*;public class ServerletDemo extends GenericServlet{public void service(ServletRequest req,ServletResponse rep)throws ServletException, IOException{System.out.println("執行service方法");OutputStream out=rep.getOutputStream();out.write("hello my servlet".getBytes());out.close();}}a) 進入classes目錄,對我們編寫的類進行編譯。
首先是Tomcat的lib目錄下的servlet-api.jar,部署到當前的classpath環境變量中。在dos命令行的臨時配置法是:
set classpath=%classpath%;C:apache-tomcat-6.0.35libservlet-api.jar
然后在dos命令行使用cd命令進入到classes目錄下,編譯Servlet類
編譯命令:javac -d . 類名.java
b) 修改web應用中WEB-INF目錄下的web.xml,對servlet類進行url地址映射,配置如下:
<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet><servlet-name>ServerletDemo</servlet-name><servlet-class>com.lsh.itcast.ServerletDemo</servlet-class> </servlet><servlet-mapping><servlet-name>ServerletDemo</servlet-name><url-pattern>/test</url-pattern></servlet-mapping></web-app>a) 把已建立好的web應用配屬到Tomcat中,并啟動服務器
b) 訪問地址是:http://localhost:8080/MyWebApp/test
看到寫的Servlet類的輸出結果,表示Servlet操作成功
1. Servlet的生命周期:在內存中一個Servlet只有一個實例,針對不同的的用戶請求,容器采用多線程的機制來調用Service方法。容器什么時候開始裝載Servlet呢?在以下四種情況下,Servlet被啟動,容器裝載Servlet的時刻。
a) 容器啟動時會自動的裝載某些需要的Servlet
b) 在容器啟動后,客戶首次向Servlet發出請求
c) Servlet的類文件被更新后,重新裝載Servlet
d) Servlet被裝載后,Servlet容器創建一個Servlet實例并調用init()方法進行初始化。在Servlet的整個生命周期中,init方法只會調用一次。
如果在web.xml中加上:2。作用在于:
某些Servlet在web.xml文件中只有元素而沒有元素,這樣我們就無法通過url地址的方式訪問這個Servlet了,這種Servlet通常會在元素中配置一個子元素,讓容器在啟動的時候自動加載該Servlet,并且調用其init方法完成一些全局性的初始化工作。
Servlet的生命周期的常用方法:
a) public void init(ServletCOnfig config):對Servlet進行初始化,Servlet類被實例化后就執行,且執行一次。由容器調用。默認情況下,只有第一次方訪問時才執行,且執行一次。
b) public void destroy():在內存中銷毀了Servlet對象。
1. Servlet的生命周期:在內存中一個Servlet只有一個實例,針對不同的的用戶請求,容器采用多線程的機制來調用Service方法。容器什么時候開始裝載Servlet呢?在以下四種情況下,Servlet被啟動,容器裝載Servlet的時刻。
a) 容器啟動時會自動的裝載某些需要的Servlet
b) 在容器啟動后,客戶首次向Servlet發出請求
c) Servlet的類文件被更新后,重新裝載Servlet
d) Servlet被裝載后,Servlet容器創建一個Servlet實例并調用init()方法進行初始化。在Servlet的整個生命周期中,init方法只會調用一次。
如果在web.xml中加上:2。作用在于:
某些Servlet在web.xml文件中只有元素而沒有元素,這樣我們就無法通過url地址的方式訪問這個Servlet了,這種Servlet通常會在元素中配置一個子元素,讓容器在啟動的時候自動加載該Servlet,并且調用其init方法完成一些全局性的初始化工作。
Servlet的生命周期的常用方法:
a) public void init(ServletCOnfig config):對Servlet進行初始化,Servlet類被實例化后就執行,且執行一次。由容器調用。默認情況下,只有第一次方訪問時才執行,且執行一次。
b) public void destroy():在內存中銷毀了Servlet對象。
1. 關于web-xml文件的Servlet的配置:
a) 一個Servlet可以被映射到多個URL地址上,即配置兩個URL去映射一個Servlet,這兩個URl都可以去訪問這個Servlet。
b) URL地址映射支持通配符。即代表只要這個URL是字母,都可以去訪問映射的Servlet,
i. 以開頭,以擴展名結尾。比如.do
ii. 以/前綴開頭,以結尾。比如/action/
iii. 如果一個Servlet的映射為一個"/",就稱之為默認的Servlet,它負責處理沒有映射路徑的URL請求的響應。
但當一個web.xml有多個使用通配符時,會遵循一定的優先級規則。
a) 絕對匹配:以"/"開頭(方式二)要比"*"開頭(方式一)優先級高
b) 都以"/"開頭,還是有多個匹配,找最匹配的
c) 以"/"開頭(方式二)要比"*"開頭(方式一)優先級高
2. Servlet的多線程同步問題:Servlet本身是單實例的,這樣當有多個用戶同時訪問某個Servlet時,會訪問該唯一的Servlet實例中的成員變量,如果對成員變量進行寫入操作,那就會導致Servlet的多線程問題,即數據不一致。
解決辦法:去除成員變量,使用局部變量.或者是使用同步代碼塊。
建議:在Servlet中定義變量時,除非特殊要求,盡量使用局部變量,當如果有需要實例變量時,應做同步處理,且同步代碼塊盡量包圍少的代碼。
如果看到這里,說明你喜歡這篇文章,請 轉發、點贊。同時 標星(置頂)本公眾號可以第一時間接受到博文推送。
本文由博客群發一文多發等運營工具平臺 OpenWrite 發布
總結
以上是生活随笔為你收集整理的servlet容器_Servlet详解(一)之基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 酷狗音乐跑步模式怎么打开的
- 下一篇: 4999元 红魔8 Pro系列银翼版上架