servlet基礎知識彙總

servlet需要掌握的

在這裏插入圖片描述

什麼時候servlet

實際上servlet是一個類
在這裏插入圖片描述
在這裏插入圖片描述
本身jsp都要翻譯成一個Java原文件,然後再編譯成一個class文件,然後生成的結果再響應到客戶端去
所以jsp頁面本身就是一個類,它繼承自servlet,則servlet類也就是一個Java的類

servlet體系結構

接口

不會直接實現接口,而是繼承已經實現類的接口
GenericServlet是通用類,他的子類HTTPServlet
service?
在這裏插入圖片描述

servlet接口

在這裏插入圖片描述

ServletConfig

在這裏插入圖片描述

servlet生命週期

注意是誰實例化,一般我們直接用即可
servlet容器有Tomcat,所以是Tomcatnew一個實例
在這裏插入圖片描述
注意init()和destroy()只會出現一次
在這裏插入圖片描述

代碼操作繼承GenericServlet類

繼承GenericServlet類,在Java Resource-src下面創建一個MyServlet類,繼承GenericServlet類
在這裏插入圖片描述

加上初始化和銷燬的方法
在這裏插入圖片描述

package test01;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyServlet extends GenericServlet {
	
	//添加一個構造方法
	public MyServlet() {
		System.out.println("constructor");
	}
	
	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		//如果service方法被調用,就會輸出service
		System.out.println("service");
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("init");
	}
	
	@Override
	public void destroy() {
		System.out.println("destroy");
	}
}

然後再去配置下web.xml,告訴用戶訪問哪個地址可以訪問這個網站
工作中可能會用註解配置,但是原理要了解

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>test01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  <!-- name和class必寫,而且順序name要在前面,名字可以任寫,但是建議是要對應的類名 -->
  	<servlet-name>MyServlet</servlet-name>
  	<!-- 要完整的類名+包名 -->
  <servlet-class>test01.MyServlet</servlet-class>
  </servlet>
  <!-- mapping就是映射,裏面的name和class也是必寫 -->
  <servlet-mapping>
 	 <servlet-name>MyServlet</servlet-name>
 	  <!-- 虛擬路徑,隨便寫 -->
 	 <url-pattern>/xxx/hhh</url-pattern>
  </servlet-mapping>
</web-app>

可以配置多個servlet對象

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>test01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  <!-- name和class必寫,而且順序name要在前面,名字可以任寫,但是建議是要對應的類名 -->
  	<servlet-name>MyServlet</servlet-name>
  	<!-- 要完整的類名+包名 -->
  <servlet-class>test01.MyServlet</servlet-class>
  </servlet>
  <!-- mapping就是映射,裏面的name和class也是必寫 -->
  <servlet-mapping>
 	 <servlet-name>MyServlet</servlet-name>
 	  <!-- 虛擬路徑,隨便寫 -->
 	 <url-pattern>/xxx/hhh</url-pattern>
  </servlet-mapping>
  
    <servlet>
  <!-- name和class必寫,而且順序name要在前面,名字可以任寫,但是建議是要對應的類名 -->
  	<servlet-name>MyHttpServlet</servlet-name>
  	<!-- 要完整的類名+包名 -->
  <servlet-class>test01.MyHttpServlet</servlet-class>
  </servlet>
  <!-- mapping就是映射,裏面的name和class也是必寫 -->
  <servlet-mapping>
 	 <servlet-name>MyHttpServlet</servlet-name>
 	  <!-- 虛擬路徑,隨便寫 -->
 	 <url-pattern>/MyHttpServlet</url-pattern>
  </servlet-mapping>
  
  
</web-app>

然後去瀏覽器輸入虛擬地址,但是瀏覽器空白,因爲沒有寫out ,但是控制檯有
在這裏插入圖片描述
在這裏插入圖片描述
瀏覽器每刷新一次,都輸出service,但是init和destory只會出現一次
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

servlet類

GenericServlet抽象類

在這裏插入圖片描述

HttpServlet抽象類

繼承httpServlet類,必須要重寫doXXX方法
在這裏插入圖片描述
service,是客戶端判斷了到底是get方法還是post方式請求,然後去調用doXXX方法

servletRequest接口

在這裏插入圖片描述

servletResponse接口

在這裏插入圖片描述
在servlet裏如果獲得out這個內置對象
在這裏插入圖片描述

package test01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class MyHttpServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//out
		PrintWriter out=response.getWriter();
		out.print("<h1>MyHTTPServlet</h1>");
	}
}

out是網頁輸出,但是一般不需要這樣做,因爲跳轉即可
在這裏插入圖片描述

HttpServletRequest接口

在這裏插入圖片描述
舉例
在這裏插入圖片描述
這兩句效果一樣
在這裏插入圖片描述

servletConfig接口

在這裏插入圖片描述
servlet的上下文就是應用程序application了
在這裏插入圖片描述

如何快捷新建一個servlet類

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
此時自動生成一個servlet類

package test01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/TestServlet")//這是註解,有了註解就不要寫配置文件(就是web.xml文件),否則會報錯,("/TestServlet")裏面可改成xxx/aaa
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//可在這裏寫代碼
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

package test01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {

//這是版本號的序列id,不寫也不回報錯,但是會警告,建議加上
	private static final long serialVersionUID = 1L;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().print("<h1>xxxxxx</h1>");
	
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

在這裏插入圖片描述
不加就顯示警告,添加即可
在這裏插入圖片描述

ServletContext接口

如何使用servlet類實現登陸成功(代碼操作)

爲了避免亂碼,寫servlet時建議都寫
在這裏插入圖片描述
???待定

獲取servlet初始化參數

配置完,可以去獲取這個值
使用servletConfig接口的getInitParameter()方法獲取它的值
在這裏插入圖片描述
在這裏插入圖片描述
到所寫的HelloServlet類裏通過名字獲取servlet初始化參數
在這裏插入圖片描述
然後在瀏覽器通過名字訪問

定義全局配置

1、定義一個上下文的參數,實際上是保存在application對象裏面的
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

總結servlet

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章