勉強中のため自分用のアプリケーションです。
Eclipseを使用してます
Java Servlet
Javaのプログラムの一種で、主にWebアプリケーションでサーバーサイド処理を行う為の技術。
主な役割
・リクエスト処理
クライアントから送信されたデータを受け取る
・ビジネスロック実行
サーバーサイドの処理(データベース操作)を行う。
・レスポンス作成
処理結果を基にクライアントにデータを返すHTML, JSON, XMLなど)。
メリット
・プラットフォームに依存しない
javaで実装されているため、javaが動作するプラットフォームであればどこでも動かすことができる。Windows、Linux、macOSなど様々な環境で動作できる
・ライフリサイクル管理が容易
ライフリサイクル(生成→初期化→リクエスト処理→破棄)は、サーバが自動的に管理。リソース管理やエラーハンドリングがシンプルになる。
・セキュリティ
Javaのセキュリティ機能を活用することで、安全なWebアプリケーションを構築できる
スケーラビリティ
Servletはマルチスレッド対応で、多くのリクエストを効率的に処理する設計。複数のクライアントリクエストを並行して処理できる。
コード作成
こんにちは と表示されるように作成
Eclipesを使用しているので、web.xmlは自動作成を利用してます。
//必要なインポート文を記述
import java.io.IOException;// IO操作に関する例外処理をサポートするクラスをインポート
import java.io.PrintWriter;//出力用にPrintWriterインポート
import jakarta.servlet.ServletException;// サーブレットで発生する例外をサポートするクラスをインポート
import jakarta.servlet.annotation.WebServlet;// サーブレットをURLにマッピングするためのアノテーションをインポート
import jakarta.servlet.http.HttpServlet;// サーブレットの基本クラスをインポート
import jakarta.servlet.http.HttpServletRequest;// クライアントからのHTTPリクエスト情報を扱うクラスをインポート
import jakarta.servlet.http.HttpServletResponse;// サーバーからのHTTPレスポンス情報を扱うクラスをインポート
//アノテーションを使ってURLパターンを指定
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//レスポンのコンテンツタイプをHTMLに設定し、文字エンコーディングをUTF-8に指定
response.setContentType("text/html; charset=UTF-8");
//レスポンスに書き込むためのPrintWriterオブジェクトを取得
PrintWriter pw = response.getWriter();
//こんにちはト表示させるためのHTMLの記述
pw.println("<html><head><title>HelloServlet></title></head>");
pw.println("<body>");
pw.println("<h1>こんにちは</h1>");
pw.println("</body></html>");
pw.close();
}
}
サーブレットにおけるリクエストとレスポンス
リクエストオブジェクト (HttpServletRequest):
・クライアントから送信されたリクエスト情報(メソッド、パラメーター、ヘッダー、ボディなど)を保持
・サーブレットはこのオブジェクトを使って、クライアントの要求を取得
レスポンスオブジェクト (HttpServletResponse):
・サーバがクライアントに返すレスポンス情報を保持
・サーブレットはこのオブジェクトを使って、レスポンスのステータスコードを設定したり、出力データ(HTML,JSON) をクライアントに送信
フォームのデータ送信と処理
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>自己紹介フォーム</title>
</head>
<body>
<h2>自己紹介を入力してください</h2>
<form method="post" action="/Sample/InputServlet">
名前: <input type="text" name="name"><br><br>
年齢:<input type="text" name="age"><br><br>
出身:<input type="text" name="from"><br><br>
<input type="submit" value="送信">
</form>
</body>
</html>
import java.io.IOException;
import java.io.PrintWriter;
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("/InputServlet")
public class InputServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
// フォームから送信されたデータを取得
String name = request.getParameter("name");
String age = request.getParameter("age");
String from = request.getParameter("from");
PrintWriter pw = response.getWriter();
// フォームデータが入力されているかを確認し、レスポンスを生成
if(name != null && !name.isEmpty()) {
pw.println("<html><head><title>自己紹介</title></head>");
pw.println("<h1>自己紹介</h1>");
pw.println("私の名前は" + name +"で、年齢は" + age + "歳です。出身地は " + from + "です。");
pw.println("</body></html>");
} else {
pw.println("<html><head><title>エラー</title></head><body>");
pw.println("<h1>名前を入力してください</h1>");
pw.println("</body></html>");
}
pw.close();
}
}