今回は、「Webアプリケーションの作成(4)―検索アプリケーションで絞り込み検索―」です。
絞り込み検索をしてみましょう。
■動画はこちら
■動画で使用しているソースコード
サーブレット
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 { //検索条件のJSPにフォワード ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/WEB-INF/sv3_out.jsp"); rd.forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //パラメータ(キーワード)を取得 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); } } |
Javaクラス(検索処理)
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="post"> キーワード <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> |