JSP 关于<jsp:forward>的使用以及传递参数

本文详细介绍了JSP中的前进指令&lt;jsp:forward&gt;的使用方法及其特性,包括如何利用该指令进行页面跳转及参数传递,并给出了具体的示例代码。

首先说明一下,<jsp:forward>是动作指令。
我觉得有必要对jsp中的几个指令总结一下了

jsp中的指令分为两大类,编译指令和动作指令。








编制指令 <%@ inlcude file=” “%>和 <%@ page 属性1 属性2 %>
动作指令 <jsp:include><jsp:forward><jsp:useBean>

下面说<jsp:forward>的用法
使用<jsp:forward>的格式为 <jsp:forward page="filename">

例子:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jspForward</title>
</head>
<body>
<jsp:forward page="login.jsp">
<jsp:param value="admin" name="userName"/>
<jsp:param value="password" name="password"/>
</jsp:forward>
<%="hello world" %>
</body>
</html>

<jsp:forward></jsp:forward>标签对中使用<jsp:param>标签可以进行传值。

跳转到login.jsp,login.jsp的源码如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录信息</title>
</head>
<body>
<table>
<tr>
<td>用户名:</td><td><%=request.getParameter("userName")%></td>
</tr>
<tr>
<td>密码:</td><td><%=request.getParameter("password")%></td>
</tr>
</table>
</body>
</html>

有几点需要说明一下,

  1. <jsp:forward>动作指令之后的代码是不会执行的。
  2. 使用动作指令跳转的页面,浏览器的地址还是跳转之前的页面地址
### JSP 动作元素 `<jsp:include>` 和 `<jsp:forward>` 的区别与使用场景 #### 1. 基本概念 `<jsp:include>` 是用于动态包含其他页面的内容,而 `<jsp:forward>` 则是将当前请求转发到另一个资源。两者都属于 JSP 动作元素的一部分。 #### 2. 使用方法 ##### `<jsp:include>` 该动作允许在一个 JSP 页面中嵌入另一个页面的内容。它通过 `page` 属性指定要包含的目标文件路径[^1]。 ```html <jsp:include page="header.jsp"> <jsp:param name="subTitle" value="Welcome to our website!" /> </jsp:include> ``` 上述代码展示了如何利用 `<jsp:param>` 定制传递给被包含页面的参数[^2]。 ##### `<jsp:forward>` 此动作会终止当前页面处理并将控制权交给目标资源。同样地,可以通过 `page` 属性定义转发的目的地址,并可选地附加参数[^3]。 ```html <jsp:forward page="processRequest.jsp"> <jsp:param name="username" value="JohnDoe"/> </jsp:forward> ``` #### 3. 工作机制对比 | 特性 | `<jsp:include>` | `<jsp:forward>` | |---------------------|----------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------| | **URL 地址变化** | 不改变浏览器显示 URL | 浏览器中的 URL 不变 | | **执行顺序** | 当前页继续执行直到遇到 include 标签时才加载外部内容 | 遇到 forward 后立即停止当前页逻辑转至新页面 | | **响应头发送时间** | 在 response 输出完成之前都可以调用 | 必须在任何 output 发送到客户端前发生 | #### 4. 应用场景分析 - 如果只是想简单引入一些通用组件(比如导航栏或者版权信息),那么应该选用 `<jsp:include>` ,因为它不会影响主流程并且能保持原有状态不变[^3]。 - 对于需要完全跳转的情况,则更适合采用 `<jsp:forward>` 。例如表单提交后的数据处理完毕之后重定向到成功提示界面等操作[^3]。 #### 示例代码展示 以下是两个具体例子分别演示这两种方式的实际应用: ##### Example with `<jsp:include>` ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Main Page</title> </head> <body> <h1>Welcome!</h1> <!-- Include another file --> <jsp:include page="footer.jsp"/> </body> </html> ``` ##### Example with `<jsp:forward>` ```java // Original Servlet Code @WebServlet("/login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); if ("admin".equals(username)) { // Forward successful login requests to dashboard servlet/page. RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/dashboard.jsp"); dispatcher.forward(request, response); } else { response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid credentials."); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值