一、概念:運行在服務器端的小程序。
二、* servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。
三、* 將來我們自定義一個類,實現servlet接口,複寫方法。
* 快速入門
1.創建javaee項目
2.定義一個類,實現servlet接口
3.實現接口中的抽象方法。
package cn.itcast.web.servlet;
import javax.servlet.*;
import java.io.IOException;
/**
* servlet快速入門
*/
public class ServletDemo1 implements Servlet
{
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
// 提供服務的方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
4.配置servlet。在web.xml中配置。
<!--配置servelt-->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
四、設置虛擬目錄:
六、servlet執行原理:
1.當服務器接shou到客戶端瀏覽器的請求後,會解析請求URL路徑,獲取訪問的Servlet的資源路徑。
2.查找web.xml文件,是否有對應的url-pattern標籤體內容。
3.如果有,則在找到對應的<servlet-class>全類名
4.tomcat會將字節碼文件加載進內存,並且創建其對象
5.調用其方法。
七.servlet中的生命週期:
1.被創建:執行init方法,只執行一次
* servlet的init方法,只執行一次,說明一個servlet在內存中只存在一個對象,servlet是單例的。
多個用戶同時訪問,可能存在線程安全問題。
解決:儘量不要在servlet中定義成員變量,即使定義了成員變量,也不要對修改值
2.提供服務:執行service,執行多次
每次訪問servlet時,service方法都會被調用一次
3.被銷燬:執行destroy方法,只執行一次
servlet被銷燬時執行,服務器關閉時,servlet被銷燬。
只有服務器正常關閉時,纔會執行destroy方法。
package com.example.servlet1;
import javax.servlet.*;
import java.io.IOException;
/**
* Servlet的方法
*/
public class ServletDemo2 implements Servlet {
/**
* 初始化方法
* 在servlet被創建時,執行只會執行一次
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init...");
}
/**
* servlet配置方法
* @return
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* 提供服務的方法
* 每一次servlet被訪問時就執行,執行多次
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service...");
}
/**
* 獲取servlet的一些信息,版本作者等等
* @return
*/
@Override
public String getServletInfo() {
return null;
}
/**
* 銷燬方法
* 在服務器正常關閉時,執行,執行一次。
*/
@Override
public void destroy() {
System.out.println("destroy...");
}
}
八. servlet 3.0
好處:支持註解配置。可以不需要web.xml了。
步驟:
1.創建javaee項目,選擇servlet的版本3.0以上,可以不創建web.xml
2.定義一個類,實現servlet接口
3.複寫方法
4.在類上使用@webServlet註解,進行配置。
package com.example.servelt3;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/demo2")
public class ServletDemo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service...");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
九.IDEA與tomcat的相關配置
十、servlet的推薦用法
package com.example.servelt3;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "ServletDemo2", value = "/ServletDemo2")
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet...");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost...");
}
}