サーブレット&JSP&フィルター

サーブレット&JSP&フィルター

グラフTB B [サーブレット] C [JSP] B - > D [基本原理と実装プロセス<BR> INIT /サービス/行う。] B - > H [サービス&反映] B - > I [シングルトン] C - > E [暗黙オブジェクト] C - > F [JSTL&EL] C - > G [JavaBeanの<BR>セッション】

サーブレット

サーブレットは、(Tomcatなど)のWebサーバはユーザのアクセスリンク経路異なるプロセスによってサーブレットへの要求に基づいてそれらの応答が返され、コースのweb.xmlの一般的なルーティング構成は、使用され、サーバ側で実行されているオブジェクトであります注釈の形態です。

機能

  • シングルトン
  • 初期化要求のサーブレットの例

基本的な

以下は、HTML&サーブレット&web.xmlの例です

HTML(アクションとメソッドの値に注意してください):

...
<form action="login" method="post">
账号: <input type="text" name="name"> <br>
密码: <input type="password" name="password"> <br>
<input type="submit" value="登录">
</form>
...

web.xmlファイル(パスとURLの間にサーブレットマッピングを注意してください):

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>LoginServlet</servlet-class>
        <load-on-startup>10</load-on-startup> 
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>  
</web-app>

サーブレット:

public class LoginServlet extends HttpServlet{
    // @Override // 当前函数的作用见下
    // public void service(HttpServletRequest request, HttpServletResponse response){...}
    // public void init(ServletConfig config) {...} // 继承于父类,Servlet 的构造函数执行后会自动执行此函数,只会执行一次
 	// 处理 GET 请求
    public void doGet(HttpServletRequest request, HttpServletResponse response){
        try {
            response.getWriter().println("<h1>Hello Servlet!</h1>");
            response.getWriter().println(new Date().toLocaleString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 处理 POST 请求
    public void doPost(HttpServletRequest request, HttpServletResponse response){
        try{
            String name = request.getParameter("name");
        	String password = request.getParameter("password");
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

各サーブレットは、必要があるのHttpServletを継承しますHttpServletをが有するサービスメンバー関数を、この方法は、デフォルトサービス要求を決定し、(GETまたはPOST)現在の関数法に従ってdoGetメソッドまたはdoPostメソッドを呼び出すこと。次のようにフィルタ・書き換え可能な拘束サービス・反射は、異なるサーブレット処理要求を実行することができます。

フィルタは、ユーザの要求、から取られた次のコードセクションフィルタオブジェクトを使用して解決しました:

// 假设请求的方法是 ***/admin_category_list
if(uri.startsWith("/admin_")){		
	String servletPath = StringUtils.substringBetween(uri,"_", "_") + "Servlet"; // 确定 Servlet
	String method = StringUtils.substringAfterLast(uri,"_" );
	request.setAttribute("method", method); // 确定方法
	req.getRequestDispatcher("/" + servletPath).forward(request, response); // 执行 Servlet
	return;
}

(この時とdoGetメソッドdoPostメソッドを必要としない)反射法を使用して機能し、サービス選択及び実行サーブレットをオーバーライドします。

@Override
public void service(HttpServletRequest request, HttpServletResponse response) {
    ...
    try {
        /*借助反射,调用对应的方法*/
        String method = (String) request.getAttribute("method");
        Method m = this.getClass().getMethod(method, javax.servlet.http.HttpServletRequest.class,
                                             javax.servlet.http.HttpServletResponse.class,Page.class);
        String redirect = m.invoke(this,request, response,page).toString();
    }
    ...
}

一般的な方法

  • ジャンプ
    • サーバーのジャンプ(応答を返すコンテンツのジャンプが、ブラウザのアドレスを変更しないでください):request.getRequestDispatcher("success.html").forward(request, response);
    • (サーバーがクライアントにリダイレクトアドレスを送信)クライアントを移動:response.sendRedirect("fail.html");
  • 開始からサーブレット
    • web.xml構成では<load-on-startup>10</load-on-startup>、サーブレットの発売以来、達成することができます

JSP

JSP、Javaテクノロジは、HTMLクラスで直接コードを書くことができ、JSPは最終的にサーブレットに変換されます。後者はHttpServletをから継承しながらJSPは、HttpJspBaseから継承されました。

JSPの例

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
<%
    List<String> words = new ArrayList<String>();
    words.add("today");
    words.add("is");
    words.add("great");
%>
<table width="200px" align="center" border="1" cellspacing="0">
<%for (String word : words) {%>
<tr>
    <td><%=word%></td>
</tr>
<%}%>
</table>

ページ出力:

今日
あります
すばらしいです

JSP組成

JSPページこれらの要素:

  1. 静的コンテンツ、HTML、CSS、JavaScriptのなど
  2. 指示<%@开始 %>などの終了、<%@page import="java.util.*"%>
  3. <%=%>HTMLの出力部、のため<%="hello jsp"%>に類似<%out.println("hello jsp");%>
  4. スクリプトレットは、中<%%>間、あなたは、任意のJavaコードを書くことができます
  5. 中の文<%!%>の間には、フィールドやメソッドを宣言することができます。しかし、お勧めできません。
  6. アクション<jsp:include page="Filename" >jsp別のページのページを含みます。
  7. なお、<%-- -- %>HTMLコメントとは異なり、<!-- -->通じjspコメント、ブラウザが対応するコードがサーブレットでコメントアウト対応を見ることができません

暗黙オブジェクト

明示的な定義オブジェクトを使用することはできません。すなわち9つのJSP暗黙オブジェクト、の合計:

  • 出力のうち、アウト要求、応答、
  • pageContext、セッション、アプリケーション、現在のページを表す、セッション、グローバルスコープオブジェクト
  • サーブレットのインスタンスを実行するときにJSPは、サーブレットクラスにコンパイルされます。代表であるページこの
  • 設定ファイル、設定はweb.xmlにいくつかの初期化パラメータを取得することができます
  • 例外、例外オブジェクト、例外処理を使用するために指定したページ

JSTL

JSTL JSP標準タグライブラリは、JSTLはオープンなど、Javaの開発は、HTMLタグを使用してJSPに機能することができます。

共通の機能タグ:FMT、FN

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%-- 指明后续的标签使用都会以<c: 开头 --%>

<c:set var="name" value="${'gareen'}" scope="request" />
通过标签获取name: <c:out value="${name}" /> <br> <%-- 类似<%=request.getAttribute("name")%> --%>

<c:remove var="name" scope="request" /> <br>
通过标签获取name: <c:out value="${name}" /> <br>

<c:set var="hp" value="${3}" scope="request" /> <%-- 循环示例 --%>
<c:choose>
    <c:when test="${hp<5}">
        <p>这个英雄要挂了</p>
    </c:when>
    <c:otherwise>
        <p>这个英雄觉得自己还可以再抢救抢救</p>
    </c:otherwise>
</c:choose>

EL式

4つのスコープは、同じ属性を持っている場合、値4に運ばのpageContext、要求、セッション、アプリケーションスコープからEL式は、ELは、優先度の高い順求めます。pageContext > request > session > application

JSP一般的な使用法

  • 含める
    • コマンドインクルードが含まれます:<%@include file="footer.jsp" %>、現在のJSPは、挿入されたコマンドラインの位置に
    • アクションは、ザは、次のとおり<jsp:include page="footer.jsp" />、footer.jspのfooter_jsp.javaは、挿入された位置指令footer_jsp.javaサーブレットの実行結果の形に変換されません
  • ジャンプ
    • クライアントのジャンプ:<%response.sendRedirect("hello.jsp");%>
    • サーバーを移動:<jsp:forward page = "hello.jsp"/>

JavaBeanの

標準のJavaBean

  1. 引数なしでpublicコンストラクタを提供する(デフォルトで提供)
  2. 各属性は、パブリックゲッターとセッターを持っています
  3. プロパティがブール値である場合には、対応があるとsetterメソッド

セッション

セッションはセッションです。セッションが最初からウェブサイトにアクセスし、ブラウザを開いて、ユーザーを指し、関係なく、ユーザーはこれまでのところ、ブラウザを閉じるまで、すべてが、同じセッションに属しているどのように多くのページ、リンクをクリックしたどのように多く、このサイトを参照してください。

サーブレット+ JSP \(\約\) MVC

Javaコードを書きやすいサーブレット、ディスプレイ上のJSPを使用してサーブレット・ライト・コードの両方、ビジネス関連の使用の特性を組み合わせて、コードを書きやすいJSPページ。

サーブレットにデータを保存する暗黙オブジェクト

public class HeroEditServlet extends HttpServlet {
 
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        int id = Integer.parseInt(request.getParameter("id"));
        Hero hero = new HeroDAO().get(id);
        request.setAttribute("hero", hero); // 设置属性后 JSP 使用 EL 语言 ${hero.id},获得数据
        request.getRequestDispatcher("editHero.jsp").forward(request, response);
    }
}

JSP、暗黙オブジェクトには、データを取得しました

<form action='updateHero' method='post'>
    名字 : <input type='text' name='name' value='${hero.name}'> <br>
    血量 :<input type='text' name='hp' value='${hero.hp}'> <br>
    伤害: <input type='text' name='damage' value='${hero.damage}'> <br>
    <input type='hidden' name='id' value='${hero.id}'>
    <input type='submit' value='更新'>
</form>

アプリケーション例

  • 表示データのページングを使用して
    • ディスプレイのフロントエンド、指定した範囲内のバックデータを返します。

フィルタ

ユーザの要求は、フィルタする必要があるとして、チェックポイントをフィルターには、複数のフィルターを提供することができます

グラフLR A [ユーザーアクセス] A - > B((フィルター1))B - > C((フィルタ2))C - > D((フィルタ..))D - > E [サーブレット]

おすすめ

転載: www.cnblogs.com/jiahu-Blog/p/11596259.html