Tomcat
Webサーバーソフトウェア
1.基本操作
1.1構成
プロジェクトをデプロイする方法:
1。プロジェクトをwebappsディレクトリに配置するだけで、デプロイが
簡素化されます。プロジェクトをwarパッケージにマークしてから、warパッケージをwebappsの下に配置します。2。Hostタグで
conf /server.xmlファイルを構成します。
body
<Context doBase = "プロジェクトストレージパス" path = "仮想ディレクトリ" />
3. conf \ Catalina \ localhostに任意の名前のxmlファイルを作成します。xmlファイルのファイル名であっても、ファイル
<Context doBase = "Projectstoragepath">
仮想ディレクトリに書き込みます
静的プロジェクトと動的プロジェクト:
Java動的プロジェクトのディレクトリ構造:
プロジェクトルートディレクトリ->
WEB-INFディレクトリ->
web.xml:Webプロジェクトコア構成ファイル
クラスディレクトリ:バイトコードファイルが
配置されるディレクトリlibディレクトリ:場所に依存するjarパッケージ
IDEAに統合されたTomcat:
サーブレット
1.基本的な考え方
サーバーアプレット、サーバー側で実行される小さなプログラム。本質的に、サーブレットは、ブラウザがアクセスするJavaクラスのルールを定義するインターフェイスです(Tomcat認識)。
2.クイックスタート
web.xmlでサーブレットを構成する
<!--配置Servlet-->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>demo01.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
アノテーションを使用して構成します:
@WebServlet( "/ demo")
サーブレットインターフェースを実装する
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello World");
}
3.サーブレット実行の原則
1.サーバーがクライアントブラウザからリクエストを受信すると、サーバーはリクエストURLパスを解析して、サーブレットにアクセスするためのリソースパスを取得します
。2。対応する<url-pattern>タグ本体があるかどうか、web.xmlファイルを見つけます。 content3
。その場合対応する<servlet-class>の完全なクラス名を探しています4.Tomcat
はバイトコードファイルをメモリにロードし、そのオブジェクトを作成します
5.そのメソッドを呼び出します
4.サーブレットのライフサイクル
4.1作成
デフォルトでは、サーブレットは初めてアクセスされたときに作成されます
。publicvoid init(ServletConfigサーブレットConfig):初期化メソッド。サーブレットの作成時に実行され、1回だけ実行され
ます。初めてアクセスされたときに作成されます:<load-on-startup>は負の数
です。サーバーの起動時に作成されます:<load-on-startup> 0または負の数です。
4.2サービス
public void service(ServletRequest servletRequest、ServletResponseサーブレットレスポンス)は、サーブレットメソッドにアクセスするたびに呼び出されます。サービスメソッドを提供し、サーブレットにアクセスするたびに実行され、複数回実行されます。
4.3破壊
サーブレットが破棄されたときに実行されます。サーバーがシャットダウンすると、サーブレットは破棄されます。destroyメソッドは、サーバーが正常にシャットダウンされた場合にのみ実行されます。destroyメソッドは、サーブレットが破棄される前に実行され、通常はリソースを解放するために使用され
ます。publicvoid destroy():サーバーが正常にシャットダウンされると、destroyメソッドが1回実行されます。
4.4その他
public ServletConfig getServletConfig():ServletConfigオブジェクトを取得します
public String getServletInfo():サーブレット情報、バージョン、作成者などを取得します。
5.アーキテクチャ
5.1インターフェース
サーブレットインターフェイス
GenericServlet-抽象クラス
サーブレットインターフェイスの他のメソッドは空で実装され、service()のみが抽象として使用され
ます。将来サーブレットクラスが定義されると、GenericServletを継承でき、service()メソッドを継承できます。実装されました。
@WebServlet("/demo2")
public class ServletDemo02 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("demo2");
}
}
HttpServlet-操作を簡素化するためにhttpプロトコルのカプセル化
を使用
することを推奨する抽象クラス1.HttpServlet
を継承するクラスを定義します
2.doGet / doPostを書き直します
@WebServlet("/demo3")
public class ServletDemo03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost");
}
}
HTTP
1.基本的な考え方
ハイパーテキスト転送プロトコル
:クライアントとサーバーが通信するときの送信モードを定義します。
機能:
1。TCP/ IPに基づく高度なプロトコル
2.デフォルトのポート番号803.
要求/応答モデルに基づく:1つの要求が1回限り対応応答
4.ステートレス:各要求は互いに独立しており、データを交換できません
2.データフォーマット
2.1リクエストメッセージのデータ形式
リクエストライン
リクエストメソッドリクエストURLリクエストプロトコル/バージョン
取得
1.リクエストパラメータはURLの後のリクエストラインにあります
2.リクエストされたURLの長さは制限されてい
ます3.安全性が低い
投稿
1.リクエストメソッドはリクエスト本文にあります
2 。要求されたURL長さに制限はありません。3
。比較的安全な
要求ヘッダー。
要求ヘッダー名:要求ヘッダー値
要求空白行
を個別の
要求本文
要求パラメーターとして
3.リクエスト
3.1要求と応答の原則
1. Tomcatサーバーは、リクエストyrlのリソースパスに従って対応するServletDemoオブジェクト
を作成します。2。TomcatサーバーはRequestオブジェクトとResponseオブジェクトを作成し、リクエストとメッセージのデータ
はRequestオブジェクトにカプセル化されます。3。TomcatはRequestオブジェクトとResponseオブジェクトをServiceメソッドに渡し、
4を呼び出します。プログラマーは、Requestオブジェクトを介して要求メッセージデータを取得し、Responseオブジェクトを介して応答メッセージデータを設定できます。
3.2リクエストメッセージを取得する
3.2.1リクエスト行データの取得
Get request method:String getMethod()
Get virtual directory:String getContextPath()
Get Servlet path:getServletPath()
Get get method request parameter:String getQueryString()
Get request uri:String getRequestURI()
Get protocol and version:String getProtocol()
クライアントのIPアドレスを取得します。StringgetRemoteAddr()
3.2.2リクエストヘッダーデータの取得
String getHeader(String name):リクエストヘッダーの名前に従ってリクエストヘッダーの値を取得します
Enumeration <String> getHeaderNames():すべてのリクエストヘッダー名を取得します
3.2.3リクエスト本文データの取得
ストリームオブジェクトを取得し、ストリームオブジェクトからデータを取得します
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求消息体
//获取字符流
BufferedReader br = request.getReader();
//读取数据
String line=null;
while ((line=br.readLine())!=null){
System.out.println(line);
}
}
3.3その他の機能
3.3.1リクエストパラメータを取得する一般的な方法
String getParameter(String name):パラメータ名に従ってパラメータ値を取得します
String [] getParameter(String name):パラメータ名に従ってパラメータ値の配列を取得します
Enumeration <String> getParameterNames():要求されたすべてのパラメータを取得します名前
Map <String、String []> getParameterMap():すべてのパラメーターのMapコレクションを取得します
3.3.2リクエストの転送
サーバー内でのリソースジャンプの方法
手順:
1。リクエストオブジェクトを介してリクエストフォワーダーオブジェクトを取得します
2.オブジェクトを使用して転送します
@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Hello Servlet demo2");
//转发到RequestDemo3
request.getRequestDispatcher("/requestDemo3").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
機能:
1。ブラウザのアドレスバーのパスは変更されません
2.現在のサーバーの内部リソースにのみ転送できます
3.転送はリクエストです
3.3.3データ共有
ドメインオブジェクト:スコープ内でデータを共有できるスコープを持つオブジェクト
リクエストドメイン:リクエストのスコープ。通常、転送をリクエストする複数のリソース間でデータを共有するために使用されます
setAttribute(String name、Object obj):store data
getAttribute(String name ):キーで値を取得
removeAttribute(String name):キーでキーと値のペアを削除
@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Hello Servlet demo2");
//存储数据到request域中
request.setAttribute("msg","hello");
//转发到RequestDemo3
request.getRequestDispatcher("/requestDemo3").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
@WebServlet("/requestDemo3")
public class RequestDemo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取数据
Object msg = request.getAttribute("msg");
System.out.println(msg);
System.out.println("Hello Servlet demo3");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
3.3.4ServletContextの取得
getServleContext()
4.応答
4.1応答メッセージのデータ形式
1.応答行の
構成:プロトコル/バージョン応答コードステータスステータスの説明
応答ステータスコード:サーバーはクライアントブラウザにこの要求と応答のステータスを通知します
2.応答ヘッダー
3.応答空白行
4.応答本文
4.2機能
4.2.1応答ラインの設定
形式:HTTP / 1.1 200 ok
ステータスコードの設定:setStatus(int sc)
4.2.2応答ヘッダーを設定する
setHeader(String name、String value)
//完成重定向
@WebServlet("/responseDemo1")
public class ResponseDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo1");
/* //访问这个资源会自动跳转到Demo2
//设置状态吗为302
response.setStatus(302);
//设置响应头为location
response.setHeader("location","/Day20/responseDemo2");*/
response.sendRedirect("/Day20/responseDemo2");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
リダイレクト機能:
1。アドレスバーが変更されます
2.リダイレクトは他のサイトのリソースにアクセスできます
3.リダイレクトは2つの要求です。リクエストオブジェクトを使用してデータを共有することはできません
転送の機能:
1。転送バーのパスは変更されません
。2。転送は現在のサーバーの下のリソースにのみアクセスできます。3。
転送は要求です。リクエストオブジェクトを使用してデータを共有できます
仮想ディレクトリを動的に取得します:
request.contextPath()
コードを設定します:
response.setContentType( "text / html; charset = utf-8")
4.2.3応答本体を設定する
手順を使用します
。1。出力ストリームを取得します
。2。出力ストリームを使用してデータをブラウザーに出力します。
5. ServeletContext
5.1基本概念
Webアプリケーション全体を表し、プログラムのコンテナと通信できます
5.2オブジェクトを取得する
リクエストを介して取得:getServletContext();
HttpServletを介して取得:getServletContext();
5.3機能
1.MIMEタイプの取得StringgetMimeType(String file)
2。ドメインオブジェクト:共有データ
setAttribute(String name、Object value)
getAttribute(String name)
removeAttribute(String name)
ServletContextオブジェクトスコープ:すべてのユーザーから要求されたすべてのデータ
3.ファイルの取得実パス
getRealPath(String name)