-
動的Webプロジェクト「lesson」内にある次のサーブレットクラスに対して、ブラウザからURL「http://localhost:8080/lesson/ex1」にリクエストして実行するために、①~⑥に適切な記述をしてください。
// import分は省略
@WebServlet ( " ① " )
public class EX1 ② HttpServlet {
protected void ③ (HttpServletRequest request,
HttpServletResponse response) ④
ServletException, IOException {
// UTF-8のHTMLをレスポンス
response.setContentType ( " ⑤ " );
PrintWriter out = ⑥ .getWriter () ;
out.println ( "<html><body>Hello </body></html>") ;
}
}① /ex1
② extends
③ doGet
④ throws
⑤ text/html; charset=UTF-8
⑥ response ① URLパターン(マッピング名)
1つの動的Webプロジェクトの中で
URLパターンが重複するとサーバが
起動しなくなるので注意!!
② javax.servlet.http.HttpServlet を
継承する必要がある。
③ 問題文に「ブラウザからURLにアクセスする」とあり、
直接アクセスはGETリクエストが送信されるため、
ここでのメソッドはdoPost()ではなくdoGet()が正しい。
④ 直後にExceptionが2つ記述されている
⑤ HttpServletResponse の setContentType メソッドを使用して、
レスポンスのcontent-typeヘッダを指定する。
⑥ 実行結果のHTMLを出力するために、
HttpServletResponse がもっている getWriter()で
java.io.PrintWriterインスタンスを呼び出して、
PrintWriter型の変数outに格納する。
なお、この処理は必ずcontent-typeヘッダを設定した
後でなければならない。 -
package ex ;
public class Employee {
private String id;
private String name
public Employee (String Id, String name) {
this.id = id; this.name = name;
}
public String getId () { return id ; }
public String getName () { return name ; }
}
上記クラスのインスタンスを生成し、そのフィールドが出力されるように、下記のJSPファイルの①~⑤を埋めてください。
出力文字コードはUTF-8、作成インスタンス名は「emp」、IDと名前は「0001」と「湊 雄輔」とします。
<%@ page contentType="①" import="②" %>
<% ③ %>
<!DOCTYPE html>
<html><body>
<p>IDは④、名前は⑤です。</p>
</body></html>① text/html; charset=UTF-8
② ex.Employee
(または ex.*)
③ Employee emp = new Employee
("0001", "湊 雄輔");
④ <%= emp.getId() %>
⑤ <%= emp.getName() %> ① コンテンツタイプは text/html、
charsetは指定のとおりUTF-8とします。
② ex パッケージ内の Employee クラスをインポートします。
③ Employee(クラス)型のインスタンスを生成します。
変数名は指定のとおり「emp」、コンストラクタの引数である
IDと名前を実引数として渡します。
④⑤ ここは、出力される内容を記述するため、
スクリプトレット<% %>ではなく、
スクリプト式<%= %>を使用します。
また、フィールドにはprivate修飾子が
付与されているため、ほかのクラスから
直接参照ができません。
あらかじめ用意しているgetterを呼び出します。 -
Webページの作成には( ① )という言語を使用する。① HTML HyperText Markup Language の略
-
HTMLは ( ① )を使って、タイトルや段落、画像、
リンクといったページの構成要素を作成できる。① タグ < > -
HTMLで次の要素を構成する際に使用するタグを答えなさい。
① 段落を作成する
② 画像を作成する
③ ハイパーリンクを作成する
④ 表組を作成する
⑤ 表組内の行
⑥ 表組内のデータ
⑦ 表組内の見出しデータ
⑧ 文字コードの指定など
⑨ 改行① pタグ
② imgタグ
③ aタグ
④ tableタグ
⑤ trタグ
⑥ tdタグ
⑦ thタグ
⑧ metaタグ
⑨ brタグ -
HTMLのタグには、( ① )で補足的な要素を加えることができる。① 属性
-
HTMLのaタグには、( ① )という属性を加える必要がある。① href
-
HTMLにおいて、ページに関する情報は( ① )内に記述する。① headタグ
-
HTMLにおいて、ページの本体(画面に表示される内容)は( ① )内に記述する。① bodyタグ
-
HTMLをWebページとして表示するには( ① )というソフトウェアを使用する。① ブラウザ
-
Webページを公開するには( ① )というコンピュータにHTMLファイルを配置し、ブラウザを使って要求する。① Webサーバ
-
どのWebサーバの、どのHTMLファイルを要求するのかを指定するのに使用するのは( ① )である。① URL
-
ブラウザがWebサーバに要求することを( ① )という。① リクエスト
-
リクエストにはいくつかの方法があり、代表的なものは( ① )と( ② )である。① GETリクエスト
② POSTリクエスト -
〇✕問題
アンケートフォームなどのユーザーが入力した情報をサーバに送りたい場合は、GETリクエストを使用する。✕ -
Webサーバがブラウザのリクエストに応えることを( ① )という。① レスポンス
-
レスポンスの際、応答するデータの種類を表す( ① )と、
処理結果を表す( ② )を、ヘッダ部を使って送信する。
このWebサーバとブラウザのやり取りは、( ③ )という
プロトコルで決められている。① Content-Typeヘッダ
② ステータスコード
③ HTTP -
Webアプリケーションには、
Webサーバにサーバサイドプログラムを実行する機能(環境)を備えた
( ① )というコンピュータが必要となる。① (Web)アプリケーションサーバ -
Javaによるサーバサイドプログラムを( ① )と呼び、
( ① )を実行できる環境を( ② )という。① サーブレット
② サーブレットコンテナ -
Javaによるサーバサイドプログラムには( ① )と呼ばれる
技術も存在するが、これはサーブレットに変換され、最終的には同じものになる。①JSP -
以下のHTMLファイルをリクエストするURLを答えてください。
サーバ名は「localhost」、Apache Tomcatのポート番号は「8080」、
動的Webプロジェクトの名前は「hoge」とします。
① webapp直下に保存されているfoo.html
② webbapp直下のbarディレクトリに保存されているfoo.html① http://localhost:8080/hoge/foo.html
② http://localhost:8080/hoge/bar/foo.html -
■JSP ファイル
<%@ page language="java" contentType="text/html; charset=UTF-8"page Encoding="UTF-8" %>
... (省略) ...
<form action="【★】" method="post">
名前: <input type="text" name="name">
<input type="submit" value="登録">
</form>
... (省略) ...
■サーブレットクラス
@WebServlet ("/Ex5_1")
public class Exercisel extends HttpServlet {
protected void doPost (HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
...(省略)...
}
}
【★】に、適切な語句を入れてJSPとサーブレットを連携させてください。Ex5_1 formのactionには送信先を指定する。
サーブレットクラス:URLパターン
JSP:webappからのパス
※相対パスになっているため、jspファイルとサーブレットが同ディレクトリにある場合のみ、答えのパスで指定できる。
もしcontrollerパッケージ等に入っている場合は「/Ex5_1」として絶対パスでルーティングが必要になる。 -
■JSP ファイル
<%@ page language="java" contentType="text/html; charset=UTF-8"page Encoding="UTF-8" %>
... (省略) ...
<form action="【★】" method="post">
名前: <input type="text" name="name">
<input type="submit" value="登録">
</form>
... (省略) ...
■サーブレットクラス
@WebServlet ("/info")
public class Information extends HttpServlet {
protected void doPost (HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
...(省略)...
}
}
【★】に、適切な語句を入れてJSPとサーブレットを連携させてください。info formのactionには送信先を指定する。
サーブレットクラス:URLパターン
JSP:webappからのパス
※相対パスになっているため、jspファイルとサーブレットが同ディレクトリにある場合のみ、答えのパスで指定できる。
もしcontrollerパッケージ等に入っている場合は「/info」として絶対パスでルーティングが必要になる。 -
■JSP (index.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"page Encoding="UTF-8" %>
... (省略) ...
<form action="【★】" method="post">
購入するもの: <input type="text" name="name">
<input type="submit" value="購入">
</form>
... (省略) ...
■JSP (purchase.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"page Encoding="UTF-8" %>
<%
request.setCharacterEncoding ("UTF-8");
String name = request.getParameter("name");
%>
... (省略) ... 【★】に、適切な語句を入れてJSPとJSPを連携させてください。
2つのjspは同階層にあります。purchase.jsp formのactionには送信先を指定する。
サーブレットクラス:URLパターン
JSP:webappからのパス
※補足
・purchase.jsp
★相対パス
同じディレクトリ階層に「purchase.jsp」があれば指定できる。
・/purchase.jsp
★絶対パス
「http://localhost:8080/myApp」+「/purchase.jsp」と解釈される。
webapp内のJSPフォルダ等に格納されている場合はエラーとなる。 -
■JSP ファイル
<%@ page language="java" contentType="text/html; charset=UTF-8"page Encoding="UTF-8" %>
... (省略) ...
<form action="Ex5_1" method="post">
... (省略) ...
</form>
... (省略) ...
■サーブレットクラス
@WebServlet ("/Ex5_1")
public class Exercisel extends HttpServlet {
protected void 【★】 (HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
...(省略)...
}
}
【★】に、適切な語句を入れてJSPとサーブレットを連携させてください。doPost formのmethod属性に「post」が指定されているため、action属性で指定した「/Ex5_1」サーブレットのdoPostメソッドで入力値を受け取ります。
※formで送られた「名前」「性別」などが、サーブレットクラスにrequestパラメータに格納されて送信されます。
送信されたrequestパラメータ↑が、doGet、doPostメソッドの「request」に入ります。
サーブレットクラスでは、「request.getParameter("<name属性>")」で受け取れます。
リクエストパラメータは、全てStringで受け取ります。 -
■JSP ファイル
<%@ page language="java" contentType="text/html; charset=UTF-8"page Encoding="UTF-8" %>
... (省略) ...
<form action="Ex5_1" method="get">
... (省略) ...
</form>
... (省略) ...
■サーブレットクラス
@WebServlet ("/Ex5_1")
public class Exercisel extends HttpServlet {
protected void 【★】 (HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
...(省略)...
}
}
【★】に、適切な語句を入れてJSPとサーブレットを連携させてください。doGet formのmethod属性に「get」が指定されているため、action属性で指定した「/Ex5_1」サーブレットのdoGetメソッドで入力値を受け取ります。
※formで送られた「名前」「性別」などが、サーブレットクラスにrequestパラメータに格納されて送信されます。
送信されたrequestパラメータ↑が、doGet、doPostメソッドの「request」に入ります。
サーブレットクラスでは、「request.getParameter("<name属性>")」で受け取れます。
リクエストパラメータは、全てStringで受け取ります。 -
■JSP ファイル
<%@ page language="java" contentType="text/html; charset=UTF-8"page Encoding="UTF-8" %>
... (省略) ...
<form action="Ex5_1" method="post">
名前: <input type="text" name="name">
<input type="submit" value="登録">
</form>
... (省略) ...
■サーブレットクラス
@WebServlet ("/Ex5_1")
public class Exercisel extends HttpServlet {
protected void doPost (HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding ("【★】");
...(省略)...
}
}
【★】に、適切な語句を入れてJSPとサーブレットを連携させてください。UTF-8 request.getParameter("*")するときに文字を適切に受け取る(エンコーディングする)ため、UTF-8の指定を忘れずにやりましょう。 -
■JSP ファイル
<%@ page language="java" contentType="text/html; charset=UTF-8"page Encoding="UTF-8" %>
... (省略) ...
<form action="Ex5_1" method="post">
名前: <input type="text" name="name">
<input type="submit" value="登録">
</form>
... (省略) ...
■サーブレットクラス
@WebServlet ("/Ex5_1")
public class Exercisel extends HttpServlet {
protected void doPost (HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding ("UTF-8");
String name = request.getParameter("【★】 ");
...(省略)...
}
}
【★】に、適切な語句を入れてJSPとサーブレットを連携させてください。name formのテキストボックスに指定したname属性(name)を指定し、サーブレットクラスで受け取ります。 -
■JSP ファイル
<%@ page language="java" contentType="text/html; charset=UTF-8"page Encoding="UTF-8" %>
... (省略) ...
<form action="Ex5_1" method="post">
職業: <input type="text" name="job">
<input type="submit" value="登録">
</form>
... (省略) ...
■サーブレットクラス
@WebServlet ("/Ex5_1")
public class Exercisel extends HttpServlet {
protected void doPost (HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding ("UTF-8");
String name = request.getParameter("【★】 ");
...(省略)...
}
}
【★】に、適切な語句を入れてJSPとサーブレットを連携させてください。job formのテキストボックスに指定したname属性(job)を指定し、サーブレットクラスで受け取ります。 -
<form action="testenq" method="post">
名前:<input type="text">
お問い合わせの種類:
<select>
<option>会社について</option>
<option>製品について</option>
<option>アフターサポートについて</option>
</select>
<textarea> フォームを以下の条件で修正してください。
①名前入力欄
送信タグ名:name
②ドロップダウン
送信タグ名:qtype
送信値:
会社について→company
製品について→product
アフターサポートについて→support
③テキストエリア
送信タグ名:body<form action="testenq" method="post">
名前:<input type="text" name="name">
<select name="qtype">
<option value="company">会社について</option>
<option value="product">製品について</option>
<option value="support">アフターサポートについて</option>
</select>
<textarea name="body"> name属性では、request.getParameter("<ココ>")で指定するタグ名をつけます。
基本的にname属性は全ての入力欄につけます。
value属性は実際に送られる値を格納します。
そのため、自由入力欄のtext,textareaにはvalueを指定しません。
(人が入力した値がvalueなので)
ドロップダウン等、予め答えが用意されているときにvalueを使います。
ドロップダウンの時は、selectタグにname属性を指定します。
(ドロップダウンで指定する値のname属性は全て一緒のため) -
スコープは、サーブレットクラスとJSP ファイルが自由に
オブジェクトを保存したり取り出したりできる共有領域であり、
アプリケーションスコープ、
【①】スコープ、
【②】スコープ、
ページスコープの4種類がある。①セッション
②リクエスト
※順不同 アプリケーション、セッション、リクエストの特徴はしっかり勉強しましょう! -
スコープに保存するオブジェクトは、【①】という再利用性を高めるためのルールを実装しているクラスに限定される。
【①】には【②】 という、getXxx()/ setXxx() で定義される属性がある。
①JavaBeans
②プロパティ プロパティのアクセスレベルはprivateにしましょう。
読み取り専用にする場合はgetterのみでOKです。 -
JavaBeansには【①】 という、getXxx()/ setXxx() で定義される属性がある。
たとえば getFullName() というメソッドを定義すると【②】という 【①】 が定義される。①プロパティ
②fullName フィールドとプロパティの違いを調べたけど難しくてよくわかりませんでした。
JavaBeansのフィールドはプロパティって呼ばれる、くらいでいいかもです。
※フィールドは具体的なメモリのデータを差す、プロパティはもっと抽象的な概念とのことです。
直接的にフィールドを呼ばない、間接的に呼ぶ(カプセル化してるとき)時はプロパティっぽいです。多分。 -
■fruit.jsp (src/main/webapp/WEB-INF/ex ディレクトリ)
<%@ page contentType="text/html; charset=UTF-8">
<%@ page import="【①】" %>
<% Fruit fruit = 【②】; %>
<!DOCTYPE html>
<html>
... (省略) ...
<body>
<p><%= fruit.getName() %>の値段は【③】円です。 </p>
</body>
</html> サーブレットクラスにて、Fruitクラス(JavaBeans/パッケージ名:ex)を下記情報でインスタンス化し、リクエストスコープに「"fruit"」キーで格納しています。
フルーツの名前:いちご
フルーツの値段:700
値段のgetterメソッド名:int getPrice
①~③を答えてください。
①ex.Fruit
②(Fruit)request.getAttribute("fruit")
③<%= fruit.getPrice() %> ①パッケージ名も忘れずに。ArrayList等、別のクラスをjspで使う場合は、ArrayListのインポートも必要です。
②「リクエストスコープに「"fruit"」キーで格納しています。」という記述があるため、
サーブレットクラスでリクエストスコープにsetAttribute("fruit",***)で情報をセットしたことがわかります。
また、getAttribute("")の戻り値はObjectクラスのため、忘れずにキャストを行いましょう。
③スプリクト式は<%= %>。=を忘れずに。
また、呼び出しの時にはメソッド呼び出しとなるため、()も忘れずに。 -
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
Fruit fruit_date = new Fruit (“いちご”, 700);
//①:語句を埋めてください。
request.setAttribute ("fruit", ①);
//②下記2行は何をしてる?
RequestDispatcher dispatcher=request.getRequestDispatcher ("WEB-INF/ex/fruit.jsp");
dispatcher. forward (request, response);
}①fruit_date
②WEB-INF/ex/fruit.jspにフォワードしている ①インスタンス化したFruitクラスのデータ(fruit_date)をリクエストスコープに格納してます。
②Dispatcherって飛行機の管制官の意味らしいです。(管制塔で飛行機の行き先を指示する人たち)
行き先をdispatcherに格納して、dispatcher. forward (request, response);で行ってらっしゃ~いと飛ばしてるイメージで覚えましょう -
名前と値段を格納するFruitクラスを簡単に書いてみてください。(JavaBeansクラスとして)
5つのポイントがあるので意識して書いてみてください。//①Serializableを実装しましょう(直列化とかいうやつ)
public class Fruit implements Serializable {
//②直接アクセスされないようにprivateにしましょう
private String name;
private int price;
//③必ず引数無しのコンストラクタを用意 暗黙的でもOK
public Fruit() {/** 記述無 **/}
//④コンストラクタでなくてもいいけど、setterなどでプロパティを指定します
public Fruit(String name,int price) {
this.name = name;
this.price = price;
}
//⑤getter/setter(アクセサ)を用意します(どちらかだけでもOK)
public String getName() { return name; }
public int getPrice() { return price; }
}
-
・適切な語句を入れてください。
MVCはアプリケーション内部を①、②、③の3つの要素に分けて開発を行うことを推奨している。それぞれの要素には役割が決められており①はユーザーからの指示とデータを受け取る窓口となり、指示とその結果の表示を専門の担当に依頼する司令塔の役割を果たし、②はユーザーの要求に応える処理を担当し③はユーザーへの表示を担当する。
(答)①コントローラ・②モデル・③ビュー -
・適切な語句を入れてください。
JavaによるWebアプリケーションでは、①でコントローラを、②でモデルを、③でビューを作成することが一般的である。
(答)①サーブレットクラス・②一般的なJavaクラス・③JSPファイル -
・フォワードした場合、転送後のアドレスバーにはどのようなURLが表示されるか?(答)転送元(フォワード元)
-
・リダイレクトした場合、転送後のアドレスバーにはどのようなURLが表示されるか?(答)転送先(リダイレクト先)
-
・サーブレットクラスからJSPファイル処理を遷移させる方法の1つで、Webサーバ内で処理を即時転送する方法は何か?(答)フォワード
-
・サーブレットクラスからJSPファイル処理を遷移させる方法の1つで、転送先のURLにアクセスするようブラウザに指示する応答を返す方法は何か?(答)リダイレクト
-
・あてはまるものを語群から選んでください
フォワードは(①)インスタンスの(②)で行う。
<語群> RequestDispatcher/HttpServletResponse/HttpServlet/sendRedirect()/
doGet()/doPost()/forward()
(答)①RequestDispatcher・②forward() -
・あてはまるものを語群から選んでください
リダイレクトは(①)インスタンスの(②)で行う。
<語群> RequestDispatcher/HttpServletResponse/HttpServlet/sendRedirect()/
doGet()/doPost()/forward()
(答)①HttpServletResponse・②sendRedirect() -
・リダイレクトはリクエストスコープの引継ぎが可能である。
①正 ②誤
(答)②誤→フォワードでは引継ぎが可能 -
・アドレスバーに表示されるURLにおいてリクエスト時のまま変わらないのはどれか?
①フォワード ②リダイレクト
(答)①フォワード -
・転送先においてサーブレットクラス、JSPファイル、HTMLファイルなどが対象なのはどちらか?
①フォワード ②リダイレクト
(答)②リダイレクト リダイレクトはHTMLも指定可能、フォワードはJSPとリダイレクトのみ。(HTML不可) -
・サーブレットクラス「Hello」をリクエストし、そのサーブレットクラスが処理を「GoodBye」へ転送した場合、実行後に次のURLが表示されるのはどちらか?
http;//localhost;8080/example/ GoodBye
①フォワード ②リダイレクト
(答) ②リダイレクト -
次の文章においてリクエストスコープとセッションスコープのどちらが好ましいか選んでください。
・画面Aから呼び出されたサーブレットクラスがJSPファイルに処理をリダイレクトする際にオブジェクトを引き渡したい。
(答)セッションスコープ -
次の文章においてリクエストスコープとセッションスコープのどちらが好ましいか選んでください。
・画面Bから呼び出されたサーブレットクラスがJSPファイルに処理をフォワードする際にオブジェクトを引き渡したい。
(答)リクエストスコープ -
次の文章においてリクエストスコープとセッションスコープのどちらが好ましいか選んでください。
・パスワード登録画面の「送信」ボタンのクリックで起動するサーブレットクラスで、もし登録画面で入力されたパスワードが8文字未満の場合、error.jspにフォワードして「?文字のパスワードは短いです」と表示したい(?には入力された文字数を表示する)。
(答)リクエストスコープ -
次の文章においてリクエストスコープとセッションスコープのどちらが好ましいか選んでください。
・ログイン画面の「送信」ボタンのクリックで起動するサーブレットクラスにおいて、画面で入力されたID情報(文字列インスタンス)を保存しておき、以後さまざまなサーブレットクラスやJSPファイルで取り出して利用したい。
(答)セッションスコープ -
・セッションスコープに保存したインスタンスの有効期間は、開発者側で決定することができない。
①正 ②誤
(答)②誤 -
・セッションスコープにおいて、インスタンスの保存で使用するのは?
語群の中から選んでください。
<語群>setAttribute()/getAttribute()/removeAttribute()/invalidate()
(答) setAttribute() -
・セッションスコープにおいて、インスタンスの取得で使用するのは?
語群の中から選んでください。
<語群>setAttribute()/getAttribute()/removeAttribute()/invalidate()
(答) getAttribute() -
・セッションスコープにおいて、インスタンスの削除で使用するのは?
語群の中から選んでください。
<語群>setAttribute()/getAttribute()/removeAttribute()/invalidate()
(答) removeAttribute() invalidate()はセッションの破棄 -
・セッションスコープ自体が不要になった場合にスコープそのものを破棄する際に使用するのは?
語群の中から選んでください。
<語群>setAttribute()/getAttribute()/removeAttribute()/invalidate()(答) invalidate() インスタンスの削除:removeAttribute() -
・サーブレットクラスの場合、HttpServletRequestインスタンスのgetSession()で取得する。
①正 ②誤
(答)①正 -
・サーブレットクラスの場合、HttpSessionインスタンスは暗黙オブジェクト「session」で利用できる。
①正 ②誤
(答)②(×サーブレットクラス→〇JSPファイル)
ログイン