[英]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>
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.