1. 程式人生 > >servlet學習(一)

servlet學習(一)

  • tomcat目錄說明

  1. bin--存放tomcat的批處理檔案(startup.bat--啟動服務  shutdown.bat--關閉服務)
  2. conf--存放tomcat的配置檔案(server.xml)
  3. lib--存放tomcat中web應用需要的JAR包
  4. logs--存放tomcat的日誌
  5. temp--存放臨時檔案
  6. webapps--存放web應用(編譯好的
  7. works--存放web應用

 

  • 修改埠號(埠被佔用)

 <Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" /> 訪問埠 <Server port="8005" shutdown="SHUTDOWN"> 關閉埠 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 外部程式呼叫埠

  • servlet的生命週期

構造器:第一次請求Servlet的時候被WEB容器呼叫,而且只調用一次(一個Servlet在容器中只有一個例項) init()--初始化Servlet(第一次被請求的時候呼叫) service()--處理請求,並將請求結果進行返回。(每次被請求的時候呼叫) destory()--servlet被從WEB容器中解除安裝的時候呼叫(呼叫一次)

根據Servlet的生命週期,可以知道,一個Servlet在web應用只有一個例項,這個例項被多個執行緒共享。 servlet採用的是單例項,多執行緒模式,即在同一時刻,容器中只存在某servlet的一個例項;同時,多請求(使用者)會獲得多個執行緒來運行同一個例項。

  • servlet體系結構

  • servlet容器

  1. Java Servlet(Java伺服器小程式)是一個基於Java技術的Web元件,執行在伺服器端,由Servlet容器所管理,用於生成動態的內容。Servlet是平臺獨立的Java類,編寫一個Servlet,實際上就是按照Servlet規範編寫一個Java類。Servlet被編譯為平臺獨立的位元組碼,可以被動態地載入到支援Java技術的Web伺服器中執行。
  2. 在上述中,出現了一個概念“Servlet容器”。那麼什麼是Servlet容器呢?Servlet容器有時候也叫做Servlet引擎,是Web伺服器或應用程式伺服器的一部分,用於在傳送的請求和響應之上提供網路服務,解碼基於MIME的請求,格式化基於MIME的響應。Servlet不能獨立執行,它必須被部署到Servlet容器中,由容器來例項化和呼叫Servlet的方法,Servlet容器在Servlet的生命週期內包容和管理Servlet。
  3. 在JSP技術推出後,管理和執行Servlet/JSP的容器也稱為Web容器。Servlet容器、JSP容器,以及Web容器是同義的。 使用者通過單擊某個連結或者直接在瀏覽器的位址列中輸入URL來訪問Servlet,Web伺服器接收到該請求後,並不是將請求直接交給Servlet,而是交給Servlet容器。Servlet容器例項化Servlet,呼叫Servlet的一個特定方法對請求進行處理,併產生一個響應。這個響應由Servlet容器返回給Web伺服器,Web伺服器包裝這個響應,以HTTP響應的形式傳送給Web瀏覽器
  • Servlet的功用

​​​​​​​·讀取客戶程式傳送來的顯式資料(表單資料)  

·讀取客戶程式傳送來的隱式資料(請求報頭)

 ·生成相應的結果  

·傳送顯式的資料給客戶程式(HTML)  

·傳送隱式的資料給客戶程式(狀態程式碼和響應報頭)​​​​​​​

  • 實現一個servlet步驟

​​​​​​​1.實現Servlet介面 HelloServlet implements Servlet 2.實現介面中定義的方法 3.web.xml配置 servlet及servlet對映 4.通過瀏覽器訪問

  • web.xml配置

​​​​​​​<servlet>         <servlet-name>helloServlet</servlet-name>         <servlet-class>cn.goktech.demo01.HelloServlet</servlet-class>         <!-- 通過load-on-startup改變Servlet例項的建立時機 -->         <load-on-startup>2</load-on-startup>     </servlet>

通過load-on-startup可以改變servlet例項建立時機,越靠近0越先被建立(詳細說明點選

<servlet-mapping>     <servlet-name>helloServlet</servlet-name>     <url-pattern>/hi</url-pattern> </servlet-mapping> 1.一個servlet-name可以配置多個mapping 2.可以通過*萬用字元攔截所有所有請求     <servlet-mapping>         <servlet-name>helloServlet</servlet-name>         <url-pattern>*.html</url-pattern>     </servlet-mapping>     注意:* 和/不能共存

  • 獲取引數配置

ServletConfig-獲取區域性Servelt引數配置    <init-param>       <param-name>user</param-name>       <param-value>root</param-value>     </init-param>     <init-param>       <param-name>pass</param-name>       <param-value>123456</param-value>     </init-param>          Enumeration enu = sc.getInitParameterNames();     while(enu.hasMoreElements()){     String paraName =  (String) enu.nextElement();     System.out.println(sc.getInitParameter(paraName));      ServletContext--獲取全域性配置   <context-param>       <param-name>name</param-name>       <param-value>test</param-value>   </context-param>   <context-param>       <param-name>pass</param-name>       <param-value>123456</param-value>   </context-param>      Enumeration<String> enu2 =  sct.getInitParameterNames();         while(enu2.hasMoreElements()){         String paraName =  enu2.nextElement();         System.out.println(sct.getInitParameter(paraName));     }

  • 詳細程式碼

<?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>MyfirstWebPro</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>
 -->
	<!-- 全域性的引數配置 -->
	<context-param>
		<param-name>password</param-name>
		<param-value>123</param-value>
	</context-param>

	<servlet>
		<servlet-name>MyfirstServlet</servlet-name>
		<servlet-class>cn.gok.test.MyfirstServlet2</servlet-class>
		<init-param><!-- 區域性的引數配置 -->
			<param-name>user</param-name>
			<param-value>chen</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup><!-- 控制servlet被載入的時間 -->
	</servlet>

	<servlet-mapping>
		<servlet-name>MyfirstServlet</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>

	<servlet-mapping>
		<servlet-name>MyfirstServlet</servlet-name>
		<url-pattern>/hi</url-pattern>
	</servlet-mapping>
</web-app>
public class MyfirstServlet2 extends HttpServlet {

	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		System.out.println("執行操作");
		ServletConfig sc=this.getServletConfig();
		String ttt=sc.getInitParameter("user");
		System.out.println(ttt);
		
		ServletContext sct=sc.getServletContext();
		System.out.println(sct.getInitParameter("password"));
	}
}

​​​​​​​