Servlet的快速入门以及执行原理
Servlet
server applet
概念:運行在服務器端的小程序.
- Servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。
- 將來我們自定義一個類,實現Servlet接口,復寫方法。
快速入門
創建JavaEE(web)項目
定義一個類,實現Servlet接口
實現接口中的抽象方法
配置servlet的原因:
定義好了java類,瀏覽器需要通過url來進行訪問,url需要通過具體的資源名稱來映射這個java類對其進行訪問,所以需要將這個java類來配置成一個路徑。
不要忘了配置虛擬機
然后啟動服務器:
輸入網址http://localhost:8080/demo1后在控制臺輸出hello servlet
而且每請求一次,就輸出一次
servlet的執行原理
執行原理:
1. 當服務器接受到客戶端瀏覽器的請求后,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
2. 查找web.xml文件,是否有對應的 < url-pattern >標簽體內容。
3. 如果有,則在找到對應的< servlet-class >全類名
4. tomcat會將字節碼文件加載進內存,并且創建其對象
5. 調用其方法
servlet中的方法
- init初始化方法:在servlet被創建的時候執行,只會執行一次
- service提供服務的方法:每一次servlet被訪問時執行,會執行多次
- destory銷毀方法:在servlet被殺死時候執行(在服務器正常關閉的時候執行,只會執行一次)
- getServletConfig方法:獲取ServletConfig對象(ServletConfig:Servlet的配置對象)
- getServletInfo方法:獲取Servlet的一些信息(版本、作者等等)
測試這三個方法:
package com.yuanxinyi.servlet;import javax.servlet.*; import java.io.IOException;public class ServletDemo2 implements Servlet {/*** 初始化方法* 早servlet被創建的時候執行,只會執行一次* @param servletConfig* @throws ServletException*/@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("init....");}@Overridepublic ServletConfig getServletConfig() {return null;}/*** 提供服務的方法* 每一次servlet被訪問時執行,會執行多次* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("service...");}@Overridepublic String getServletInfo() {return null;}/*** 銷毀方法* 在servlet被殺死時候執行(在服務器正常關閉的時候執行,只會執行一次)*/@Overridepublic void destroy() {System.out.println("destory....");} }配置servlet:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--配置servlet--><servlet><servlet-name>demo1</servlet-name><!--需要配置該類的全類名--><servlet-class>com.yuanxinyi.servlet.ServletDemo1</servlet-class> </servlet><servlet-mapping><servlet-name>demo1</servlet-name><url-pattern>/demo1</url-pattern></servlet-mapping><servlet><servlet-name>demo2</servlet-name><!--需要配置該類的全類名--><servlet-class>com.yuanxinyi.servlet.ServletDemo2</servlet-class></servlet><servlet-mapping><servlet-name>demo2</servlet-name><url-pattern>/demo2</url-pattern></servlet-mapping> </web-app>啟動服務器:
第一次訪問的時候:控制臺打印
init…
service…
第二次訪問只打印了service…
正常點擊關閉服務器后打印了destory…
非正常關閉的話不會打印
servlet的生命周期
Servlet什么時候被創建? 默認情況下,第一次被訪問時,Servlet被創建 可以配置執行Servlet的創建時機 在< servlet>標簽下配置
1. 第一次被訪問時,創建< load-on-startup>的值為負數
2. 在服務器啟動時,創建 < load-on-startup>的值為0或正整數
Servlet的init方法,只執行一次,說明一個Servlet在內存中只存在一個對象,Servlet是單例的
多個用戶同時訪問時,可能存在線程安全問題。 解決:盡量不要在Servlet中定義成員變量。即使定義了成員變量,也不要對修改值(不能使用同步代碼塊加鎖)
每次訪問Servlet時,Service方法都會被調用一次。
Servlet被銷毀時執行,服務器關閉時,Servlet被銷毀。
只有服務器正常關閉時,才會執行destroy方法。
destroy方法在Servlet被銷毀之前執行,一般用于釋放資源
總結
以上是生活随笔為你收集整理的Servlet的快速入门以及执行原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnf强化和增幅有什么区别(最强自定义装
- 下一篇: servlet的注解开发