1.サーブレットの概要
- 概念
サーブレットは、サーバー上で実行されるJavaアップルトです。Sunは、クライアント要求を処理し、ブラウザーの動的リソースに応答するための一連の仕様(インターフェース)を提供します。しかし、servletの本質はjavaコードであり、javaAPIを介してコンテンツをクライアントに動的に出力します。
- サーブレット仕様:3つの技術的ポイントが含まれています
- サーブレットテクノロジー
- フィルター技術-フィルター
- リスナーテクノロジー-リスナー
2、サーブレットAPI(ライフサイクル)
- サーブレットインターフェース方式
- init(ServletConfig config)
が実行されるとき:サーブレットオブジェクトが作成されるときに実行されます。通常web.xmlに書き込むいくつかの構成情報は、initメソッドで取得できます。
ServletConfig:サーブレットオブジェクトの構成情報を表します - サービス(ServletRequestリクエスト、ServletResponseレスポンス)
が実行されると、すべてのリクエストが実行されます
ServletRequest :リクエストに代わって、ServletRequestはhttpリクエスト情報をカプセル化します
ServletResponse:カプセル化される情報が応答であるという応答に代わって - destroy()
が実行されるとき:サーブレットが破棄されるときに実行されます
- HttpServletクラスのメソッド
- 初期化()
- doGet(HttpServletRequestリクエスト、HttpServletResponseレスポンス)
- doPost(HttpServletRequestリクエスト、HttpServletResponseレスポンス)
- 破壊()
3)インタビューのための3つの質問:
- サーブレットが作成されたとき
オブジェクトは、デフォルトでサーブレットに初めてアクセスしたときに作成されます - サーブレットはいつ破棄されますか
サーバーを閉じると、サーブレットは破棄されます - 訪問するたびに実行する必要があるメソッド
service(ServletRequest req、ServletResponse res)方法
着信パラメータについては、上記の最初の情報を参照してください。
3、サーブレット構成
まずweb.xml
、よく使われるものをいくつか書きます
<servlet>
<servlet-name>ASD</servlet-name>
<servlet-class>servlet.QuickStartServlet</servlet-class>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://sort</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ASD</servlet-name>
<url-pattern>/quickStartServlet</url-pattern>
<url-pattern>/aaa/bbb/ccc/*</url-pattern>
</servlet-mapping>
ここで言及する:最初のサーブレットのservelt-nameのASDと2番目のservlet-mappingのservlet-nameのASDは同じである必要があります
1.構成情報に関するいくつかの注意事項:
1.<url-pattern></url-pattern>
マッチング方法
a)構成されたリソースと完全に同じである場合、完全一致によってアクセスされたリソースのみにアクセスできます。
<url-pattern>/quickStartServlet</url-pattern>
標準アクセス方式
b)ディレクトリマッチング形式:/ virtual directory ... /、ここで*は任意の*を表します
<url-pattern>/aaa/bbb/ccc/*</url-pattern
このとき、ブラウザでサーブレットにアクセスするときは、正しい/ aaa / bbb / cccを入力する限り。何でも入力できます
c)拡張子マッチング形式:*。拡張子
<url-pattern>*.abcd</url-pattern>
このとき、ブラウザでサーブレットにアクセスするときは、その前に入力するだけです。後で.abcdを入力できます
注:2番目と3番目のタイプに/aaa/bbb/*.abcdを混在させないでください(間違っています)
2.サーバーがサーブレット構成のインスタンス化を開始します
最初のレビュー:
サーブレットはいつ作成されましたか:デフォルトでは、最初の訪問時に作成されます。
<load-on-startup>
サーバーの起動時にサーバーの起動時に作成される構成サーブレットオブジェクトを追加する必要がある場合、サーブレットの構成時に。
<!--servlet在服务器启动时创建对象-->
<!--数字代表优先级 数字越小 优先级越高-->
<load-on-startup>1</load-on-startup>
これは、上記のQuickServletを再度実行するときであり、Webサイトにアクセスしていないときは、initメソッドがサーバーですでに実行されています。メインサーバーが起動すると、サーブレットが作成されているためです。
3.デフォルトのサーブレット
/をurl-patternで構成できます。
これは、サーブレットがデフォルトのサーブレットであることを意味します。デフォルトのサーブレットとは何ですか。
アクセスリソースのアドレスにあるすべてのサーブレットが一致しない場合、デフォルトのサーブレットが処理を担当します
実際、Webアプリケーション内のすべてのリソースの応答は、静的リソースを含め、サーブレットが担当します。
4.ウェルカムページ
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
デフォルトでは、jspファイルとhtmlファイルに自動的にアクセスします
2. Servletでこれらの構成を取得するにはどうすればよいですか?
public class QuickStratServlet implements Servlet{
@Override
public void init(ServletConfig config) throws ServletException {
//1、获得servlet的name----<servlet-name>ASD</servlet-name>
String servletName = config.getServletName();
System.out.println(servletName);//ASD
//2、获得该servlet的初始化的参数
String initParameter = config.getInitParameter("url");
System.out.println(initParameter);
//3、获得Servletcontext对象
ServletContext servletContext = config.getServletContext();
System.out.println("init running....");
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("QuickStratServlet running....");
res.getWriter().write("QuickStratServlet running....");
}
@Override
public void destroy() {
System.out.println("destroy running....");
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
}
出力結果は次のとおりです。ASD、jdbc:mysql:// sort、initrunning…
4、ServletContextオブジェクト
1.1。ServletContextオブジェクトとはServletContext
は、Webアプリケーションの環境(コンテキスト)オブジェクトを表します。ServletContextオブジェクトの内部カプセル化は、Webアプリケーションの情報です。ServletContextオブジェクトには、Webアプリケーションの
問題が1つだけあります。
- Webアプリケーションには複数のサーブレットオブジェクトがあります
- ServletContextオブジェクトのライフサイクル?
作成:Webアプリケーションがロードされます(サーバーがWebアプリケーションを起動または公開します(前提条件、サーバーの起動状態)。
破棄:Webアプリケーションがアンインストールされます(サーバーがシャットダウンし、Webアプリケーションを削除します)
2.2。ServletContextオブジェクトを取得する方法
- ServletContext servletContext = config.getServletContext();
- ServletContext servletContext = this.getServletContext();
3.3。効果
-
Webアプリケーションのグローバル初期化パラメータを取得します。
現時点では、サーブレットで構成しておらず、グローバルになっています。web.xmlで初期化パラメータを構成します
<?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>WEB19</display-name>
<!--配置全局的初始化参数-->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
次に、コンテキストオブジェクトを介してパラメータを取得します
//获得ServletContext对象
ServletContext servletContext = getServletContext();
//1.获得初始化参数
String ininParamter = servletContext.getInitParameter("driver");
System.out.println(ininParamter);
印刷結果は次のとおりです。param-valuecom.mysql.jdbc.Driverのコンテンツ
- Webアプリケーション内の任意のリソースの絶対パスを取得します(重要重要)
方法String path = context.getRealPath(相对于该web应用的相对地址)
:;
ここで取得したパスは、Tomcatに公開されたプロジェクトに関連していることに注意してください。
ケース:図に示すようにabcd.txtを作成します。絶対パスを個別に取得する
ServletContext servletContext = getServletContext();
//获得a.txt
String realPath_A = servletContext.getRealPath("a.txt");
//获得b.txt
String realPath_B = servletContext.getRealPath("WEB-INF/b.txt");
//获得c.txt
String realPath_C = servletContext.getRealPath("WEB-INF/classes/c.txt");
//d获取不到
//读src(classes)下的资源是通过类加载器专门加载的
ContextServlet.class.getClassLoader().getResource("d.txt").getPath();
説明:公開プロジェクトがWEB-CONTENTの下のコンテンツを公開することであり、d.txtがWEB-CONTENTの下のコンテンツではなく、Webプロジェクトの下のファイルであるため、d.txtが見つからないのはなぜですか
-
ServletContextはドメインオブジェクトです(重要重要)
-
ドメインオブジェクトとは何ですか?ドメインとは何ですか?
データが保存される領域は、ドメインオブジェクト
ServletContextドメインオブジェクトのスコープです。Webアプリケーション全体(すべてのWebリソースはservletcontextドメイン内のデータに自由にアクセスでき、データを共有できます)ドメインオブジェクトの一般的な方法:
setAtrribute(String name,Object obj)
;
getAttribute(String name)
;
removeAttribute(String name)
;