顧名思義:服務端的小程序
Servlet只是一個接口,定義了Java被瀏覽器訪問到(Tomcat)的識別規則,咱們須要定義一個類來實現Servlet接口java
1.建立一個JavaEE項目
2.定義一個類實習Servlet方法
3.實現接口中的抽象方法web
import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.io.IOException; public class Servlet implements javax.servlet.Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("初始化"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("訪問"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("關閉"); } }
4.在WEB.XML中配置Servelt小程序
<?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_3_1.xsd" version="3.1"> <servlet> <servlet-name>demo1</servlet-name> <servlet-class>Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/demo1</url-pattern> </servlet-mapping> </web-app>
結果瀏覽器
1.當服務器接受到服務器請求的時候,會先解析瀏覽器的UPL地址,獲取訪問服務的路徑
2.而後查找WEB.xml文件,查看是否有對應的
3.若是有,則找到對應的
4.tomcat會將字節碼文件加載進內存,而且建立其對象
5.調用其方法
1.被建立:執行init方法只執行一次
Servlet何時建立?
默認狀況:在第一次被訪問的時候建立
能夠在配置執行Servlet的建立時機
在
注意服務器
2. 提供服務:執行service方法,執行屢次
* 每次訪問Servlet時,Service方法都會被調用一次。
3. 被銷燬:執行destroy方法,只執行一次
* Servlet被銷燬時執行。服務器關閉時,Servlet被銷燬
* 只有服務器正常關閉時,纔會執行destroy方法。
* destroy方法在Servlet被銷燬以前執行,通常用於釋放資源app
好處:支持註解配置,不須要使用web.xml了
步驟:
1. 建立JavaEE項目,選擇Servlet的版本3.0以上,能夠不建立web.xml
2. 定義一個類,實現Servlet接口
3. 複寫方法
4. 在類上使用@WebServlet註解,進行配置async
* @WebServlet("資源路徑") @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebServlet { String name() default "";//至關於<Servlet-name> String[] value() default {};//表明urlPatterns()屬性配置 String[] urlPatterns() default {};//至關於<url-pattern> int loadOnStartup() default -1;//至關於<load-on-startup> WebInitParam[] initParams() default {}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default ""; }
代碼ide
import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; import java.io.IOException; @WebServlet("/demo1") public class Servlet implements javax.servlet.Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("初始化"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("訪問"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("關閉"); } }
相比於以前更加簡潔,使用更加方便
1. IDEA會爲每個tomcat部署的項目單獨創建一份配置文件
* 查看控制檯的log:Using CATALINA_BASE: "C:\Users\86151.IntelliJIdea2017.3\system\tomcat\Tomcat_8_5_31_CSDNWeb"
地址來源
2. 工做空間項目和tomcat部署的web項目
* tomcat真正訪問的是「tomcat部署的web項目」,"tomcat部署的web項目"對應着"工做空間項目" 的web目錄下的全部資源
* WEB-INF目錄下的資源不能被瀏覽器直接訪問。
3. 斷點調試:使用"小蟲子"啓動 dubug 啓動
GenericServlet:
將Servlet接口中其餘的方法作了默認空實現,只將service()方法做爲抽象
未來定義Servlet類時,能夠繼承GenericServlet,實現service()方法便可
HttpServlet
對http協議的一種封裝,簡化操做
1. 定義類繼承HttpServlet
2. 複寫doGet/doPost方法
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); long lastModified; if (method.equals("GET")) { lastModified = this.getLastModified(req); if (lastModified == -1L) { this.doGet(req, resp); } else { long ifModifiedSince; try { ifModifiedSince = req.getDateHeader("If-Modified-Since"); } catch (IllegalArgumentException var9) { ifModifiedSince = -1L; } if (ifModifiedSince < lastModified / 1000L * 1000L) { this.maybeSetLastModified(resp, lastModified); this.doGet(req, resp); } else { resp.setStatus(304); } } } else if (method.equals("HEAD")) { lastModified = this.getLastModified(req); this.maybeSetLastModified(resp, lastModified); this.doHead(req, resp); } else if (method.equals("POST")) { this.doPost(req, resp); } else if (method.equals("PUT")) { this.doPut(req, resp); } else if (method.equals("DELETE")) { this.doDelete(req, resp); } else if (method.equals("OPTIONS")) { this.doOptions(req, resp); } else if (method.equals("TRACE")) { this.doTrace(req, resp); } else { String errMsg = lStrings.getString("http.method_not_implemented"); Object[] errArgs = new Object[]{method}; errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(501, errMsg); } }
** Servlet相關配置**
1. urlpartten:Servlet訪問路徑
1. 一個Servlet能夠定義多個訪問路徑 : @WebServlet({"/d4","/dd4","/ddd4"})
2. 路徑定義規則:
1. /xxx:路徑匹配
2. /xxx/xxx:多層路徑,目錄結構
3. *.do:擴展名匹配
以上就是Tomcat與Servlet的一些基礎知識,喜歡個人能夠關注收藏,我會常常更新文章