前提・実現したいこと
createInput.jspファイルで表示される画面にて、入力された内容をチャックし、値をcreateCoufirm.jspに受け渡すCreateConfirmServlet.javaファイルを作りたい。
入力項目、name、read、explainの項目は全角入力であり、また、カテゴリー選択で分類1が「開発用語」「運用用語」が選択されていたときは、分類2は必須選択になる。
条件が満たされていないときは、createInput.jspに画面が戻り、条件がOKであれば、createConfirm.jspに値が移されるようにしたい。
発生している問題・エラーメッセージ
分類1で開発用語または運用用語を選択後、分類2で選択を行わない場合(異常系)、画面の遷移が行われず画面が固まってしまう。エクリプスで実行した結果はステータスコード500であった。
適切な分類選択をした場合、値が受け渡され、createConfirm.jspに値が受け渡されるが、入力文字が半角や記号入力でも値が受け渡されてしまう。
Java初心者です全角チェックの正規表現の使い方が間違えているのでしょうか?よろしくお願いします。
HTTPステータス 500 – Internal Server Error タイプ 例外報告 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 java.lang.NullPointerException main.CreateConfirmServlet.doGet(CreateConfirmServlet.java:50) javax.servlet.http.HttpServlet.service(HttpServlet.java:634) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 注意 原因のすべてのスタックトレースは、サーバのログに記録されています Apache Tomcat/9.0.30
該当のソースコード
createInput.jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="java.util.*" %> 4 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>登録入力画面</title> 10<link rel="stylesheet" href="css/glossary.css"> 11<script src="js/category.js"></script> 12<script src="js/validation_input.js"></script> 13</head> 14<body> 15<div id="container"> 16 17 <!-- ヘッダーの読み込み --> 18 <jsp:include page="common/header.jsp" flush="true"/> 19 20 <main> 21 <h2>新規登録</h2> 22 <hr/> 23 <form method="get" action="./CreateConfirmServlet"> 24 <div class = "create"> 25 <label id="h" for="name">見出し</label> 26 <input type="text" name="name" maxlength="50" required/><br><br> 27 </div> 28 <div class = "create"> 29 <label id="h" for="read">読み方</label> 30 <input type="text" name="read" maxlength="50"/><br><br> 31 </div> 32 <div class = "create"> 33 <label id="h" for="category1">分類1</label> 34 <select name="category1" id="category1" required> 35 <option value="">選択してください▼</option> 36 <option value="全般">全般</option> 37 <option value="開発用語">開発用語</option> 38 <option value="運用用語">運用用語</option> 39 </select><br><br> 40 </div> 41 <div class = "create"> 42 <label id="h" for="category2">分類2</label> 43 <select name="category2" id="category2" disabled> 44 </select><br><br> 45 </div> 46 <div class="create"> 47 <label id="h" for="explain">説明</label> 48 <textarea id="explain" name="explain" cols="49" rows="20" placeholder="入力してください。" required></textarea><br><br> 49 </div> 50 <div class="submit"> 51 <input type="submit" class="button1" value="登録"><br><br> 52 </div> 53 </form> 54 <br/> 55 </main> 56 57 <!-- フッターの読み込み --> 58 <jsp:include page="common/footer.jsp" flush="true"/> 59 60</div> 61</body> 62</html>
category.js
1 var CATE2_LIST = [ 2 { id : 0, type: "all", label : "選択して下さい▼", value : ""}, 3 { id : 1, type: "dev", label : "設計", value : "設計" }, 4 { id : 2, type: "dev", label : "実装", value : "実装"}, 5 { id : 3, type: "dev", label : "試験", value : "試験"}, 6 { id : 4, type: "op", label : "運用", value : "運用"}, 7 { id : 5, type: "op", label : "保守", value : "保守"} 8 ]; 9 10 window.addEventListener("load", function() { 11 var 12 updateCategory2 = function ( options ) { 13 var select = document.getElementById("category2"); 14 var enabled = !!options; 15 16 select.disabled = false; // 子要素変更のため 17 select.innerHTML = ""; // 一旦空にする。 18 19 (options || CATE2_LIST.slice(0,1)).forEach(function( item ) { 20 var opt = document.createElement("option"); 21 if( item.id ) opt.id = item.id; 22 opt.value = item.value; 23 opt.textContent = item.label || item.value; 24 25 select.appendChild( opt ); 26 }); 27 select.disabled = !enabled; // 結果に応じて変更 28 }, 29 30 changeCategory = function ( evt ) { 31 var list; // undefined 32 switch( evt.target.value ) { 33 case "開発用語": 34 list = CATE2_LIST.filter( i=>i.type=="dev"||i.type=="all" ); 35 break; 36 case "運用用語": 37 list = CATE2_LIST.filter( i=>i.type=="op"||i.type=="all" ); 38 break; 39 } 40 updateCategory2( list ); 41 } 42 ; 43 44 document.getElementById("category1") 45 .addEventListener("change", changeCategory); 46 }, !1);
CreateConfirm.java
1package main; 2 3import java.io.IOException; 4 5import javax.servlet.ServletException; 6import javax.servlet.annotation.WebServlet; 7import javax.servlet.http.HttpServlet; 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10 11/** 12 * Servlet implementation class CreateConfirmServlet 13 */ 14@WebServlet("/CreateConfirmServlet") 15public class CreateConfirmServlet extends HttpServlet { 16 private static final long serialVersionUID = 1L; 17 18 /** 19 * @see HttpServlet#HttpServlet() 20 */ 21 public CreateConfirmServlet() { 22 super(); 23 // TODO Auto-generated constructor stub 24 } 25 26 /** 27 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 28 */ 29 protected void doGet(HttpServletRequest request, HttpServletResponse response) 30 throws ServletException, IOException { 31 // TODO Auto-generated method stub 32 response.setContentType("text/html; charset=UTF-8"); 33 request.setCharacterEncoding("UTF-8"); 34 // get the value from the request 35 String cName = request.getParameter("name"); 36 String cRead = request.getParameter("read"); 37 String cCat1 = request.getParameter("category1"); 38 String cCat2 = request.getParameter("category2"); 39 String cEx = request.getParameter("explain"); 40 41 if (!cName.matches("^[^-~。-゚]*$")) { 42 request.getRequestDispatcher("/createInput.jsp").forward(request, response); 43 } else if (!cRead.matches("^[^-~。-゚]*$")) { 44 request.getRequestDispatcher("/createInput.jsp").forward(request, response); 45 } else if (!cEx.matches("^[^-~。-゚]*$")) { 46 request.getRequestDispatcher("/createInput.jsp").forward(request, response); 47 } else if (cCat1 == "") { 48 request.getRequestDispatcher("/createInput.jsp").forward(request, response); 49 } else if (cCat1.equals("開発用語")) { 50 if (cCat2.equals("")) { 51 request.getRequestDispatcher("/createInput.jsp").forward(request, response); 52 } 53 } else if (cCat1.equals("運用用語")) { 54 if (cCat2.equals("")) { 55 request.getRequestDispatcher("/createInput.jsp").forward(request, response); 56 } 57 } 58 request.setAttribute("name", cName); 59 request.setAttribute("read", cRead); 60 request.setAttribute("category1", cCat1); 61 request.setAttribute("category2", cCat2); 62 request.setAttribute("explain", cEx); 63 64 getServletConfig().getServletContext().getRequestDispatcher("/createConfirm.jsp").forward(request, 65 response); 66 } 67 68 /** 69 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 70 */ 71 protected void doPost(HttpServletRequest request, HttpServletResponse response) 72 throws ServletException, IOException { 73 // TODO Auto-generated method stub 74 doGet(request, response); 75 } 76 77} 78
補足情報(FW/ツールのバージョンなど)
eclipse version 4.16.0.v20200604-0951
java version "14.0.1"
tomcat9
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/05 08:47
2020/08/05 09:31
2020/08/06 00:19