今回は、「Webアプリケーションの作成(5)―検索アプリケーションをブックマークに対応―」です。
 フォームの検索結果などでPOSTを使うと、そのページがブックマークできないことがあります。
 今回は、検索結果ページをブックマークできるようにしてみましょう。
■動画はこちら
■動画で使用しているソースコード
サーブレット
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import java.io.IOException; import java.util.List; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; public class Sv3 extends HttpServlet {     @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         if(req.getParameter("kw") == null) {             //検索条件のJSPにフォワード             ServletContext sc = getServletContext();             RequestDispatcher rd = sc.getRequestDispatcher("/WEB-INF/sv3_out.jsp");             rd.forward(req, resp);         } else {             //パラメータ(キーワード)を取得             String kw = req.getParameter("kw");             //検索のクラスでキーワードを検索             Kensaku k = new Kensaku();             List<String> resultList = k.execute(kw);             //キーワードと検索結果をリクエストにセット             req.setAttribute("keyword", kw);             req.setAttribute("result", resultList);             //検索条件のJSPにフォワード             ServletContext sc = getServletContext();             RequestDispatcher rd = sc.getRequestDispatcher("/WEB-INF/sv3_out.jsp");             rd.forward(req, resp);         }     } } | 
検索処理
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class Kensaku {     public List<String> execute(String kw){         ArrayList<String> resultList = new ArrayList<String>();         //キーワードが未入力なら、検索しない         if(kw.equals("")) {             return resultList;         }         //キーワードを半角スペースで分解する         String[] kwArray = kw.split(" ");         try {             //ファイルの読み込み             List<String> dataList = loadFile();             //キーワードを含む行を検索             for(String s : dataList) {                 if(findStr(s, kwArray)) {                     resultList.add(s);                 }             }         } catch (Exception e) {             return null;         }         return resultList;     }     private boolean findStr(String s, String[] kwArray) {         //キーワードで繰り返し検索         for(String k : kwArray) {             //(1つでも)見つからない場合、falseを返す             if(s.indexOf(k) == -1) {                 return false;             }         }         return true;     }     private List<String> loadFile() throws FileNotFoundException, IOException{         ArrayList<String> dataList = new ArrayList<String>();         try(FileInputStream fis = new FileInputStream("d:\\work\\todofuken.txt");              InputStreamReader isr = new InputStreamReader(fis);              BufferedReader br = new BufferedReader(isr);){             String s = null;             while((s = br.readLine()) != null) {                 dataList.add(s);             }         }         return dataList;     } } | 
JSP
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <%@ page import="java.util.List" %> <% //キーワード、検索結果を取得 String kw = (String)request.getAttribute("keyword"); List<String> result = (List<String>)request.getAttribute("result"); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <h2>都道府県検索</h2> <% //フォームのキーワード欄にセットする値(null以外のときにセット) String inputValue = ""; if(kw != null){     inputValue = kw; } %> <form action="http://apsv/testWeb/sv3" method="get">     キーワード     <input type="text" name="kw" value="<%= inputValue %>" />     <input type="submit" value="検索" /> </form> <% if(kw != null) { %> <hr> <%     if(kw.equals("")) { %> <h3>キーワードが未入力です</h3> <%     } else if(result.size() == 0) { %> <h3>「<%= kw %>」の検索結果はありません</h3> <%     } else { %> <h3>「<%= kw %>」の検索結果</h3> <%         for(String s : result) { %>     <%= s %><br /> <%         } %> <%     } %> <% } %> </body> </html> | 
web.xml
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" id="WebApp_ID" version="5.0">   <display-name>testWeb</display-name>   <servlet>     <description></description>     <display-name>Sv3</display-name>     <servlet-name>Sv3</servlet-name>     <servlet-class>Sv3</servlet-class>   </servlet>   <servlet-mapping>     <servlet-name>Sv3</servlet-name>     <url-pattern>/sv3</url-pattern>   </servlet-mapping> </web-app> | 














