リクエストを処理するサーブレットの作成
この項では、リクエストを処理するサーブレットの作成について学習します。
クラス名: src/main/java/com/oracle/jdbc/samples/web/WebController.java
Githubの場所: WebController.java
説明: これは、アプリケーションのすべてのフローを制御するメイン・サーブレットです。アプリケーションの新しい機能ごとに、新しいリクエストおよびレスポンスを処理するコードをdoPost()
およびprocessResponse()
にそれぞれ追加します。
サーブレットを作成するステップ:
WebController.java
のパッケージを宣言します。次に示すように、Employeeの結果およびその他の依存クラスを表示するために、Employee
、EmployeeBeanImpl
およびGoogle GSONをインポートします。特定のクラスがインポートされない場合、IntelliJにより、必要なパッケージのインポートを促すメッセージが表示されます。package com.oracle.jdbc.samples.web; import com.oracle.jdbc.samples.entity.Employee; import com.oracle.jdbc.samples.bean.EmployeeBean; import com.oracle.jdbc.samples.bean.EmployeeBeanImpl; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; import java.io.PrintWriter; import java.io.BufferedReader; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.logging.Logger;
- サーブレットに注釈を追加します。
@WebServlet(name = "WebController", urlPatterns = {"/WebController"})
HttpServlet
を拡張するWebController
クラスを宣言します。JdbcBeanImpl
型のjdbcBean
を初期化します。これはグローバル変数になり、reportError()
、processRequest()
およびdoGet()
などのすべてのメソッドで使用できます。public class WebController extends HttpServlet { JdbcBean jdbcBean = new JdbcBeanImpl(); }
reportError()
メソッドを作成して、エラーを取得してWebページに表示します。private void reportError(HttpServletResponse response, String message) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); /*Set the response content type to be “text/html” and charset=UTF-8*/ /*Print the error message*/ try (PrintWriter out = response.getWriter()) { out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet WebController</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>" + message + "</h1>"); out.println("</body>"); out.println("</html>"); } }
processRequest
メソッドを作成して、HTTPGET
およびPOST
メソッドをリクエストするプロセスを作成します。protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Gson gson = new Gson(); List<Employee> employeeList = null; if ((value = request.getParameter(LOGOUT)) != null) { /* Get session and then invalidate it */ HttpSession session = request.getSession(false); if (request.isRequestedSessionIdValid() && session != null) { session.invalidate(); } handleLogOutResponse(request,response); response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); } else { /*Instantiate the employeeList object by invoking getEmployees method of JavaBean*/ employeeList = jdbcBean.getEmployees(); } if(employeeList != null) { response.setContentType("application/json"); /*Set the content type to 'application/json' */ /* Invoke the toJson(…) method and convert the employeeList to JSON*/ gson.toJson(employeeList, new TypeToken<ArrayList<Employee>>() { }.getType(), response.getWriter()); } /*Add an else condition to cover the error scenario when the employeeList is empty*/ else { response.setStatus(HttpServletResponse.SC_NOT_FOUND); } }
handleLogOutResponse(request, response)
メソッドを作成して、ユーザーがアプリケーションからログアウトするときにCookie情報を編集します。private void handleLogOutResponse(HttpServletRequest request, HttpServletResponse response) { Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { cookie.setMaxAge(0); cookie.setValue(null); cookie.setPath("/"); response.addCookie(cookie); } }
doGet
メソッドを作成して、データベースから従業員の詳細を取得し、JSONで結果を表示します。JSONは、HTMLに表示される結果の出力形式になります。protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }
getServletInfo
メソッドを作成して、サーブレットに関する一般的な情報を表示します。public String getServletInfo() { return "JdbcWebServlet: Reading Employees table using JDBC and transforming it as a JSON."; }