国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Servlet學習 ——Web部分第十天

2019-11-11 07:39:31
字體:
來源:轉載
供稿:網友

Servlet學習 ——Web部分第十天

小知識點

Servlet是java web 的三大組件之一,它屬于動態資源。java web 的三大組件有Servlet,Filter,Listener。常見的端口號:http/80 ; smtp/25 ; pop3/110 ; ftp/23 ; https/443

1. Servlet簡介

Servlet是用來完成客戶端向服務器發出請求的處理行為的編寫。即接受請求數據,處理請求,完成響應。實現Servlet的方式有我們自己編寫,通過繼承或實現接口的方式有關接口和類信息:javax.servlet.Servlet 接口 ; javax.servlet.GenericServlet 抽象類 ;javax.servlet.http.HttpServlet 抽象類

特性

Servlet是單例類,可以實現多個Servlet類,但每個類只有一個對象。線程不安全,它存在多個客戶端訪問同一個Servlet資源,所以不要在Servlet類中實現可以同時讀和寫的方法 。Servlet由我們編寫,但是由服務器去創建對象,并且由服務器來調用相應的方法。

寫完后的Servlet實現要在WEB-INF下的web.xml中編寫xml信息

<servlet> <!--servlet標簽中存放的信息就是ServletConfig的信息,并且通過以下方法獲取關鍵的信息--> <!--public String getInitParameter(String name) 通過指定的名稱獲取指定初始化參數的值--> <!--public Enumeration getInitParameterNames() 獲取所有初始化參數的名稱 --> <!--public ServletContext getServletContext()獲取Servet上下文對象 --> <!--public String getServletName() :用于獲取servlet-name標簽下的內容--> <!--servlet-name標簽是自定義訪問名稱,用于servlet-mapping標簽中的servlet-name標簽來相匹配--> <!--servlet-class 中存放的應是classes目錄下實現的MySerlevt的類名--> <!--init-param標簽下設置的是初始化參數--> <!--load-on-startup表示當服務器啟動時就訪問該Servlet參數為多個Servlet標簽時的執行順序--> <servlet-name>abc</servlet-name> <servlet-class>包名.MyServlet</servlet-class> <load-on-startup>0</load-on-startup> <init-param> <param-name>p1</param-name> <param-value>v1</param-value> </init-param> <init-param> <param-name>p2</param-name> <param-value>v2</param-value> </init-param><servlet><servlet-mapping> <servlet-name>abc</servlet-name> <!--url-pattern 決定了當服務器訪問該Servlet的路徑名稱,可以為多個標簽常用的標簽表達方式如下三種--> <!--通配符*只能出現在末尾或者開頭--> <!--表示serlevtpath地址下的的所有路徑對應此servlet--> <url-pattern>/servletpath/*</url-pattern> <!--表示對應的擴展名為.xxxx的路徑對應此servlet--> <url-pattern>*.xxx</url-pattern> <!--表示所有路徑都對應此servlet--> <url-pattern>/*</url-pattern></servlet-mapping>

通過實現Servlet接口實現MyServlet

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 MyServlet implements Servlet { @Override public void destroy() { //該方法會在Servlet對象銷毀之前執行,并且只執行一次。 } @Override public ServletConfig getServletConfig() { //獲取Servlet的配置信息 return null; } @Override public String getServletInfo() { //獲取Servlet的信息 return null; } @Override public void init(ServletConfig config) throws ServletException { //由Tomcat服務器來調用并且只調用一次 //該方法會在Servlet對象創建之后馬上執行,并且只執行一次。 } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { //該方法會被多次調用,用于處理每次發出的請求,并做出回應或處理。 }}

通過實現GenericServlet接口實現MyServlet

GenericServlet該類視為了方便程序員對Servlet接口的重復操作的編寫創建的抽象類以下代碼即為GenericServlet功能的主要實現。MyServlet就可以模擬GenericServlet存在的目的當繼承GenericServlet類時,重寫無參的init()方法即可。//手寫GenericServlet類的源碼實現import java.io.IOException;import java.util.Enumeration;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class MyServlet implements Servlet,ServletConfig{ //創建ServletConfig對象,方便服務調用, PRivate ServletConfig config; @Override public void destroy() { } @Override public ServletConfig getServletConfig() { return this.config; } //如下四個方法是是實現的ServletConfig接口中的方法 public String getInitParameter(String name) { return getServletConfig().getInitParameter(name); } public Enumeration getInitParameterNames() { return getServletConfig().getInitParameterNames(); } public ServletContext getServletContext() { return getServletConfig().getServletContext(); } public String getServletName() { return getServletConfig().getServletName(); } @Override public String getServletInfo() { return null; } @Override public void init(ServletConfig servletConfig) throws ServletException { this.config = servletConfig; init(); } //通過創建無參init方法方便子類繼承并能夠正常的享有父類擁有的信息 public void init() throws ServletException { } @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { }}

通過繼承HttpServlet接口實現MyServlet

HttpServlet是專門對GenericServlet類中ServletRequest, ServletResponse 的參數進行強轉來處理Http的請求繼承該類后只需實現其中的doGet()和doPost()方法即可如果沒有實現其中的一種方法而用該種方式請求瀏覽器則瀏覽器會報405狀態碼,表示客戶端向服務器請求方式的錯誤。package text.web.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }}

2.ServletContext關鍵類

一個項目只有一個ServletContext對象,他的創建和銷毀是對應服務器的創建和銷毀。

它可以被個Servlet來獲取該對象,它可以被用來給多個Servlet對象傳遞數據。

獲取ServletContext對象的方式

ServletConfig中的getServletContext() ;GenericServlet中的getSerletContext() ;Httpsession中的getSerletContext() ;SerletContextEvent中的getSerletContext() ;

ServletContext是javaweb的四大域對象之一

四大域對象分別是: PageContext;ServletRequest;HttpSession ;ServletContext所有域對象內部有一個Map。用來儲存數據

ServletContext操作數據的方法

void setAttribute(String name, Object object) 保存一個域信息,和map相同的是相同的name會覆蓋object ;Object getAttribute(String name) 得到name的域信息void removeAttribute(String name) 刪除name的鍵值對信息;Enumeration getAttributeNames() 得到所有的name的域信息

ServletContext的對象可以獲取真實的路徑

可以使用ServletContext來獲取web應用下的資源文件,String realPath = servletContext.getRealPath("/WEB下的文件") ;//realPath返回的是帶盤符的真實路徑可以使用ServletContext來獲取web應用下的資源流,InputStream in = servletContext.getResourceAsStream("/WEB下的文件") ;可以使用ServletContext來獲取web目錄下的所有資源Set set = servletContext.getResourcePaths("/WEB下的文件") ;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 克拉玛依市| 德格县| 综艺| 永善县| 长葛市| 赣榆县| 海门市| 江城| 梁平县| 巴彦淖尔市| 富锦市| 罗江县| 钦州市| 都安| 甘德县| 论坛| 滨海县| 台东市| 九台市| 中宁县| 彭州市| 吉木萨尔县| 郁南县| 法库县| 惠安县| 内丘县| 辽宁省| 蒙自县| 洛扎县| 深水埗区| 富平县| 五家渠市| 青阳县| 正蓝旗| 呼和浩特市| 永昌县| 利辛县| 平湖市| 桐柏县| 沙坪坝区| 洛宁县|