Servlet 簡單入門

1、通用初級階段html

1. 得寫一個 web 工程,一個服務器java

切換另外一個工做空間 -------- File ------- switchworkspace 。
修改字體,Genernl 中 app 中 color 中 basic 中 test ,改編碼。

再配服務器,右鍵 new 一個 server ,按着感受來,再而後 open ,點擊第二個,保存all。

創建一個 Dymamic web Servlet,輸入名字, 3.0 改爲 2.5 。

在工程裏創建一個 html 文件,如何在其餘電腦訪問這個 html 文件。在工程處右鍵點擊 Run as ...

  就能夠在其餘電腦上訪問了:       http://localhost:8080/HelloServlet/index.html

2. 測試運行 web 工程。web

1. 新建一個類, 實現Servlet接口瀏覽器

public class HelloServlet implements Servlet{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		System.out.println("hello,zhangkaijian");
		
	}
	
}

只在 service 中添加語句。tomcat

2. 配置Servlet , 用意: 告訴服務器,咱們的應用有這麼些個servlet服務器

在webContent/WEB-INF/web.xml裏面寫上如下內容。


		  <!-- 向tomcat報告, 我這個應用裏面有這個servlet, 名字叫作HelloServlet , 具體的路徑是com.itheima.servlet.HelloServlet -->
		  <servlet>
		  	<servlet-name>HelloServlet</servlet-name>
		  	<servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
		  </servlet>
		  全路徑就是包名+類名
		  <!-- 註冊servlet的映射。  servletName : 找到上面註冊的具體servlet,  url-pattern: 在地址欄上的path 必定要以/打頭 -->
		  <servlet-mapping>
		  	<servlet-name>HelloServlet</servlet-name>
		  	<url-pattern>/a</url-pattern>
		  </servlet-mapping>

		3. 在地址欄上輸入 http://localhost:8080/項目名稱/a
</welcome-file-list>
  
  <servlet>
  	<servlet-name>HelloServlet</servlet-name>
  	<servlet-class>com.heima.servlet.HelloServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>HelloServlet</servlet-name>
  	<url-pattern>/a</url-pattern>
  </servlet-mapping>
  
  
</web-app>

先後的 servlet -name 必須相同app

a.(向tomcat報告, 我這個應用裏面有這個servlet, 名字叫作HelloServlet , 具體的路徑是com.itheima.servlet.HelloServlet)前面一段修改的內容eclipse

b.(註冊servlet的映射。 servletName : 找到上面註冊的具體servlet, url-pattern: 在地址欄上的path 必定要以/打頭) -------後面一段ide

配置好了以後,重置Tomcat服務器,在瀏覽器中輸入 http://localhost:8080/HelloServlet/a ,回頭看 eclipse 中的 setup 信息 。有信息出現就說明成功了。post

在 弄全路徑時,

<servlet-class>com.heima.servlet.HelloServlet02</servlet-class>

在類的下線點擊,再複製全路徑。

2、利用繼承關係,重寫方法。

<servlet>
  	<servlet-name>HelloServlet02</servlet-name>
  	<servlet-class>com.heima.servlet.HelloServlet02</servlet-class>
  </servlet>
  
  <servlet-mapping>
  
  <servlet-name>HelloServlet02</servlet-name>
  <url-pattern>/HelloServlet02</url-pattern>
  
  </servlet-mapping>

繼承類

public class HelloServlet02 extends HttpServlet {

//	@Override
//	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
//		System.out.println("hellodaishiqi02-----");
//	}
		
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doGet(req, resp);
		System.out.println("get--");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
		System.out.println("post--");
	}
}

在瀏覽器裏輸入:http://localhost:8080/HelloServlet/HelloServlet02,便可。

 

3、Servlet 生命週期

在其中 doGet 和 doPost 方法中 ,都不用 super 中父類的方法。,直接刪掉。

init方法

在建立該servlet的實例時,就執行該方法。
		一個servlet只會初始化一次, init方法只會執行一次
		默認狀況下是 : 初次訪問該servlet,纔會建立實例

service方法

只要客戶端來了一個請求,那麼就執行這個方法了。
	 	 該方法能夠被執行不少次。 一次請求,對應一次 service 方法的調用

destroy方法

servlet 銷燬的時候,就會執行該方法
		
		  	1. 該項目從 tomcat 的裏面移除。
		  	2. 正常關閉 tomcat 就會執行 shutdown.bat

doGet 和 doPost不算生命週期方法,所謂的生命週期方法是指,從對象的建立到銷燬必定會執行的方法, 可是這兩個方法,不必定會執行。

 

讓Servlet建立實例的時機 提早。

 

  1. 默認狀況下,只有初次訪問 Servlet 時纔會實例化。纔會執行 init 方法。有的時候,咱們可能須要在這個方法裏面執行一些初始化工做,甚至是作一些比較耗時的邏輯。
  2. 那麼這個時候,初次訪問,可能會在init方法中逗留過久的時間。 那麼有沒有方法可讓這個初始化的時機提早一點。
  3. 在配置的時候, 使用load-on-startup元素來指定, 給定的數字越小,啓動的時機就越早。 通常不寫負數, 從2開始便可。
<servlet>
		  	  <servlet-name>HelloServlet04</servlet-name>
		  	  <servlet-class>com.itheima.servlet.HelloServlet04</servlet-class>
		  	  <load-on-startup>2</load-on-startup>
		    </servlet>

 

ServletConfig

在測試類中

public class HelloServletConfig extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//  獲得servlet配置對象 。 專門用於在配置servlet的信息
         ServletConfig config = getServletConfig();
        
         //獲取到的是配置servlet裏面 servlet-name 的文本內容
		String servletName = config.getServletName();
		System.out.println("servletName"+servletName);
		
        //二、。 能夠獲取具體的某一個參數。 

		String address = config.getInitParameter("address");
		System.out.println("address="+address);
		
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req,resp);
		
	}
}

在上面 doGet 方法中 ,還能夠遍歷出全部參數和名稱。

Enumeration<String> names = config.getInitParameterNames();
		//遍歷取出全部的參數名稱
				while (names.hasMoreElements()) {
					String key = (String) names.nextElement();
					String value = config.getInitParameter(key);
					System.out.println("key==="+key + " value="+value);
					
				}

 

在 web.xml 中

<servlet>
		  	<servlet-name>aa</servlet-name>
		  	<servlet-class>com.heima.servlet.HelloServletConfig</servlet-class>
  	
		  	<init-param>
			  	<param-name>address</param-name>
			  	<param-value>beijing...</param-value>
		  	</init-param>
  	
  	
  </servlet>
  
  <servlet-mapping>
		  
		  <servlet-name>aa</servlet-name>
		  <url-pattern>/HelloServletConfig</url-pattern>
  
  </servlet-mapping>
相關文章
相關標籤/搜索