servlet學習(一)
-
tomcat目錄說明
- bin--存放tomcat的批處理檔案(startup.bat--啟動服務 shutdown.bat--關閉服務)
- conf--存放tomcat的配置檔案(server.xml)
- lib--存放tomcat中web應用需要的JAR包
- logs--存放tomcat的日誌
- temp--存放臨時檔案
- webapps--存放web應用(編譯好的
- 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容器
- Java Servlet(Java伺服器小程式)是一個基於Java技術的Web元件,執行在伺服器端,由Servlet容器所管理,用於生成動態的內容。Servlet是平臺獨立的Java類,編寫一個Servlet,實際上就是按照Servlet規範編寫一個Java類。Servlet被編譯為平臺獨立的位元組碼,可以被動態地載入到支援Java技術的Web伺服器中執行。
- 在上述中,出現了一個概念“Servlet容器”。那麼什麼是Servlet容器呢?Servlet容器有時候也叫做Servlet引擎,是Web伺服器或應用程式伺服器的一部分,用於在傳送的請求和響應之上提供網路服務,解碼基於MIME的請求,格式化基於MIME的響應。Servlet不能獨立執行,它必須被部署到Servlet容器中,由容器來例項化和呼叫Servlet的方法,Servlet容器在Servlet的生命週期內包容和管理Servlet。
- 在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"));
}
}