<jsp:forward>与sendRedirect区别联系
时间: 2024-05-29 16:14:22 浏览: 207
在Java Servlet中,<jsp:forward>和sendRedirect()都可以用于将请求重定向到另一个页面,但它们之间有一些区别。
1. <jsp:forward>是在服务器端进行的重定向,而sendRedirect()是在客户端进行的重定向。
2. <jsp:forward>只能将请求转发到当前Web应用程序中的其他页面,而sendRedirect()可以将请求重定向到任何Web应用程序中的任何页面。
3. <jsp:forward>可以将当前请求的所有信息(包括请求参数)转发到目标页面,而sendRedirect()只能将请求的一部分信息(如请求参数)作为查询字符串传递给目标页面。
4. <jsp:forward>是在服务器内部进行的,因此速度较快,而sendRedirect()涉及到两次HTTP请求,因此速度较慢。
综上所述,如果要将请求转发到当前Web应用程序中的其他页面,并且需要将所有请求信息传递到目标页面,则应使用<jsp:forward>。如果要将请求重定向到其他Web应用程序或需要更快的重定向速度,则应使用sendRedirect()。
相关问题
用Myeclipse建立一个工程, 实现页面注册 利用<jsp:include>设计注册页(注册信息包括学号、用户名、密码、密码确认、邮件。同时包含访问量统计的功能(利用application对象)) 利用JSP设计注册处理页(验证学号是否为10位,密码与密码确认是否相同,邮件地址是否正确)。 不正确跳回注册页面(利用<jsp:forward>,<jsp:param>),处理成功后跳转到注册成功页(利用response对象),并显示所输入的用户名(中文)与密码(利用session对象)。
首先,你需要在MyEclipse中创建一个新的Web项目,然后在该项目下创建一个名为 "register" 的JSP页面。
1. 在 "register.jsp" 页面中,使用 <jsp:include> 标签引入 "header.jsp" 和 "footer.jsp" 页面,并在页面中添加一个表单用于用户注册。表单中包含以下输入项:
- 学号
- 用户名
- 密码
- 密码确认
- 邮件
同时,在表单下方添加一个统计访问量的功能,利用application对象实现。
2. 在 "register.do" 页面中,使用 JSP 代码验证用户输入的信息是否正确。验证包括以下内容:
- 验证学号是否为10位
- 验证密码与密码确认是否相同
- 验证邮件地址是否正确
若验证不通过,则使用 <jsp:forward> 标签跳回 "register.jsp" 页面,并使用 <jsp:param> 标签传递错误信息给 "register.jsp" 页面。
3. 若验证通过,则使用 response 对象跳转到 "success.jsp" 页面,并在页面中显示用户输入的用户名和密码。此时需要使用 session 对象将用户名和密码保存起来,以便在 "success.jsp" 页面中显示。
下面是示例代码:
register.jsp:
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<jsp:include page="header.jsp" />
<h1>用户注册</h1>
<form action="register.do" method="post">
学号:<input type="text" name="studentId"><br>
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
确认密码:<input type="password" name="confirmPassword"><br>
邮件:<input type="text" name="email"><br><br>
<input type="submit" value="注册">
</form>
<hr>
<h3>访问量统计: <%= application.getAttribute("count") %></h3>
<% int count = (int) application.getAttribute("count");
application.setAttribute("count", count + 1); %>
<jsp:include page="footer.jsp" />
</body>
</html>
```
register.do:
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String studentId = request.getParameter("studentId");
String username = request.getParameter("username");
String password = request.getParameter("password");
String confirmPassword = request.getParameter("confirmPassword");
String email = request.getParameter("email");
// 验证学号是否为10位
if (studentId.length() != 10) {
request.setAttribute("errorMsg", "学号必须为10位!");
request.getRequestDispatcher("register.jsp").forward(request, response);
}
// 验证密码和确认密码是否相同
if (!password.equals(confirmPassword)) {
request.setAttribute("errorMsg", "密码和确认密码不相同!");
request.getRequestDispatcher("register.jsp").forward(request, response);
}
// 验证邮件格式是否正确
if (!email.matches("\\w+@\\w+\\.\\w+")) {
request.setAttribute("errorMsg", "邮件格式不正确!");
request.getRequestDispatcher("register.jsp").forward(request, response);
}
// 保存用户名和密码到session中
session.setAttribute("username", username);
session.setAttribute("password", password);
response.sendRedirect("success.jsp");
%>
```
success.jsp:
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册成功</title>
</head>
<body>
<h1>恭喜你,注册成功!</h1>
<p>用户名: <%= session.getAttribute("username") %></p>
<p>密码: <%= session.getAttribute("password") %></p>
</body>
</html>
```
用Myeclipse建立一个工程,将几个页面包含在一个JSP页面中.灵活使用page指令中的errorPage属性与isErrorPage属性,实现一个出错页面以及处理出错页面。使用到: “include包含指令” “page页指令” “HTML注释”:<!— comments --> “隐藏注释”:<%-- comments --%> “声明” <%! 声明; [声明; ] ... %> “表达式” <%= 表达式 %> “脚本段” <% 代码 %> 利用<jsp:include>设计注册页(注册信息包括学号、用户名、密码、密码确认、邮件。同时包含访问量统计的功能(利用application对象)) 利用JSP设计注册处理页(验证学号是否为10位,密码与密码确认是否相同,邮件地址是否正确)。 不正确跳回注册页面(利用<jsp:forward>,<jsp:param>),处理成功后跳转到注册成功页(利用response对象),并显示所输入的用户名(中文)与密码(利用session对象)。
首先,我们需要创建一个Web项目,并在项目中创建以下JSP页面:
1. main.jsp:包含其他几个页面,同时处理错误页面。
2. register.jsp:用于用户注册,包含访问量统计的功能。
3. register_handle.jsp:处理用户注册信息,验证学号、密码和邮件地址。
以下是代码示例:
main.jsp:
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主页面</title>
</head>
<body>
<jsp:include page="register.jsp" />
<%-- 这里可以包含其他页面 --%>
<%-- 处理错误页面 --%>
<%
String errorMessage = (String)request.getAttribute("javax.servlet.error.message");
if(errorMessage != null) {
out.println("<h3>出错啦,错误信息:"+errorMessage+"</h3>");
}
%>
</body>
</html>
```
register.jsp:
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<jsp:include page="header.jsp" />
<h3>用户注册</h3>
<form action="register_handle.jsp" method="post">
<label>学号:</label><input type="text" name="studentId" /><br />
<label>用户名:</label><input type="text" name="username" /><br />
<label>密码:</label><input type="password" name="password" /><br />
<label>确认密码:</label><input type="password" name="confirmPassword" /><br />
<label>邮件:</label><input type="text" name="email" /><br />
<input type="submit" value="提交" />
</form>
<%-- 访问量统计 --%>
<%
int count = 0;
if(application.getAttribute("count") != null) {
count = (int)application.getAttribute("count");
}
count++;
application.setAttribute("count", count);
out.println("本站访问量:"+count);
%>
<jsp:include page="footer.jsp" />
</body>
</html>
```
register_handle.jsp:
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册处理页面</title>
</head>
<body>
<jsp:include page="header.jsp" />
<%
String studentId = request.getParameter("studentId");
String username = request.getParameter("username");
String password = request.getParameter("password");
String confirmPassword = request.getParameter("confirmPassword");
String email = request.getParameter("email");
boolean isError = false;
String errorMessage = "";
// 验证学号是否为10位
if(studentId.length() != 10) {
isError = true;
errorMessage += "学号必须为10位;";
}
// 验证密码是否与确认密码相同
if(!password.equals(confirmPassword)) {
isError = true;
errorMessage += "密码与确认密码不一致;";
}
// 验证邮件地址是否正确
if(!email.matches("\\w+@\\w+\\.\\w+")) {
isError = true;
errorMessage += "邮件地址格式不正确;";
}
if(isError) {
// 跳回注册页面
request.setAttribute("errorMessage", errorMessage);
request.getRequestDispatcher("register.jsp").forward(request, response);
} else {
// 处理成功,跳转到注册成功页面
session.setAttribute("username", username);
session.setAttribute("password", password);
response.sendRedirect("register_success.jsp");
}
%>
<jsp:include page="footer.jsp" />
</body>
</html>
```
我们还需要创建以下公共页面:
header.jsp:
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>头部</title>
</head>
<body>
<header>
<h1>Web项目</h1>
<nav>
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</nav>
</header>
</body>
</html>
```
footer.jsp:
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>底部</title>
</head>
<body>
<footer>
<p>版权所有 © 2019 Web项目</p>
</footer>
</body>
</html>
```
register_success.jsp:
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册成功页面</title>
</head>
<body>
<jsp:include page="header.jsp" />
<h3>恭喜您,注册成功!</h3>
<p>用户名:${sessionScope.username}</p>
<p>密码:${sessionScope.password}</p>
<jsp:include page="footer.jsp" />
</body>
</html>
```
注意:
1. 在main.jsp中使用<%-- comments --%>隐藏注释,以避免在包含其他页面时出现问题。
2. 在register.jsp中使用<jsp:include>包含header.jsp和footer.jsp,以实现页面的复用。
3. 在register.jsp中使用<jsp:include>包含访问量统计的功能。
4. 在register_handle.jsp中使用request.getRequestDispatcher()和request.getRequestDispatcher().forward()实现跳回注册页面。
5. 在register_handle.jsp中使用response.sendRedirect()实现跳转到注册成功页面。
6. 在register_success.jsp中使用EL表达式${sessionScope.username}和${sessionScope.password}获取session中的值。
7. 在register_handle.jsp中使用正则表达式验证邮件地址格式。
8. 在main.jsp中使用request.getAttribute("javax.servlet.error.message")获取错误信息,并输出到页面中。
阅读全文