質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2670閲覧

ServletからJSPをインクルードで呼び出した場合のレスポンスについて

new9

総合スコア19

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/05/09 13:46

編集2020/05/09 13:55

ServletとJSPを、本を見ながら勉強中ですが、わからないことがありご質問させてください。

ServletからJSPをインクルードで呼び出す場合です。

以下の2つのservletとjspがあります。

test.java

Servlet

1import java.io.IOException; 2import java.io.PrintWriter; 3import javax.servlet.ServletException; 4import javax.servlet.http.*; 5import javax.servlet.annotation.WebServlet; 6 7@WebServlet(urlPatterns={"/include_test"}) 8public class Include extends HttpServlet { 9 10 public void doGet ( HttpServletRequest request 11 ,HttpServletResponse response) 12 throws ServletException , IOException { 13 14 response.setContentType("text/html; charset=UTF-8"); 15 PrintWriter out=response.getWriter(); 16 17 out.println("<!DOCTYPE html>"); 18 out.println("<html>"); 19 out.println("<head>"); 20 out.println("<meta charset='UTF-8'>"); 21 out.println("<title>Servlet/JSP Sample Programs</title>"); 22 out.println("</head>"); 23 out.println("<body>"); 24 25 //インクルードする 26 request.getRequestDispatcher("include1.jsp").include(request,response); 27 28 out.println("</body>"); 29 out.println("</html>"); 30 31 } 32 33} 34

include1.jsp

JSP

1<%@page contentType="text/html; charset=UTF-8" %> 2 3<p>include1.jspの内容です。</p>

クライアントからのリクエストをservletで受けて、JSPをインクルードで呼び出して、servletが
レスポンスを返すサンプルになっており、
上記のプログラムは、実行すると問題なく想定通りに動きます。

レスポンス用のhtmlを、out.printlnで組み立てていっておりますが、
JSPをインクルードで呼び出す箇所(include1.jspを呼び出している所)は、
out.printlnを行っていないのにレスポンスのhtmlにinclude1.jspの内容が含まれているのが
なぜなのか分かりません。

私のイメージとしては、
out.println(request.getRequestDispatcher("include1.jsp").include(request,response));
と記載されているとしっくりくるのですが。

どのような仕組みになっているのか、ご教示頂けないでしょうか。

アプリケーションサーバは、Apache Tomcat/8.5.11です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

簡単に言ってしまえば include() メソッドが out.println() メソッドと同等の処理を内部でやってくれているからです。そのため include() メソッドには response オブジェクトを渡してやる必要があるのです。

具体的には、
PrintWriter out = response.getWriter(); のコードでは response オブジェクトに書き込みを行うための PrintWriter オブジェクト(書き込み用バッファ)を取得して out という名前で参照できるようにしていますよね。そしてこの out に対して println() メソッドで書き込みを行っているわけです。include() メソッドが呼び出されると、引数に response オブジェクトが渡されていると思いますが、この response オブジェクトから getWriter() メソッドで取得する PrintWriter オブジェクトは、すでに書き込みが行われている先ほどの out が参照するオブジェクトとイコールです。したがって include() メソッド内の処理ではJSPの内容をこの out に書きだしてから処理は元のメソッドに戻り、続きの書き込み(サンプル・プログラムでは</body><html>)を行って、最終的に完成したHTMLをクライアントに返送するという流れになります。

投稿2020/05/10 00:00

編集2020/05/10 00:01
amadablam

総合スコア406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

new9

2020/05/10 01:15

amadablam様、ご回答頂きましてありがとうございます。 include()メソッドの機能として、書き出しを行ってくれているということですね。 詳細に教えて頂き、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問