4

Java を使用して Web アプリケーションを開発したいと考えています。しかし、これらのさまざまなテクノロジーが何であり、それらがどのように連携するのかについて、私はかなり混乱しています。

  • HTTP
  • HTML
  • CSS
  • Javascript
  • jQuery
  • ウェブコンテナ
  • サーブレット
  • JSP
  • JSTL
  • 式言語 (EL)

これらのトピックに関してウェブ上で見つけることができる膨大な量のリソースがあり、それぞれを理解するには数冊の本を読む必要があるようです. Web アプリケーションの開発を開始する際に、これらのテクノロジについて基本的な理解を深めるために、これらのテクノロジについて説明していただけますか?

4

1 に答える 1

9

この説明の目的は、一般的な理解を与えることであり、各トピックのすべての詳細を調べることではないことに注意してください。経験豊富なユーザーは、「一般的すぎる」と思われる点を確実に見つけるでしょうが、新しいユーザーを混乱させないようにしましょう。各トピックには、さらに読むためのリンクが用意されています。

基礎の基礎から始めましょう。以下のすべてのテクノロジーを理解するには、Web ページがコンピューターにどのように表示されるかを知る必要があります。

HTTP

HTTP はHyper Text Transfer Protocolの略です。Web サーバーのコンテンツ (Web ページ) を取得するために、ブラウザーが Web サーバーと通信する方法について説明します。ウェブページはサーバーに保存され、ブラウザは取得したいウェブページをサーバーに伝える方法を必要とします。一方、サーバーは、要求されたリソースが見つかったかどうかをブラウザーに伝え、この情報をブラウザーに送信する必要があります。

  1. ブラウザはサーバーにリクエストを送信します。リクエストはいくつかの部分で構成されています。
    • https://stackoverflow.com/questions/ask」などの URL。サーバーは配信するページを認識します。
    • HTTPメソッド。最も一般的なのは、ブラウザーが情報 (単一ページや Web 検索など) を取得することを示すgetと、フォーラムへの投稿など、ブラウザーが Web サーバーに情報をプッシュすることを示す post ですPost は通常、サーバー上の何か (フォーラムの新しい投稿など) を変更しますが、get は変更しません。
    • たとえば、テキストボックスのテキスト、アップロードする画像などを含めることができるリクエストボディ。
  2. サーバーは、ブラウザーの要求に対する応答であるresponseを返します。以下で構成されています。
    • HTTPステータス コード。これは、リクエストの結果を示す 3 桁の数字です。最も一般的なのは、OK (2xx)、リダイレクト (3xx)、CLIENT ERROR (4xx)、および SERVER ERROR (5xx) です。リダイレクト ステータス コードは、ブラウザを別のページにリダイレクトする最良の方法です。
    • 応答本文。これには Web ページ (存在する場合) が含まれます。

HTML

HTML はHyper Text Markup Languageの略で、コンテンツを表示します。HTML テキストはサーバーからクライアント (ブラウザー) に送信され、ブラウザーによってレンダリングされてユーザーに表示されます。HTML の例:

<!DOCTYPE HTML>
<html>
    <head>
        <title>My first webpage</title>
    </head>
    <body>
        <p>Hello World!</p>
    </body>
</html>

HTML は何年にもわたって改善されているため、各 HTML ページの最初の行にDOCTYPE宣言を含めることが重要です。さまざまなタグ( など) をレンダリングする方法をブラウザーに指示します。レンダリング処理はブラウザによって行われます。ローカル コンピューター上のブラウザーによって行われるすべてのことは、client-sideと呼ばれます。その用語を覚えておいてください!<p>

CSS

カスケード スタイル シートを意味します。これにより、色、フォント サイズ、要素の位置などのスタイルが Web ページに追加されます。CSS 定義は、多くの場合、保守性を向上させるために別のファイルに保持されます。スタイルのレンダリングもクライアント側で行われます。

JavaScript

いいえ、これは Java とは関係ありません。繰り返します:何もありません。これは、クライアント側のブラウザーによって実行されるまったく異なるプログラミング言語です。JavaScriptを使用すると、Web ページにプログラミング ロジックを含めて、次のようなことができます。

  • ユーザー入力の検証
  • ファンシーなスライドショー
  • プログラミングゲームも!

ブラウザで JavaScript をオフにすると、JavaScript コードが実行されなくなることに注意してください。そのため、Web アプリケーションで JavaScript が利用できるかどうかに依存するべきではありません (ゲームのように、そうしなければならない場合を除きます)。JavaScript は、リダイレクト (HTTP ステータス コードを使用する必要がある場合) や要素のスタイリング (CSS を使用する) などに悪用される可能性があります。したがって、Javascript で何かを行う前に、別の方法でそれが可能かどうかを確認してください。HTMLとCSSだけでドロップダウンメニューも可能!

jQuery

jQueryは JavaScript で書かれたライブラリに他なりません。JavaScript のクロスブラウザー互換性を持たせたい場合に便利です。ブラウザーによって JavaScript の実装に若干の違いがあるためです。また、ページや効果などの特定の要素を選択する場合にも役立ちます。これはまだ JavaScript であるため、クライアント側で実行されます。

ウェブコンテナ

これは、サーバー上にあり、サーバーで実行されるソフトウェアです。通常、Web アプリケーションはWeb コンテナに配置されます。これは、クライアント要求と Web アプリケーション間のインターフェイスであり、Web アプリケーションのプログラミングをより快適にするためにいくつかのことを行います。たとえば、Apache Tomcatは Web コンテナです。

サーブレット

いよいよ Java の世界に入ります。サーブレットは、Web コンテナー内のサーバーにある Web アプリケーションの一部であり、サーバー側で実行されます。サーブレットは、クライアントからの要求を処理して応答を返すJava クラスです。典型的な HTTP サーブレットは次のようになります。

public class HelloWorld extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
                      throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hi</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<p>Hello World!</p>");
        out.println("</body>");
        out.println("</html>");
    }
}

HttpServletクラスにはdoXxx、開発者がオーバーライドできる HTTP メソッドごとに 1 つずつ、いくつかのメソッドがあります。ここでdoGetはオーバーライドされます。つまり、GET 要求がこのサーブレットに送信されると、このコードが実行されます。このメソッドは、リクエストとレスポンスをパラメータとして取得しHttpServletRequestHttpServletResponse.

URL 経由でこのサーブレットにアクセスできるようにするには、web.xmlを構成する必要があります。

<servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>com.example.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HelloWorld</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

これで、クライアントは GET を使用し/helloて URL としてサーブレットにリクエストを送信できます。たとえば、Web アプリケーションが www.example.com で実行されている場合、正しい URL はhttp://www.example.com/helloGET を使用することになります。

JSP

Java Server Pagesの略です。これまで見てきたように、サーブレットを使用してクライアントに応答を送信するのはかなり不便です。何人かの賢い人は、「Java コードを HTML ページに追加できたらどうだろう?」というアイデアを思いつきました。JSP とは次のようなものです。

<!DOCTYPE HTML>
<html>
    <head>
        <title>Hello JSP</title>
    </head>
    <body>
        <%
            for(int i=0; i<10; i++){
                out.print("Loop number " + i);
            }
        %>          
    </body>
</html>

実際、 JSP は(Web コンテナーによって) Java Servlet コードに変換され、コンパイルされます。本当!それは魔法ではありません。つまり、これらはサーブレットにほかなりません。これは、上記の JSP と同等のサーブレット コードです。

public class ServletAbc extends GenericServlet {
    public void service(ServletRequest req,ServletResponse res)
                        throws ServletException, IOException{
        PrintWriter out = res.getWriter();

        out.println("<!DOCTYPE HTML>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello JSP</title>");
        out.println("</head>");
        out.println("<body>");
        for(int i=0; i<10; i++){
            out.print("Loop number " + i);
        }
        out.println("</body>");
        out.println("</html>");
    }
}

ご覧のとおり、すべての Java コードは、応答がクライアントに送信される前にサーバー側で処理されます。

JSTL

Java 標準タグ ライブラリの略です。名前が示すように、使用する前に含める必要があるライブラリです。

Java コードを使用した JSP は、まだ最適なソリューションではありません。ページのサイズが大きくなると、非常に読みにくくなり、保守性が低下し、読みにくくなります。では、追加のタグを使用してページ フローやループなどを実装し、Java クラスにプログラミング ロジックを実行させることができたらどうでしょうか? タグ ライブラリの使用を歓迎します。

そこには多くのタグ ライブラリがあり、JSTL は「基本的な」ライブラリであり、コア機能を提供します。これには、if/else コンストラクト、ループなどが含まれます。これは JSP に含まれ、サーブレットに変換およびコンパイルされるため、サーバー側で実行されます。

EL

式言語を意味し、式を評価し、Java クラスで作成した Java オブジェクトの値にアクセスするために使用されます。通常、サーブレット、JSP、JSTL、および式言語を組み合わせます。

  • クライアントのリクエストがサーブレットに届きます。サーブレットは、いくつかのプログラミング ロジック (データベースからのデータの読み取りなど) を実行し、いくつかの Java オブジェクトを要求に格納します。その後、リクエストをサーバー上の別のリソース (JSP など) に転送します。転送 は Web アプリケーション内で行われ、リダイレクトではありません
  • JSP は EL を使用してリクエスト内の Java オブジェクトにアクセスし、それらを表示してクライアントにレスポンスを送信します。

たとえば、これはサーブレットです。

public class HelloWorld extends HttpServlet {
   public void doGet(HttpServletRequest request,
                     HttpServletResponse response)
                     throws ServletException, IOException {
      // access databases, do calculations etc. here
      String hello = "Hello world!";
      String someBoolean = true;
      request.setAttribute("helloObject", hello);
      request.setAttribute("myBoolean", hello);
      RequestDispatcher dispatcher = request.getRequestDispatcher("/result.jsp);
      dispatcher.forward(request, response);
   }
}

そしてresult.jsp

<!DOCTYPE HTML>
<html xmlns:c="http://java.sun.com/jsp/jstl/core">
    <head>
        <title>Hello EL</title>
    </head>
    <body>
        ${helloObject}
        <c:if test="${myBoolean}">
            The expression is true.
        </c:if>
    </body>
</html>

これは出力されますHello world! The expression is true.

注意事項

  • サーバー側で実行されるものとクライアント側で実行されるものを十分に明確に示したと思います。それらを混同しないでください。
  • 適切な作業には常に適切なツールを使用してください。コンテンツ用の HTML、レイアウトとスタイル用の CSS、クライアント側プログラミング ロジック用の Javascript。必要がない場合は Javascript に依存しないでください。無効にしているユーザーもいます。
  • JSF などの他のほとんどのテクノロジーは、既存のテクノロジーの上に構築されています。それらがどこで実行されているか (クライアント、サーバー) と何をすべきかを理解するために、それらが何に基づいて構築されているかを調べてください。
于 2013-04-25T05:04:38.780 に答える