Servlet,JSP

22934 ワード

Boost Cossを聴いていると、Sebrit部分が理解できないので、Sebritを徹底的に理解することを考えました.
聴講や検索を繰り返しても理解できず、以前聞いたspring-mvc-1編servlet部分だけを再学習しました.

サーブレットとは?


サーブレットは、簡単な方法で呼び出すだけでWebリクエストと応答ストリームを系統的に処理できる技術である.狭義にはこのような機能を持つJavaクラスであり、広義には上述の機能を実現するためのJavaパッケージである.

サーバワーク構造



タブレット実装コード

@WebServlet(name= "helloServlet",urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("HelloServlet.service");
        System.out.println("request = " + request);
        System.out.println("response = " + response);

        String username = request.getParameter("username");
        System.out.println("username = " + username);

        response.setContentType("text/plain");
        response.setCharacterEncoding("utf-8");
        response.getWriter().write("hello"+username);
    }


}
まず、WASは、Webブラウザが要求を受信すると、その要求にマッピングされたサーバを呼び出す.(この機能はWASのスレッドによって実行されると理解される)request、responseオブジェクトを同時に生成し、サーブレットに渡す.
次に、対応するサービスメソッドを実行します.
いわゆるサーブレット機能がなければ,要求されたhttp情報を直接解析して情報を抽出し,WASとサーブレットで容易に情報を抽出し,情報を統合して伝送することができる.
私が理解できない部分は、いったい何がサーブレットなのか、どのように単色調で管理されているのか、サーブレットが小さいように見えるときにクラスと見なし、そのurlマッピングに対応するサーブレットを単色調で管理することと理解することができます.
  • サーブレットのみを使用してWebアプリケーションを作成します。

  • package hello.servlet.web.servlet;
    
    
    import hello.servlet.domain.member.MemberRepository;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet(name = "memberFormServlet",urlPatterns = "/servlet/member/new-form")
    public class MemberFormServlet extends HttpServlet {
    
        private MemberRepository memberRepository = MemberRepository.getInstance();
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            response.setContentType("text/html");
            response.setCharacterEncoding("utf-8");
    
            PrintWriter w = response.getWriter();
            w.write("<!DOCTYPE html>\n" +
                    "<html>\n" +
                    "<head>\n" +
                    " <meta charset=\"UTF-8\">\n" +
                    " <title>Title</title>\n" +
                    "</head>\n" +
                    "<body>\n" +
                    "<form action=\"/servlet/members/save\" method=\"post\">\n" +
                    " username: <input type=\"text\" name=\"username\" />\n" +
                    " age: <input type=\"text\" name=\"age\" />\n" +
                    " <button type=\"submit\">전송</button>\n" +
                    "</form>\n" +
                    "</body>\n" +
                    "</html>\n");
        }
    }
    これによりresponseにhtmlコードを直接記述して渡します.
    エラーが発生しやすく、エラー時にエラーポイントを見つけるのは難しいです.
    デフォルトhtmlファイルとは異なり、変数やjavaコードを中間に挿入して画面を動的に整理できます.
    ex)
            for (Member member : members) {
                w.write(" <tr>");
                w.write(" <td>" + member.getId() + "</td>");
                w.write(" <td>" + member.getUsername() + "</td>");
                w.write(" <td>" + member.getAge() + "</td>");
                w.write(" </tr>");
            }
    サーブレットのみを使用してWebアプリケーションを構成すると、サービスが増加するにつれてhtmlドキュメントの一部を維持することはほとんど不可能になります.
    このような不便を解決するためにhtmlにjavaコードを組み込むテンプレートエンジンを開発した.
    代表的なテンプレートエンジンはJSP、Thympleaf、Freemarker、Velocityなど.

    サーバのライフサイクル


  • まず、クライアントからサーバ要求を受信すると、WASはメモリにサーバが存在するかどうかを確認します.

  • (メモリではなくサーブレットを最初に実行した場合は、そのクラスをメモリに格納し、init()メソッドとservice()メソッドを実行します.

  • (テンプレートがメモリにある場合)サービス()メソッドを実行します.

  • WASのシャットダウンまたはWebアプリケーションの更新によりシャットダウンが要求された場合は、destroy()メソッドを実行します.

  • 1) init()
    初めてサーバをメモリに格納すると、サーバが起動し、最初の実行時に1回のみ実行されます.
    2) service()
    リクエスト/レスポンス(request/response)を処理し、リクエストがGETであるかPOSTであるかを区別するために、リクエストをdoGet()またはdoPost()メソッドに分割する.
    3) destroy()
    サービスボードの終了を要求するとdestroy()メソッドが実行されます.
    出典:https://kadosholy.tistory.com/47[KADOSHOLY]

    JSP


    JSP欄


    JSPはJava Server Pagesの略です.
    HTMLコードにJAVAコードを加えて動的Webページを生成するWebアプリケーションツール.
    出典:https://javacpro.tistory.com/43[物理技術を学ぶ]

    JSP Webアプリケーションコード

    <%@ page import="java.util.List" %>
    <%@ page import="hello.servlet.domain.member.MemberRepository" %>
    <%@ page import="hello.servlet.domain.member.Member" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
     MemberRepository memberRepository = MemberRepository.getInstance();
     List<Member> members = memberRepository.findAll();
    %>
    <html>
    <head>
     	<meta charset="UTF-8">
     	<title>Title</title>
    </head>
    <body>
    <a href="/index.html">메인</a>
    <table>
     	<thead>
     	<th>id</th>
     	<th>username</th>
     	<th>age</th>
     	</thead>
     <tbody>
    <%
     	for (Member member : members) {
     		out.write(" <tr>");
     		out.write(" <td>" + member.getId() + "</td>");
     		out.write(" <td>" + member.getUsername() + "</td>");
     		out.write(" <td>" + member.getAge() + "</td>");
     		out.write(" </tr>");
    	 }
    %>
     </tbody>
    </table>
    </body>
    </html>
    
    jspを使用すると、htmlにjavaコードが挿入されたドキュメントを解析し、テンプレート形式に変換できます.
    しかし、欠点は、複数のコードが露出し、jspが多くの役割を果たしているため、メンテナンスが非常に困難であることです.
    JSPの現在の機能は他のテンプレートエンジンより遅れているそうです.そのため詳細な整理は省略した.