JavaEE學習日誌持續更新----> 必看!JavaEE學習路線(文章總彙)
JavaEE學習日誌(五十)
Servlet
Servlet是運行在服務器端的Java程序,也是JavaEE十三規範中的一個規範。
規範理解爲就是接口interface
實現步驟:
- 創建類,實現接口Servlet
- 重寫接口中全部的抽象方法
- 通知Tomcat服務器,運行實現類(去web.xml編寫配置文件)
Servlet快速入門
- 實現接口Servlet
- 重寫抽象方法,6個
JavaEE使用的類和接口,由Tomcat提供
import javax.servlet.*;
import java.io.IOException;
/*
實現Servlet程序快速入門
實現接口Servlet
重寫抽象方法,6個
JavaEE使用的類和接口,Tomcat提供
*/
public class QuickStartServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/*
方法service
參數:ServletRequest 接收客戶端提交的數據
ServletResponse 向客戶端響應數據對象
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("快速入門");
servletResponse.getWriter().print("aaa");//獲取流對象,返回值PrintWriter
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
編寫配置文件
運行Tomcat,在瀏覽器中輸入地址
Servlet技術概述
Servlet是JavaEE技術平臺的規範,只能運行在Web服務器。
作用:接收請求,進行響應
廣義的Servlet:Servlet接口所以的實現類
狹隘的Servlet:專門指的是Servlet接口
Servlet程序執行原理
Servlet生命週期
Servlet對象什麼時候生,什麼時候死
生命週期相關的三個方法:init,service,destroy
init(ServletConfig config)
Servlet對象的初始化方法,對象被創建時調用。
Servlet對象什麼時候被創建:
- Servlet默認第一次訪問的時候,被創建
- Tomcat服務器啓動的時候創建對象,需要修改web.xml(一般不用)
<!--
配置的是Servlet對象啓動的優先級
理論上可以寫任意整數:數字越小,啓動的優先級越高
-->
<load-on-startup>5</load-on-startup>
service(request,response)
客戶端訪問一次,執行一次destory()
Servlet對象銷燬之前被調用
Servlet對象什麼時候被銷燬:
- 停止Tomcat服務
- Web項目從服務器中移除掉
Servlet的web.xml配置
<servlet>
<!--name,定義名字,隨意寫,一般寫類名前綴-->
<servlet-name>path</servlet-name>
<!--class 配置類的全名,反射-->
<servlet-class>com.itheima.servlet.PathServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--name 必須和上面的name相同-->
<servlet-name>path</servlet-name>
<!--url-pattern 配置的是瀏覽器訪問的虛擬路徑-->
<!--完全匹配-->
<url-pattern>/path</url-pattern>
</servlet-mapping>
url-pattern
的配置
- 完全匹配
/abc
:瀏覽器地址欄必須寫/abc,大小寫也不能錯 - 目錄匹配
/aaa/bbb/*
:瀏覽器地址欄可以寫/aaa/bbb/任意 - 後綴名匹配
*.abc
:瀏覽器地址欄可以寫 任意.abc
注意:目錄匹配和後綴名匹配不能同時使用
Tomcat的全局web.xml
tomcat目錄中/conf/web.xml 是全局配置文件,所有的web項目都使用。自己寫的web.xml只有你自己的項目使用。
當全局配置web.xml和自己的web.xml衝突,就聽自己的
一、當找不到自己項目中的servlet時,執行默認的servlet,報出404錯誤頁面
二、session對象的超時時間爲30分鐘
<session-config>
<session-timeout>30</session-timeout>
</session-config>
三、
<mime-mapping>
<extension>dv</extension>
<mime-type>video/x-dv</mime-type>
</mime-mapping>
extension:擴展名,給人看的文件名
mine-type:文件類型,給瀏覽器看的
四、歡迎頁面
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Idea創建servlet
繼承的方式創建:繼承HttpServlet
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
- doPost方法對應了客戶端瀏覽器的提交方式POST
- doGet方法對應了客戶端瀏覽器的提交方式GET
無論:是POST提交,還是GET,統一處理,都使用doGet
public class MyServlet extends HttpServlet {
/*
doPost方法對應了客戶端瀏覽器的提交方式POST
無論:是POST提交,還是GET,統一處理,都使用doGet
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//調用doGet
doGet(request,response);
}
/*
doGet方法對應了客戶端瀏覽器的提交方式GET
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print("MyServlet Run");
}
}
繼承HttpServlet的原理
ServletConfig對象
ServletConfig對象,表示的是Servlet配置對象
有一個Servlet程序,出現對應的ServletConfig對象
獲取ServletConfig對象:
init方法參數(ServletConfig servletConfig)
,調用者是Tomcat引擎,所以ServletConfig對象也是由Tomcat引擎創建。- 父類中定義了方法
ServletConfig getSevletConfig()
public class ConfigServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
通過父類的方法getServletConfig()獲取ServletConfig對象
ServletConfig是接口
org.apache.catalina.core.StandardWrapperFacade@5b21f320是實現類(Tomcat中)
*/
ServletConfig config = getServletConfig();
System.out.println(config);//org.apache.catalina.core.StandardWrapperFacade@5b21f320
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
ServletConfig對象能做什麼:
- 獲取Servlet的名字,
String getServletName()
<servlet-name>config</servlet-name>
- 獲取Servlet的初始化參數,
String getInitParameter("鍵名")
<servlet>
<servlet-name>config</servlet-name>
<servlet-class>com.itheima.servlet.ConfigServlet</servlet-class>
<init-param>
<param-name>heima</param-name>
<param-value>java</param-value>
</init-param>
</servlet>
public class ConfigServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
通過父類的方法getServletConfig()獲取ServletConfig對象
ServletConfig是接口
org.apache.catalina.core.StandardWrapperFacade@5b21f320是實現類(Tomcat中)
*/
ServletConfig config = getServletConfig();
System.out.println(config);//org.apache.catalina.core.StandardWrapperFacade@5b21f320
//獲取Servlet名字
String name = config.getServletName();
System.out.println(name);
//獲取Servlet初始化參數
String value = config.getInitParameter("heima");
System.out.println(value);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- 獲取ServletContext對象,
getServletContext()
返回Servlet上下文對象