RikuMoto
@RikuMoto (Riku Moto)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

JSPとサーブレットのエラーメッセージ出力のしかた

解決したいこと

JSPからサーブレットに何かしらのパラメーターを送りそのパラメーターに対して入力チェックをし、その入力チェックがエラーならJSPにエラーメッセージを送り、その後の処理は終わる処理と、エラーなしだったらsqlに追加や編集の処理をしたい。

現在詰まっていることは、入力チェックエラーしているにも関わらず(デバッグで確認済)、その後の処理がされSQLが実行されるというのが今の状況です。

発生している問題・エラー

form.jsp
<form action = "./Add_products" method = "post">
	<div class = "form-item">
		<dt>商品コード</dt>
		<dd><input type="text" name = "Code"></dd>
	</div>
	<div class = "form-item">
		<dt>商品名</dt>
		<dd><input type="text" name = "Name"></dd>
	</div>
	<div class = "form-item">
		<dt>単価</dt>
		<dd><input type="text" name = "Tanka"></dd>
	</div>
	<input type = "submit" value = "送信">
</form>

該当するソースコード

add.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String code = request.getParameter("Code");
		String name = request.getParameter("Name");
		String tanka = request.getParameter("Tanka");

		//nullチェック
		if(code != null && name != null && tanka != null){	
			//半角英数字true
			String str[] = {code,name,tanka};
			for (int i = 0; i < str.length -1; i++){
				if(str[i].matches("^[A-Za-z0-9]+$")){
					;
				}else {
					String error = "半角で入力してください";
					request.setAttribute("error", error);
					RequestDispatcher dispatcher = request.getRequestDispatcher("form.jsp?message="+error);
					dispatcher.forward(request, response);    //理想はここで処理を抜けたい
				}
			}
		}	
                //現状下記の処理が実行される。

		try{
			Class.forName("com.mysql.jdbc.Driver");
			Connection products = DriverManager.getConnection("jdbc:mysqlURL");
			Statement state = products.createStatement();
			try{
				int res = state.executeUpdate("insert into products(code,name,price) values('" + code + "','" + name + "','" + tanka + "')");
			}catch(Exception ex){
				ex.printStackTrace();
			}
			state.close();
			} catch (ClassNotFoundException e){
				e.printStackTrace();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		response.sendRedirect("Products.jsp");
	}

エラーになったときに処理を抜けれるか知りたいです。
上記のコードよりほかの書き方がいいとあればご教授願いたいです。
宜しくおねがいします。

0

1Answer

javaから離れて長いのでアレなのですが、詳しいjspの本を見る限りfowardは処理を抜けないようです
下記にもありました。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11141866681
https://spring.pleiades.io/specifications/platform/8/apidocs/?javax/servlet/http/HttpServletResponse.html
レスポンスだけ別が生成してくれるよ。て感じのようです。

foward後にreturn か もしくはリダイレクトに置き換える必要があるかもしれません。

1Like

Your answer might help someone💌