简体   繁体   English

将请求和响应从jsp发送到servlet

[英]Sending a request and response from a jsp to a servlet

I am writing a validation servlet for a registration form. 我正在为注册表单编写验证servlet。 The form is in a .jsp file and has the following layout: 表单位于.jsp文件中,并具有以下布局:

        <div class="content">
            <h2 class="form">Register</h2>
            <form action="Register">
                <p>
                    User name: <br />
                    <input type="text" name="username" /><br /> First Name: <br />
                    <input type="text" name="fist_name" /><br /> Last Name: <br />
                    <input type="text" name="last_name" /><br /> Email Address: <br />
                    <input type="text" name="email" /><br /> Password: <br />
                    <input type="password" name="password" /><br /> Retype password:
                    <br />
                    <input type="password" name="password2" /><br /> <input
                        type="submit" value="Register" />
                </p>
            </form>

            <!-- end .content -->
        </div>

The validation code should check that each field meets a set of constraints and write back to the jsp error messages if it doesn't. 验证代码应检查每个字段是否满足一组约束,如果不符合,则写回jsp错误消息。

ValidationServlet.java ValidationServlet.java

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // get request parameters for username and password
        String user = request.getParameter("username");
        String firstName = request.getParameter("first_name");
        String lastName = request.getParameter("last_name");
        String email = request.getParameter("email");   
        String pwd = request.getParameter("password");
        String pwd2 = request.getParameter("password2");
        // Validate parameters and forward them to the ejb
        Map<String, String> messages = new HashMap<String, String>();

        if(user != null) {
            // Validate user name
            if(user.trim().isEmpty()) {
                messages.put("error", "Please enter username");
            } else if(!user.matches("^[a-zA-Z0-9]$")) {
                messages.put("error", "Invalid username.");
            } else if(user.length() > MAX_LEN){
                messages.put("error", "Invalid username");
            } else {
                // Username is valid
                messages.put("success", "good");
            }
        }
        if(firstName != null) {
            // Validate first name
            if(firstName.trim().isEmpty()) {
                messages.put("error", "Please enter your first name");
            } else if(!firstName.matches("^[a-zA-Z]$")) {
                messages.put("error", "Invalid name. Use alpha values only.");
            } else if(firstName.length() > MAX_LEN){
                messages.put("error", "Invalid name. Name should be at most " + MAX_LEN + " characters long");
            } else {
                // First name is valid
                messages.put("success", "good");
            }
        }
        if(lastName != null) {
            // Validate last name
            if(lastName.trim().isEmpty()) {
                messages.put("error", "Please enter your last name");
            } else if(!lastName.matches("^[a-zA-Z]$")) {
                messages.put("error", "Invalid name. Use alpha values only.");
            } else if(lastName.length() > MAX_LEN){
                messages.put("error", "Invalid name. Name should be at most " + MAX_LEN + " characters long");
            } else {
                // Last name is valid
                messages.put("success", "good");
            }
        }
        if (email != null) {
            // Email is specified as request parameter, do the business logic here.
            if (email.trim().isEmpty()) {
                messages.put("error", "Please enter email");
            } else if (!email.matches("([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)")) {
                messages.put("error", "Invalid email, please try again.");
            } else {
                // Email is valid
                messages.put("success", "good");
            }
        }
        if(pwd != null) {
            // Validate password
            if(pwd.trim().isEmpty()) {
                messages.put("error", "Please enter password");
            } else if(pwd.length() > MAX_LEN){
                messages.put("error", "Invalid password");
            } else {
                // Password is valid
                messages.put("success", "good");
            }
        }
        if(pwd2 != null) {
            // Validate password
            if(pwd2.trim().isEmpty()) {
                messages.put("error", "Please enter password");
            } else if(pwd2.length() > MAX_LEN){
                messages.put("error", "Invalid password");
            } else if(!pwd2.equals(pwd)) {
                messages.put("error", "Passwords do not match");
            } else {
                // Password is valid
                messages.put("success", "good");
            }
        }
        // Put messages in request scope so that it's accessible in EL by
        // ${messages}.
        request.setAttribute("messages", messages);

        // Forward request to JSP for display.
        request.getRequestDispatcher("login.jsp").forward(request,
                response);
    }

My questions is how can I access each message from the hash map and display them accordingly before the respective input field in the jsp? 我的问题是如何从哈希映射访问每个消息,并在jsp的相应输入字段之前相应地显示它们?

You need to change the key for each input field 您需要更改每个输入字段的键
eg for error messages 例如错误消息

messages.put("user", "Please enter username");  //for user
messages.put("firstName", "Please enter your first name");  //for first_name 
.......
.......
.......

If you want to display success then you can set success in map otherwise do not. 如果要显示成功,则可以在地图中设置成功,否则不要设置。

To access message map on JSP 在JSP上访问message映射

<form action="Register">
  <p>
     User name: <br />
       <input type="text" name="username" /><c:out value="${messages['user']}"/><br /> 
     First Name: <br />
        <input type="text" name="fist_name" /><c:out value="${messages['firstName']}"/><br /> 
     .........
     .........
     .........

     <input type="submit" value="Register" />
  </p>
</form>

See also 也可以看看

To access messages map use the following code: 要访问messages映射,请使用以下代码:

<c:set var="what" value="error"/>
error: <c:out value="${messages[what]}"/>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM