見出し画像

Java訓練#37(Servlet)

今日の授業

今日はサーブレットの使い方を学びました。

今まで習ってきたJavaをHTML(ブラウザ)と一緒に使おうとするとServlet(webサーバ) を使わないといけなくなります。
さらにServletを使うにはURLの設定が必要になります。このURLの設定方法には2通りやり方があります。

1、アノテーションを使う方法
2、web.xmlのファイルを使う方法

アノテーション

アノテーションは java ファイルに記述します。必ずclass名の直前に記述し下さい

@WebServlet(urlPatterns={“好きなURL名”})

実行する時はTomcatを起動させてアプリを実行すると以下のようなURLになります。

 http://サーバのURL/プロジェクト名/パッケージ名/アノテーションで決めたURL


food というプロジェクトを作るとします。更にその中に taiyaki という名前のパッケージを作り、Anko クラスを作ってそこにアノテーションURLをtasteとします。実行の時のURLのは以下の様になります。

http://サーバのURL/food/taiyaki/taste

これでサーブレットで作ったプログラムをブラウザに表示させる事ができます。

web.xml

web.xml はwebアプリケーションの動作設定を行う為のファイルです。
このファイルの中身の記述は色々な情報を記述しないといけないので省略して、実行時に変更するところだけ説明します。

<Servlet>
    <Servlet-name>好きな名前</Servlet-name>
    <Servlet-class>taiyaki.taste</Servlet-class>  //パッケージング名.クラス名
</Servlet>
<Servlet-mapping>
    <Servlet-name>上で書いた好きな名前</Servlet-name>
    <url-pattern>/好きなURL(taste)</url-pattern>
</Servlet-mapping>

実行した時は

http://サーバのURL/food/taste

になります。

実行時に「404エラー」と出た時はURLが間違ってるのでチェックしましょう。

header、footerファイル

別のjavaファイルにHTMLで記述しないといけないタグをメソッドで書いといて、そのメソッドを呼び出すだけで使えるようにしとくと記述が楽になります。

footerには</body></html>を記述し、headerにはそれ以外を記述しておきます。

package tool;
import java.io.PrintWriter;

public class Page{

   Public static void header(PrintWriter out){
       out.println(“<!DOCTYPE html>“);
       out.println(“<html>“);
       out.println(“<head>“);
       out.println(“<meta charset="UTF-8">”);
       out.println(“<title><title>”);
       out.println(“<body>”);
}

Public static void header(PrintWriter out){
       out.println(“</body>”);
       out.println(“</html>”);
    }
}

呼び出す時は「 クラス名.メソッド名 」

Page.header(out);
Page.footer(out);

で呼び出します。

HTMLとJAVAを連動

HTML でブラウザの見た目を作りJavaで処理を行います。
例えば、テキストボックスに名前を入力して確定ボタンを押したら、「こんにちは〇〇さん」と表示するプログラムでは

テキストボックスを表示する部分をHTMLで行い、入力された値を処理するのがサーブレットの役目です。

HTMLの作成

必要なタグは以下になります。

<form action=“入力されたデータの送り先” method=“post”> ……action属性の送り先はサーブレットを指定します。methodには 「get」か「post」を指定します。そして受け取る側(サーブレット)でも同じメソッドを記述します。(「doGet」か「doPost」メソッド)

<input type= “text” name=“user”>……input type は text が入力できる 枠 を作ります。そこに入力された値が user という変数に格納されてサーブレットに送られるイメージになります。

<input type=“submit” value=“確定”>……submit はボタンを作ります。そのボタンの名前を 「確定」 としました。

以上のタグを使ってHTMLファイルを作成します。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>

<form action=“データの送り先(サーブレット)” method=“post”>
  <input type=“text” name=“user”>
  <input type=“submit” value=“確定”>
</form>

</body>
</html>

Javaファイルの作成

Javaファイルを作る時はサーブレットが提供してる「HttpServlet 」クラスを 「extends 」します。

次にメソッドを記述します。HTML ファイルでメソッドは post に指定したので、こちらではdoをつけてdoPostというメソッドを使います。メソッドの処理は後で記述します。

String user = reqest.getParameter(“user”);……String型の物を受け取る変数 user を用意して、HTMLで入力された値(user)をrequest.getParameterメソッドで受け取りそれを変数のuserに代入します。

最後に 「こんにちは〇〇さん」と表示させるコードを書きます。

※クラス名より上にimportが自動で作られるものがあります。

@WebServlet(urlPatterns={"/taiyaki/taste"})
public class クラス名 extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException{
  
  //文字エンコーディングを指定します。
  respose.setContentType(“text/html; charset=UTF-8”);

  //リクエストパラメータなどを使う際はこのコードが必要になります
  request.setCharacterEncoding(“UTF-8”);

  //ブラウザに表示させる為のコード
  printWriter out =response.getWriter();

   //HTMLからのパラメータを受け取ります
   String user = reqest.getParameter(“user”);

  page.header(out);

  //ブラウザ表示します
  out.println(“<p>こんにちは、” + user + “さん</p>”);

  Page.footer(out);

実行

web.xmlでの実行のやり方を説明します。
気をつける所は<Servlet-class>と<url-pattern>の所です。

<Servlet-class>には、「 javaのパッケージ名.クラス名 」を記入。
<url-pattern>には、「 /HTMLのフォルダ名/アノテーションで指定したURL 」を記入します。

<Servlet>
    <Servlet-name>好きな名前</Servlet-name>
    <Servlet-class>taiyaki.Anko</Servlet-class>
</Servlet>
<Servlet-mapping>
    <Servlet-name>上で書いた好きな名前</Servlet-name>
    <url-pattern>/taiyaki/taste</url-pattern>
</Servlet-mapping>

実行します。これでHTML とJava が連動します。

エラー

ここで注意が必要なことがあります。

上のサーブレットではクラス名の上に「アノテーション」が記述してあり更に「web.xml」も記述した場合に以下のようなエラーが出ます。

画像1

何故ならURLがかぶってるからです。URLで「tast」というのをどちらにも使っているのでこのエラーが発生しました。

URLを作る時は2つ作成しないように「アノテーション」か「web.xml」かどちらか決めておきましょう。

公共職業訓練を受講する為に必要な事を下の記事で書いてます。
良かったらご覧下さい↓↓↓


最後まで読んで頂きありがとうございました。

少しでも勉強になった、役に立ったと思ったら「 サポート」 で貴方のお気持ちを頂けると嬉しいです。
今後の励みにもなります。是非よろしくお願いします。

この記事が気に入ったらサポートをしてみませんか?