04-【servlet转发和重定向】
2024-09-04 04:07:55
转发:
//forward(将 数据传给下一个资源(servlet,jsp ,html等 ,把请求和响应的数据和参数设置带过去 )
request.getRequestDispatcher("/ok.jsp").forward(request, response);
重定向
//重定向到 jsp页面
response.sendRedirect(request.getContextPath()+"/redirect.jsp");
response.sendRedirect("http://www.baidu.com");
servlet可以直接跳转到一个页面:比如ok.jsp页面
转发和重定向 比 printwriter.print("")好, 不需要在servlet中拼装html代码 ,我们只需要关注数据
请求转发和重定向的区别
> 请求转发是一个请求一次响应,而重定向是两次请求两次响应
> 请求转发地址栏不变化,地址栏会发生改变【重定向会显示后一个请求的地址】
> 请求转发只能转发到本项目其他Servlet,而重定向不只能重定向到本项目的其他Servlet,还能定向到其他项目
> 请求转发是服务器端行为,只需给出转发的Servlet路径,而重定向需要给出requestURI,即包含项目名!
> 请求转发和重定向效率是转发高!因为是一个请求!
<> 需要地址栏发生变化,那么必须使用重定向!
<> 需要在下一个Servlet中获取request域中的数据,必须要使用转发!
>重定向的第二个请求一定是GET;
>重定向 无法获取 request对象中共享的数据, 因为是两次请求和响应 ,request对象是一次请求和响应中共享request对象
代码解释:
转发到ok.jsp
<%@ page language="java" isELIgnored="false" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'ok.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
${name } This is ok.JSP page....... <br>
</body>
</html>
转发的测试java代码:TestRequestDispatcher.java
package boom.servlet; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 测试请求转发:<url-pattern>/TestRequestDispatcher
*
* @author Administrator
*
*/
public class TestRequestDispatcher extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// request存放数据
request.setAttribute("name", "servlet中设置存放的数据");
// 转发到ok.jsp页面
//forward(将 数据传给下一个资源(servlet,jsp ,html等 ,把请求和响应的数据和参数设置带过去 )
request.getRequestDispatcher("/ok.jsp").forward(request, response);
}
}
重定向到redirect.jsp
<%@ page language="java" isELIgnored="false" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'redirect.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
这是重定向的测试页面This is redirect.jsp page. <br>
</body>
</html>
重定向的测试java代码:TestRedirect.java
package boom.servlet; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 测试重定向:/TestRedirect
* @author Administrator
*
*/
public class TestRedirect extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//request中存放数据
request.setAttribute("name", "测试重定向的数据");
//重定向到 jsp页面
//response.sendRedirect(request.getContextPath()+"/redirect.jsp");
response.sendRedirect("http://www.baidu.com"); //重定向的第二个请求一定是GET
String method = request.getMethod();
System.out.println(method);
}
}
最新文章
- VBA实例收集
- DataSet 关系
- Echarts - js-20160611
- UVA 1572 Self-Assembly
- Leetcode: Median of Two Sorted Arrays. java.
- apicloud ios 打包流程
- requireJS 源码(三) data-main 的加载实现
- PHP 5 常量
- Ubuntu 18.04 系统配置 NPM环境和mysql数据库问题解决
- C# Post 参数中的特殊符号处理
- Oracle 数据库架构
- CDOJ 1962 天才钱vs学霸周2【最大流】
- java Timer 定时每天凌晨0点执行任务
- zookeeper集群和安装dubbo的管控台
- ROS教程1 消息查看和使用服务
- hdu 2588(简单的欧拉
- 雷林鹏分享:C# 多态性
- Python基础-画图:matplotlib.pyplot.scatter
- TCP/IP详解(整理)
- IDEA Tomcat部署时war和war exploded区别以及平时踩得坑
热门文章
- HTML DOM firstChild lastChild nextSibling previousSibling 属性_获取属性值的undefined问题
- Oracle面试题
- 封装Button ,封装UITableView,封装UICollectionView
- TextInput组件的常用属性
- 【并行计算-CUDA开发】从熟悉到精通 英伟达显卡选购指南
- freeRTOS学习一
- intellij idea for mac 2018 破解版
- 23.安装php和echarts进行结合展示图表
- Elastic Search中Document的CRUD操作
- vue页面中图片不显示解决