Servlet常見用法

Servlet的學習

     Servlet是一個Java程序,運行在web服務器上,用來接受和響應客戶端的http請求。
     更多的是配合動態資源來做。當然靜態資源也需要使用Servlet,只不過Tomcat已經定義了一個DefaultServlet;Tomcat實際上是Servlet的一個容器
      

當剛開始要寫Servlet時,出現了個小問題,就是在Myeclipse下找不到Servlet包,原因可能是當初從jdk1.8切換到1.7時,tomcat的jdk還沒切換過來;或者是得改一下tomcat服務器的一個Targeted Runtimes選項的配置。
所以又得鼓搗,下面是解決方案:

1.先把配置tomcat的jdk版本換到1.7,步驟爲
      1)Window->Preferences
      2)搜索tomcat 選擇7.x,在選擇jdk,接着將jdk1.8改爲1.7即可
2.修改tomcat服務器的一個Targeted Runtimes選項
     1)右擊項目名->properties
     2)選擇下面的Targeted Runtimes
     3)選擇右邊你所打開的Tomcat 服務器->apply->ok即可

Servlet簡單使用

1.一個web工程,一個服務器
2.測試運行web工程
3.新建一個類,實現Servlet接口
4.配置Servlet,告訴服務器,應用有的Servlet

先給出Servlet在web.xml配置文件的代碼

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>JavaWeb_1</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>
  
  <!-- 
  向tomcat登記,這個應用裏又這個Servlet叫s1,具體路徑是/JavaWeb_1/src/cw/Servlet/Servlet01.java
   -->
  <servlet>
  	<servlet-name>qq</servlet-name>
  	<servlet-class>cw.Servlet.Servlet01</servlet-class>
  </servlet>
    <!-- 
  註冊Servlet的映射,servlet-name,找到上面註冊的具體Servlet,url-pattern:在地址欄上的path
   -->
  <servlet-mapping>
  	<servlet-name>qq</servlet-name>
  	<url-pattern>/a</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>kk</servlet-name>
  	<servlet-class>cw.Servlet.Servlet02</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>kk</servlet-name>
  	<url-pattern>/b</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>mm</servlet-name>
  	<servlet-class>cw.Servlet.Servlet03</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>mm</servlet-name>
  	<url-pattern>/c</url-pattern>
  </servlet-mapping>
  
   <servlet>
  	<servlet-name>gg</servlet-name>
  	<servlet-class>cw.Servlet.Servlet04</servlet-class>
  	<!-- 讓servlet提前加的一個標籤,數值越小,在服務器創建的時間越早 -->
  	<load-on-startup>2</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>gg</servlet-name>
  	<url-pattern>/d</url-pattern>
  </servlet-mapping>
    
   <servlet>
  	<servlet-name>hh</servlet-name>
  	<servlet-class>cw.Servlet.Servlet05</servlet-class>
	<!-- 可以添加初始化參數 -->
	<init-param>
		<param-name>add</param-name>
		<param-value>haiK</param-value>
	</init-param>
	<init-param>
		<param-name>add2</param-name>
		<param-value>haiK2</param-value>
	</init-param>
	<init-param>
		<param-name>add3</param-name>
		<param-value>haiK3</param-value>
	</init-param>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>hh</servlet-name>
  	<url-pattern>/e</url-pattern>
  </servlet-mapping>
  
</web-app>

1.Servlet的通用寫法:

Servlet是一個接口,GenericServlet是一個實現Servlet的類,HttpServlet是GenericServlet的子類。HttpServlet用於處理http的請求,可以定義一個類,繼承HttpServlet複寫doGet和doPost.

Servlet01.java

package cw.Servlet;

import java.io.IOException;

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

public class Servlet01 implements Servlet{

	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("hello world");
	}
	public void destroy() {
	}
	public ServletConfig getServletConfig() {	
		return null;
	}
	public String getServletInfo() {
		
		return null;
	}
	public void init(ServletConfig arg0) throws ServletException {
	}
}

Servlet02.java

package cw.Servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet02 extends HttpServlet{
	
	//Get請求會來這個方法
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("get.....");
	}
	
	//Post請求會來這個方法
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("Post.....");
	}
}

2.Servlet的生命週期

生命週期:從創建到銷燬的一段時間
生命週期的方法:從創建到銷燬,所調用的方法  

1)創建該servlet的實例時,就執行該方法,默認情況是訪問該servlet,就會創建實例.一個servlet只會初始化一次,init()方法只會執行一次
2)只要客戶端來了一個請求,那麼就執行service方法,該方法可以被執行很多次.一次請求,對應一次service方法的調用.
3)servlet銷燬時,會調用該方法.該項目從tomcat的裏面移除會調用;正常關閉tomcat就會執行shutdown.bat.

Servlet03.java

package cw.Servlet;

import java.io.IOException;

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

public class Servlet03 implements Servlet{
	/*
	 1.創建該servlet的實例時,就執行該方法,默認情況是訪問該servlet,就會創建實例.
	 一個servlet只會初始化一次,init()方法只會執行一次
	 */
	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("Servlet初始化");
	}
	/*
	2.只要客戶端來了一個請求,那麼就執行這個方法
	該方法可以被執行很多次,一次請求,對應一次service方法的調用
	 */
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("++service方法被調用");
	}
	/*
	 3.servlet銷燬時,會調用該方法.
	 	1)該項目從tomcat的裏面移除會調用
	 	2)正常關閉tomcat就會執行shutdown.bat
	 */
	public void destroy() {
	
	}
	public ServletConfig getServletConfig() {
		
		return null;
	}

	public String getServletInfo() {
		
		return null;
	}
}

3.用於讓servlet創建實例的時機提前的寫法:

(1)因爲在默認情況下,只有在初次訪問servlet時,纔會執行init方法。而我們有時需要在這個方法裏面執行一些初始工作,所以我們選擇讓這個初始化的時間提前.
(2)在配置時,使用load-on-startup元素來指定,給定的數字越小,啓動的實際越早.

Servlet04.java

package cw.Servlet;

import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Servlet04 implements Servlet{

	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("Servlet初始化+1");
	}
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
	}
	public void destroy() {
	
	}
	public ServletConfig getServletConfig() {
		
		return null;
	}

	public String getServletInfo() {
		
		return null;
	}
}

4.ServletConfig的作用:

ServletConfig:可以獲取servlet在配置的一些信息
用途:當自己開發的一些應用,使用別人的技術,它的代碼放置在了自己的servlet類裏面;剛好這個servlet裏面需要一個數字或者叫做變量值,但是這個值不能是固定的,所以要求使用到這個servlet的開發人員,在註冊servlet的時候,必須要在web.xml裏面聲明init-params

Servlet05.java

package cw.Servlet;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet05 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//1.得到servlet配置對象,專門用於在配置servlet的信息
		ServletConfig sc=getServletConfig();
		//2.獲取servlet名稱,獲取到的是配置servlet裏面servlet-nbame的文本內容
		String scName=sc.getServletName();
		System.out.println(scName);
		//3.可以獲取某一個參數
		String add=sc.getInitParameter("add");
		if(add==null){
			throw new IllegalArgumentException("servlet在配置時,一定要寫add這個參數");
		}else{
			System.out.println("add....");
		}
		System.out.println(add);	//haiK
		//4.可以獲取所有參數的名稱
		Enumeration<String> names=sc.getInitParameterNames();
		//遍歷取出所有的參數名稱
		while(names.hasMoreElements()){
			String name=(String)names.nextElement();
			String value=sc.getInitParameter("name");
			System.out.println(name+"..."+value);  
		}
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException { 
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章