HTMLフォームからServletへデータ送信する方法を初心者向けに解説!Java Webアプリ開発の基本
新人
「Webサイトで名前やメールアドレスを入力して送信するフォームってありますよね。あの入力したデータって、どうやってサーバーに送られているんですか?」
先輩
「いいところに気づきましたね。Webアプリケーションでは、HTMLフォームという仕組みを使って、ブラウザからサーバーへデータを送信しています。」
新人
「HTMLフォームというのは、入力欄がある画面のことですか?」
先輩
「その通りです。ユーザーが入力したデータは、送信ボタンを押すとサーバーに送られます。そしてJavaのServletというプログラムがそのデータを受け取り、データベースに保存することもできます。」
新人
「なるほど。つまり、フォームで入力した情報はServletが受け取るんですね。」
先輩
「そうです。HTMLフォーム、Servlet、データベースの組み合わせは、Java Webアプリ開発の基本中の基本です。順番に仕組みを見ていきましょう。」
1. HTMLフォームからデータを送信するとは?(Webアプリの基本)
Webアプリケーション開発では、ユーザーが入力したデータをサーバーへ送信する仕組みが必要になります。 例えば次のような場面があります。
- 会員登録フォーム
- ログインフォーム
- お問い合わせフォーム
- 商品注文フォーム
これらの画面では、ユーザーがブラウザに情報を入力し、その内容をサーバーに送信しています。 このときに使われるのがHTMLフォームです。
HTMLフォームとは、ユーザーが入力したデータをサーバーに送信するためのHTMLの仕組みです。 入力欄、送信ボタン、チェックボックスなどを組み合わせて作ります。
例えば、紙の申込書をイメージしてください。紙の申込書では名前や住所を書いて提出します。 Webアプリでは、その紙の申込書の役割をHTMLフォームが担当しています。
ユーザーが入力したデータは、送信ボタンを押すことでサーバーへ送られます。 そしてJava Web開発では、そのデータをServletというJavaプログラムが受け取ります。
この仕組みは、Java Servlet、JSP、JDBC、データベース連携などの基礎になる重要な知識です。 Webアプリ開発を学ぶ初心者にとって、HTMLフォームとデータ送信の理解は最初に覚えるべき重要なポイントです。
2. HTMLフォームの基本構造(input・form・POST送信の仕組み)
HTMLフォームは、主に次のタグを使って作成します。
- formタグ
- inputタグ
- buttonタグ
formタグは、フォーム全体を作るタグです。 その中に入力欄や送信ボタンを配置します。
inputタグは、ユーザーが文字を入力するための入力欄を作るタグです。 名前、メールアドレス、パスワードなどの入力欄を作ることができます。
そして、フォームで重要なのがPOST送信という仕組みです。 POST送信とは、入力されたデータをHTTPリクエストとしてサーバーに送信する方法です。
Webアプリケーションでは、データ登録やログインなどの処理ではPOST送信がよく使われます。
実際にHTMLフォームの基本的なサンプルコードを見てみましょう。
<!DOCTYPE html>
<html>
<head>
<title>ユーザー登録フォーム</title>
</head>
<body>
<h2>ユーザー登録</h2>
<form action="UserRegisterServlet" method="post">
名前<br>
<input type="text" name="username"><br><br>
メールアドレス<br>
<input type="email" name="email"><br><br>
<input type="submit" value="送信">
</form>
</body>
</html>
このHTMLフォームでは、ユーザーが名前とメールアドレスを入力して送信できます。
action属性には、データを送信する先のServletのURLを指定します。 method属性には、データ送信の方法を指定します。
methodにpostを指定すると、フォームのデータがHTTP POSTリクエストとしてサーバーへ送信されます。
このように、HTMLフォームはWebアプリケーションの入力インターフェースとして重要な役割を持っています。
3. HTMLフォーム → Servlet → データベース保存の全体の流れ
Java Webアプリケーションでは、HTMLフォームだけでは処理は完結しません。 フォームから送信されたデータは、Servletで処理され、その後データベースに保存されることが多いです。
全体の処理の流れは次のようになります。
↓
ブラウザがPOST送信
↓
Servletがデータを受け取る
↓
データベースへ保存
つまり、HTMLフォームはユーザーの入力画面、Servletはデータを処理するプログラム、データベースはデータを保存する場所という役割になります。
次に、Servlet側でフォームデータを受け取るJavaコードを見てみましょう。
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/UserRegisterServlet")
public class UserRegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("username");
String email = request.getParameter("email");
System.out.println("名前: " + name);
System.out.println("メール: " + email);
}
}
このJavaプログラムでは、request.getParameterというメソッドを使っています。
getParameterメソッドとは、HTMLフォームから送信されたデータを取得するためのメソッドです。 inputタグのname属性と同じ名前を指定することで、入力されたデータを取り出すことができます。
例えば、フォームで入力された名前とメールアドレスを取得して、画面に表示することもできます。
String name = request.getParameter("username");
String email = request.getParameter("email");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("入力された名前: " + name);
response.getWriter().println("<br>");
response.getWriter().println("入力されたメール: " + email);
このように、HTMLフォームとServletを組み合わせることで、ユーザーが入力したデータをJavaプログラムで処理できます。
さらに実際の業務システムでは、ここからJDBCを使ってデータベースへ保存する処理を追加します。
例えば次のようなシステムで使われます。
- 会員登録システム
- お問い合わせ管理システム
- 商品注文システム
- ユーザー管理システム
HTMLフォーム、Servlet、データベースの連携は、Java Webアプリケーション開発の基礎となる非常に重要な技術です。 この流れを理解することで、ログイン機能や登録機能など、実践的なWebシステムを作れるようになります。
4. ServletでHTMLフォームの入力値を受け取る方法(request.getParameterの使い方)
HTMLフォームから送信されたデータは、JavaのServletで受け取ることができます。 Webアプリケーション開発では、ユーザーが入力したデータをサーバー側のプログラムで処理することが重要になります。 そのときに使用するのがrequest.getParameterというメソッドです。
request.getParameterとは、HTMLフォームから送信されたパラメータを取得するためのメソッドです。 HTMLのinputタグで指定したname属性の値を指定することで、入力された内容を取得できます。
例えば、HTMLフォームで次のような入力欄があったとします。
<form action="UserRegisterServlet" method="post">
名前
<input type="text" name="username">
メールアドレス
<input type="email" name="email">
<input type="submit" value="送信">
</form>
このフォームでは、usernameとemailという名前のデータがサーバーに送信されます。 Servletでは、このname属性と同じ名前を指定して値を取得します。
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String email = request.getParameter("email");
System.out.println("ユーザー名: " + username);
System.out.println("メールアドレス: " + email);
}
request.getParameterの引数には、HTMLフォームのname属性を指定します。 すると、ユーザーが入力した文字列を取得できます。
↓
request.getParameterで取得
Webアプリケーション開発では、この仕組みを使ってログイン処理、会員登録処理、検索処理などを実装します。 例えばログイン画面では、ユーザー名とパスワードを取得して認証処理を行います。
なお、getParameterで取得できるデータは文字列です。 数値として扱いたい場合は、数値変換を行う必要があります。
String ageStr = request.getParameter("age");
int age = Integer.parseInt(ageStr);
System.out.println("年齢: " + age);
このように、ServletではHTMLフォームから送信されたデータを簡単に取得できます。 request.getParameterは、Java Servlet開発で非常によく使われる基本メソッドなので、確実に覚えておくことが大切です。
また、フォームから複数の入力データを受け取ることもできます。 例えば会員登録フォームでは、名前、メールアドレス、パスワード、電話番号など、多くの入力項目があります。
それぞれの入力項目にname属性を設定し、Servlet側でgetParameterを使って取得することで、ユーザーの入力情報をプログラムで自由に扱えるようになります。
HTMLフォームとServletの連携は、Java Webアプリケーション開発の基本となる仕組みです。 このデータ取得処理を理解することで、ユーザー入力を扱うさまざまなWebシステムを構築できるようになります。
5. JDBCを使ってフォームデータをデータベースに登録するServletの実装例
HTMLフォームから送信されたデータは、Servletで受け取るだけでなく、データベースに保存することもできます。 Webシステムでは、ユーザー登録、注文管理、お問い合わせ管理などの情報をデータベースに保存する必要があります。
Javaでデータベース操作を行うときに使用する技術がJDBCです。 JDBCとは、Javaからデータベースへ接続し、SQLを実行するための仕組みです。
HTMLフォームで入力されたデータをデータベースに登録する処理の基本的な流れは次のようになります。
↓
Servletが入力値を取得
↓
JDBCでデータベース接続
↓
SQLのINSERT文を実行
↓
データベースに登録
具体的なServletの実装例を見てみましょう。 次のサンプルコードでは、HTMLフォームで入力されたユーザー名とメールアドレスをデータベースに登録します。
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/UserRegisterServlet")
public class UserRegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String email = request.getParameter("email");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/sampledb",
"root",
"password");
String sql = "INSERT INTO users (username, email) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, email);
pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
このServletでは、まずrequest.getParameterを使ってHTMLフォームの入力値を取得しています。 その後、JDBCを使ってデータベースに接続し、INSERT文を実行してデータを登録しています。
executeUpdateメソッドは、INSERT、UPDATE、DELETEなどのデータ更新処理を実行するときに使用します。 このメソッドを実行すると、データベースにレコードが追加されます。
実際の業務システムでは、このような処理を使ってユーザー登録機能や注文登録機能などを実装します。 HTMLフォーム、Servlet、JDBC、データベースを組み合わせることで、実践的なJava Webアプリケーションを構築できるようになります。
また、データベース接続後は必ずConnectionやPreparedStatementをcloseして、リソースを解放することも重要です。 これを忘れると、データベース接続が増え続けてシステムのパフォーマンス低下の原因になります。
JDBCによるデータ登録処理は、Java Web開発の基本技術のひとつです。 フォーム入力とデータベース連携の仕組みを理解することで、より実践的なWebシステム開発が可能になります。
6. PreparedStatementを使った安全なデータ登録処理(SQLインジェクション対策)
Webアプリケーションでデータベース操作を行う場合は、セキュリティ対策が非常に重要になります。 特に注意しなければならないのがSQLインジェクションという攻撃です。
SQLインジェクションとは、ユーザー入力に悪意のあるSQLを埋め込み、データベースを不正操作する攻撃方法です。 例えばログインフォームや検索フォームなどで、入力値をそのままSQL文に連結してしまうと、攻撃の対象になる可能性があります。
例えば次のようなコードは危険です。
String username = request.getParameter("username");
String sql = "INSERT INTO users (username) VALUES ('" + username + "')";
このように文字列を連結してSQL文を作成すると、ユーザー入力によってSQL構造が変わってしまう可能性があります。 そのため、Java WebアプリケーションではPreparedStatementを使用することが推奨されています。
PreparedStatementは、SQL文とパラメータを分離して処理する仕組みです。 これにより、ユーザー入力がSQL構文として解釈されることを防ぐことができます。
PreparedStatementを使った安全なデータ登録処理の例を見てみましょう。
String sql = "INSERT INTO users (username, email) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, email);
pstmt.executeUpdate();
このコードでは、疑問符を使ってパラメータを指定しています。 setStringメソッドを使って値を設定することで、安全にSQLを実行できます。
PreparedStatementを使用すると、次のようなメリットがあります。
- SQLインジェクション対策ができる
- SQL文の可読性が高くなる
- データ型に応じた安全な値設定ができる
- パフォーマンスが向上する場合がある
Java ServletとJDBCを使ったWebアプリケーション開発では、PreparedStatementを使うことが基本となります。 セキュリティ対策を考慮した安全なデータベース操作を行うことが、信頼性の高いシステムを作るうえで重要です。
HTMLフォームから受け取った入力データを安全に処理し、データベースに正しく保存することで、実用的なJava Webアプリケーションを構築できます。 そのため、Servlet、JDBC、PreparedStatementの連携をしっかり理解しておくことが大切です。
7. HTMLフォームからDBにデータを保存する仕組みを使うメリット
HTMLフォームとServletとデータベースを組み合わせることで、実用的なWebアプリケーションを作ることができます。現代のWebシステムの多くは、ユーザーが入力したデータをデータベースに保存し、その情報をもとに画面表示や処理を行っています。
例えば会員登録システムでは、ユーザーが入力した名前やメールアドレスをデータベースに保存します。ログイン機能では、その保存された情報を使って認証処理を行います。このように、フォーム入力とデータベース保存は多くのシステムの基本となる仕組みです。
HTMLフォームからデータベースにデータを保存する仕組みには、さまざまなメリットがあります。主なメリットを見ていきましょう。
- ユーザー情報を永続的に保存できる
- 検索機能や一覧表示などの機能を実装できる
- ユーザー管理や注文管理などの業務システムを構築できる
- 大量のデータを効率よく管理できる
もしデータベースを使用しなかった場合、ユーザーが入力した情報はプログラムの処理が終わると消えてしまいます。しかしデータベースに保存しておけば、サーバーを再起動してもデータは残り続けます。
このように、データを長期間保存できることを永続化と呼びます。業務システムではこの永続化が非常に重要です。顧客情報、注文履歴、問い合わせ履歴などはすべてデータベースに保存され、必要なときに取り出すことができます。
また、データベースに保存された情報は検索処理にも利用できます。例えばユーザー一覧画面では、保存されたユーザー情報をデータベースから取得して画面に表示します。
つまり次のような処理が可能になります。
データベース保存
データ検索
一覧表示
この仕組みを実装することで、会員管理システムや商品管理システムなど、実務で使用される本格的なWebアプリケーションを作ることができます。
Java Web開発では、HTMLフォームで入力されたデータをServletが受け取り、JDBCを使ってデータベースへ保存するという構成が基本になります。この構成を理解することは、JavaエンジニアとしてWebシステムを開発するうえで非常に重要です。
8. フォーム入力データをDB保存するときの注意点(バリデーション・例外処理・文字コード)
HTMLフォームから送信されたデータをデータベースに保存するときは、いくつかの重要な注意点があります。特に重要なのが入力値チェック、例外処理、文字コードの設定です。
これらの処理を正しく実装しないと、システムエラーや不正データの登録が発生する可能性があります。安全で安定したWebアプリケーションを作るためには、これらの基本を理解することが重要です。
入力値チェック バリデーション
バリデーションとは、ユーザーが入力したデータが正しい形式かどうかを確認する処理です。例えば次のようなチェックを行います。
- 名前が未入力ではないか
- メールアドレスの形式が正しいか
- 文字数が制限以内か
もし入力値のチェックを行わないと、空のデータや不正な値がデータベースに保存されてしまいます。そのため、Servletで入力値を確認する処理を実装することが重要です。
String username = request.getParameter("username");
String email = request.getParameter("email");
if (username == null || username.isEmpty()) {
System.out.println("ユーザー名が入力されていません");
return;
}
if (email == null || email.isEmpty()) {
System.out.println("メールアドレスが入力されていません");
return;
}
このように入力値をチェックすることで、データの品質を保つことができます。
例外処理
データベース処理では、接続エラーやSQLエラーなどが発生する可能性があります。そのため、例外処理を実装してエラーが発生したときに適切な対応を行う必要があります。
try {
String sql = "INSERT INTO users (username, email) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, email);
pstmt.executeUpdate();
} catch (Exception e) {
System.out.println("データベースエラーが発生しました");
e.printStackTrace();
}
例外処理を行うことで、システムが突然停止することを防ぐことができます。また、エラー内容をログとして記録することで、問題の原因を調査しやすくなります。
文字コード設定
日本語を扱うWebアプリケーションでは、文字コードの設定も非常に重要です。文字コードを設定しないと、日本語が文字化けする可能性があります。
Servletでは、次のように文字コードを設定することが一般的です。
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
また、レスポンス側でも文字コードを設定します。
response.setContentType("text/html;charset=UTF-8");
この設定を行うことで、日本語データを正しく処理できるようになります。特に日本語のユーザー名や住所などを扱うシステムでは、必ず設定する必要があります。
Webアプリケーション開発では、入力値チェック、例外処理、文字コード設定の三つが基本となる重要なポイントです。これらを意識してプログラムを書くことで、安定したシステムを作ることができます。
9. HTMLフォーム → Servlet → DB保存の重要ポイントまとめ
ここまで、HTMLフォームからServletを経由してデータベースにデータを保存する仕組みについて解説してきました。Javaを使ったWebアプリケーション開発では、この流れを理解することが非常に重要です。
HTMLフォームは、ユーザーがデータを入力するための画面です。ブラウザで入力されたデータは、HTTPリクエストとしてサーバーに送信されます。
そのリクエストを受け取るのがServletです。Servletではrequest.getParameterを使ってフォームの入力値を取得し、必要な処理を行います。
そして、取得したデータをJDBCを使ってデータベースに保存します。SQLのINSERT文を実行することで、新しいレコードをデータベースに登録できます。
この一連の流れを整理すると、次のようになります。
ブラウザがデータ送信
Servletがデータ取得
JDBCでデータベース接続
SQLのINSERT文実行
データベース保存
また、安全で安定したシステムを作るためには、いくつかの重要なポイントがあります。
- PreparedStatementを使ってSQLインジェクション対策を行う
- 入力値チェックを行い不正データを防ぐ
- 例外処理を実装してエラーに対応する
- 文字コード設定を行い日本語を正しく処理する
これらのポイントを理解することで、会員登録機能、ログイン機能、問い合わせ管理システムなど、さまざまなWebシステムを構築できるようになります。
HTMLフォームとServletとデータベースの連携は、Java Web開発の基礎となる重要な技術です。この仕組みをしっかり理解することで、より実践的なWebアプリケーション開発へとステップアップすることができます。