【Java】クライアントからのデータを受け取る方法を徹底解説!!

java

本記事ではJava学習の一環として、Webページから値を入力し、Servletでデータを受け取る方法を解説します。

流れとしては、webからデータ入力して入力した値を表示させるというシンプルなプログラムになります。

スポンサーリンク

Webページの作成

まずはHTMLの作成します。

ソースコード

【helloJsp.html】

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html lang="ja">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<title>フォームデータの取得サンプル</title>
</head>
<body>
<p>test1</p>
<p>ふたつの項目を入力してください。</p>
<form action="http://localhost:8080/javaroad/Hello" method="get">
<p>項目1:<input type="text" name="item1"></p>
<p>項目2:<input type="text" name="item2"></p>
<p><input type="submit" value="入力実行" style="WIDTH: 200px; HEIGHT: 20px"></p>
</form>
<p>
</body>
</html>

 

解説

今回重要なのがデータ送信を行うformタグになります。formタグの中で以下の設定を行います。

  • action
  • method
  • name

action

送信先プログラムのURL・URIを指定します。submitの時の遷移先になります。

今回action属性の設定に苦戦しました。action属性に設定する値は、URIでも行けると思うんですが、なぜか404エラーが出てうまくいかず、URLをそのまま記述しました。このやり方だとセキュリティ上問題があるのでリリース予定のプログラムには使用は控えてください。

method

methodにはgetかpostを指定します。違いはデータ送信方法の違いになります。

HTML側とServlet側の送信方法は一致していないと405エラーが発生します。getかpostで統一させましょう。

postで送信している場合もリダイレクトを行うと自動的にgetに変換されるようなので注意が必要です。※参考記事:ブラウザのPOSTリクエストは、リダイレクトさせるとGETに化ける?

 

name

送信する入力項目に対してそれぞれ一意になるnameを設定します。nameを使ってHTML側とServlet間の値の紐づけを行います。

 

Servlet側の作成

次にServlet側のJavaプログラムを作成していきます。

ソースコード

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=Shift_JIS");

String item1 = request.getParameter("item1");
String item2 = request.getParameter("item2");
PrintWriter out = response.getWriter();//[7]
out.println("<html><head></head><body>");
out.println("<p>入力された項目を表示します。</p>");
out.println("<p>入力項目1:" + item1 + "</p>");
out.println("<p>入力項目2:" + item2 + "</p>");
out.println("</body></html>");
}
}

 

解説

HTML側でgetで送られてくるデータをdoGetメソッドで受け取ります。

注意するポイントは以下の2点になります。

  • htmlに合わせてdoGetメソッドを使用する
  • 受け取った値をhtmlで指定したnameで表示させる

 

Web.xmlの作成

作成したHTMLとServletのclassファイルの紐づけを行っていきます。紐づけを行うのはxmlファイルになります。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>

</web-app>

 

 

フォルダ構成

フォルダ構成は以下のようになっています。

xmlファイルの作成に必要な知識なのでフォルダ構成はしっかりと意識しましょう。

tomcatディレクトリ構造

フォルダ構成が間違っていると今回サンプルとして紹介しているソースコードでは404エラーになると思いますので注意してください。

 

動作結果

それでは実際に今回作成したものを動かしてみたいと思います。

ブラウザにて以下のURLを入力します。

http://localhost:8080/javaroad/jspdir/helloJsp.html

以下の画面が表示されればOKです。

次に値を入力します。

入力実行ボタンを押下するとservletに値が引き渡されます。

このような流れで動作していたら今回のデータの受け渡しはできているということになります。

 

まとめ

今回までで、環境を作って実際にソースコードを動かすところまでできました。

しかし、ディレクトリ構造の理解がいまいちできていないのでaction属性の設定で404エラーが多発して苦戦しました。

本来URLをベタ書きするほよろしくないのでそこはマネしないようにしてください。

また、アドバイス等ありましたらコメントしていただけると幸いです。

しっかりと理解を深めたい方は以下の参考書が有名ですのでよろければ。


にほんブログ村 IT技術ブログへ
にほんブログ村

コメント

タイトルとURLをコピーしました