MVCパターン
サーブレットを説明する前に、最初のMVCパターンをご紹介します。
- M:モデルモデルは、Java(登録商標)Beanクラスの一つとして、データを格納するためのデータ層に相当します
- V:ビュービューは、ウェブページのHTML、またはJSPなどのデータを表示するため、ページレベルに対応します
- C:コントローラコントローラは、データ処理のために、ビジネスレイヤに対応します
我々はまた、データ処理用のJava小さなスクリプトを使用することができますJSPを、使用する前に。
しかし、我々はデータを表示したいのですが、また、データ処理、JSPファイルの下のコード、コードは、読み書きが不便な汚染の原因となります。
この時間は、データ処理、データ表示、データ保存用のMVCアーキテクチャがあったが、彼らはよりよく管理することができ、分離されています。
このように、我々はJavaWebプロジェクトは3つのレベルに分かれて置くことができ、JSPはデータを表示するために使用される、サーブレットは、データを格納するために使用されるデータ、Beanクラスを処理するために使用されます。
サーブレット入門
Javaサーブレットは、それがデータベースやアプリケーションサーバとWebブラウザまたはその他のHTTPクライアントからのHTTP要求との間の中間層として使用され、Webサーバやアプリケーションサーバ上で動作するプログラムです。
手短に言えば、サーブレットは、データのリターン、またはページナビゲーション(要求転送またはリダイレクション)、続いて処理される要求をインターセプトすることができ
役割:
- ユーザの要求データを処理
- ユーザの要求に応答して、
- ページナビゲーション
- トラフィック制御処理ロジック
フィルタフィルタの紹介
フィルタは、動的に要求および応答をインターセプトすることができる、あるいは要求または応答に含まれる情報を変換します。
一の以上のフィルタは、グループまたはサーブレットサーブレットに取り付けることができます。フィルタはまた、JavaServer Pages(JSP)ファイルとHTMLページに取り付けることができます。
フィルタは、以下の目的を達成することができ、Javaサーブレットプログラミングのクラスのために用意されています。
クライアントの要求にバックエンドリソースにアクセスする前に、これらの要求をインターセプトします。サーバの応答でクライアントに送り返される前に、応答を処理します。
フィルタは、クライアントは、いくつかの前処理操作を行うための要求にいくつかのウェブアセンブリ(JSP /サーブレット)を要求したときに前を意味し、例えば、フォームの送信は、中国が含まれ、ユーザーがログに記録されているかどうか、など、あなたがデータ要求をフィルタリングすることができます中国のトランスコーディングを行う、ユーザーのログインやその他のアプリケーションかどうかを判断します
公式には、フィルタを使用して、次の例をお勧めします。
- 認証フィルタ(認証フィルタ)。
- データ圧縮フィルタ(データ圧縮フィルタ)。
- フィルターの暗号化(暗号化フィルタ)。
- リソースアクセストリガイベントフィルタ。
- 画像変換フィルタ(画像変換フィルタ)。
- ロギングおよび監査フィルタ(ログと監査フィルタ)。
- MIMEタイプ鎖フィルタ(MIME-TYPEチェーンフィルタ)。
- 標識フィルター(トークン化フィルタ)。
- XSL / Tフィルタ(XSL / Tフィルタ)、XMLコンテンツを変換します。
Lisenterリスナーを導入
リスナーもリスナー、サーブレットリスナーと呼ばれる、それはそうで操作要求、クライアントのサーバーとを監視することができます。聞くことによって、あなたは自動的に、このようなオンラインユーザーの数を監視するなど、いくつかの操作を、鼓舞することができます。
最初の輪郭に多くの、ここでどの機能で使用することができリスナーを使用しているので
二つの方法は、@WebListenerとweb.xml構成リスナーノート
サーブレットフィルタ処理
サーブレットの実装
クラスの調製は、HttpServletを、書き換えdoGetメソッドとdoPostメソッドのメソッドを継承しました
- 処理ユーザーの要求はdoGetメソッドを取得します
- doPostメソッドの後工程ユーザーのリクエスト
PS:あなたは、このHttpServletのクラスを認識していないメッセージが表示された場合は、それが依存している追加
package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author StarsOne
* @date Create in 2019/9/14 0014 20:14
* @description
*/
public class FirstServlet extends HttpServlet {
/**
* @param req 相当于request内置对象
* @param resp 相当于response内置对象
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//调用doPost方法
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//重定向页面
resp.sendRedirect(req.getContextPath()+"/hello.jsp");
}
}
2.オープンのweb.xmlは、サーブレットが配置され、リクエストをインターセプト
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>FirstServlet</servlet-name>
<!--这里要指定Servlet的类,也就是我们之前第一步编写的那个类-->
<servlet-class>controller.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--这里的FirstServlet是与上面的servlet-name属性对应,可以任意取名-->
<servlet-name>FirstServlet</servlet-name>
<!--拦截的请求,请求为hello时,就会跳转到Servlet去执行-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
下記を参照してください:の補足のurl-pattern
3.試験の説明
私のプロジェクトは1つがあり、2つのJSPを定義してindex.jsp
、他のは、hello.jsp
index.jsp
リンクがあります:
<a href="hello">点击跳转</a>
上記のリンクをクリックした後、それを処理した後、サーブレットを傍受されます。私たちのサーブレットは、実際のページのリダイレクト操作を実現しているので、その後にジャンプしますhello.jsp
ページ
PS:外部の構成は、また、注釈をマークするために使用されてもよいことを除いてweb.xmlの実施形態
そのクラスで使用されるサーブレット@WebServlet
ノートはすることができ、次のコードは、web.xmlファイルで前と同じであるエフェクトを定義し、クリックはしてジャンプしますhello.jsp
行きます
@WebServlet("/hello")
public class FirstServlet{
...
}
URLパターンのサプリメント
1.完全一致:
フォーム | マッチのURL |
---|---|
/こんにちは | http:// localhost:8080 / servletdemo /ハロー |
/hello.html | http:// localhost:8080 / servletdemo / hello.html |
私たちは、リンクのhref属性を記述する前に、ちょうどこんにちは、実際には、訪問したURLアドレスは書き込みhttp://localhost:8080/servletdemo/hello
2.パスの試合:
**に「/」文字、および「/ *」は、パスに文字列の末尾にマッチ**
フォーム | マッチのURL |
---|---|
/ユーザー/* | http:// localhost:8080 /ユーザー/ハローにhttp:// localhost:8080 /ユーザー/彼は、http:// localhostを:8080 /ユーザー/ハロー/ AA |
/hello.html | http:// localhost:8080 / servletdemo / hello.html |
3.拡張子が一致します。
URLの簡単に言えば、どのような終わり
フォーム | マッチのURL |
---|---|
*。行う | http:// localhost:8080 / servletdemo / hello.do |
*。こんにちは | http:// localhost:8080 / servletdemo / aa.hello |
*。アクション | http:// localhost:8080 / servletdemo / aa.action |
* .jspを | http:// localhost:8080 / servletdemo / aa.jsp |
4.デフォルトの試合:
これは書かないでと等価である、すべてのURLと一致
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
フィルタフィルタの実装
1. Filterインタフェースを実現するために、オーバーライドメソッド
新しいクラスを作成し、それはFilterインタフェースを実現します
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* @author StarsOne
* @date Create in 2019/9/14 0014 21:35
* @description
*/
public class FirstFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤器1已过滤...");
//必须要有doFilter方法,之后过滤结束就会跳转到匹配的url的Servlet中进行业务逻辑处理
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
web.xml構成ファイル
ここで説明するにはあまりにも多くのサーブレット構成規則とはほとんどありません
<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>FirstFilter</filter-class>
</filter>
<!--如果有多个,过滤器的顺序就是按照web.xml中的过滤器顺序进行过滤 -->
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<!--指定过滤全部的url -->
<url-pattern>/*</url-pattern>
</filter-mapping>
テスト
テストは、あなたが二回、リンク、コンソール出力をクリックした後でしょう、これは、要求をリダイレクトする側で、クライアントが二度要求を行います