ServletとJSPのみで実現する場合でも、入力値検証はSpringMVCからも利用できるHibernate Valitator (https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator) を使うと便利です。
なお、サーブレットとJSPで実現するにしても、JSPをより簡単に使えるよう JSTL の導入はしておくと良いでしょう。
例えば、以下のように簡単に1個だけ入力できる画面(JSP)を用意し、
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
4<!DOCTYPE html>
5<html>
6<head>
7<meta charset="UTF-8">
8</head>
9<body>
10<div><c:out value="${ message }"></c:out></div>
11<form action="validator" method="post">
12 <input type="text" name="name" value="<c:out value='${name}'/>"/>
13 <input type="submit" />
14</form>
15</body>
16</html>
サーブレットを以下のようにします。
java
1package sample;
2
3import java.io.IOException;
4import java.util.Set;
5
6import javax.servlet.ServletException;
7import javax.servlet.annotation.WebServlet;
8import javax.servlet.http.HttpServlet;
9import javax.servlet.http.HttpServletRequest;
10import javax.servlet.http.HttpServletResponse;
11import javax.validation.ConstraintViolation;
12import javax.validation.Validation;
13import javax.validation.Validator;
14import javax.validation.ValidatorFactory;
15
16@WebServlet("/validator")
17public class ValidatorSampleServlet extends HttpServlet {
18 protected void doGet(HttpServletRequest request, HttpServletResponse response)
19 throws ServletException, IOException {
20 request.getRequestDispatcher("/validator.jsp").forward(request, response);
21 }
22
23 protected void doPost(HttpServletRequest request, HttpServletResponse response)
24 throws ServletException, IOException {
25 request.setCharacterEncoding("utf-8");
26
27 SampleForm form = getForm(request);
28
29 ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
30 Validator validator = factory.getValidator();
31 Set<ConstraintViolation<SampleForm>> constraintViolations =
32 validator.validate(form);
33 request.setAttribute("message", constraintViolations);
34
35 request.getRequestDispatcher("/validator.jsp").forward(request, response);
36 }
37
38 SampleForm getForm(HttpServletRequest request) {
39 String name = request.getParameter("name");
40 return new SampleForm(name);
41 }
42
43}
SampleFormは、JSPで用意した 入力値 name と、入力値の検証を追加します。
java
1package sample;
2
3import javax.validation.constraints.NotNull;
4import javax.validation.constraints.Pattern;
5
6public class SampleForm {
7 @NotNull
8 @Pattern(regexp = "[0-9A-Za-z]+", message = "${validatedValue} は正しくありません")
9 private String name;
10
11 public String getName() {
12 return name;
13 }
14
15 public SampleForm(String name) {
16 this.name = name;
17 }
18}
入力値のエラーがあった場合は、message の名前でJSPにHibernate Validatorのオブジェクトをそのまま格納していますので、適宜抽出してください。
出力例:
[ConstraintViolationImpl{interpolatedMessage='ううう は正しくありません', propertyPath=name, rootBeanClass=class sample.SampleForm, messageTemplate='${validatedValue} は正しくありません'}]
参考:
Qiita:Bean Validationで簡単入力チェック!