转发:

 //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);
}
}

最新文章

  1. VBA实例收集
  2. DataSet 关系
  3. Echarts - js-20160611
  4. UVA 1572 Self-Assembly
  5. Leetcode: Median of Two Sorted Arrays. java.
  6. apicloud ios 打包流程
  7. requireJS 源码(三) data-main 的加载实现
  8. PHP 5 常量
  9. Ubuntu 18.04 系统配置 NPM环境和mysql数据库问题解决
  10. C# Post 参数中的特殊符号处理
  11. Oracle 数据库架构
  12. CDOJ 1962 天才钱vs学霸周2【最大流】
  13. java Timer 定时每天凌晨0点执行任务
  14. zookeeper集群和安装dubbo的管控台
  15. ROS教程1 消息查看和使用服务
  16. hdu 2588(简单的欧拉
  17. 雷林鹏分享:C# 多态性
  18. Python基础-画图:matplotlib.pyplot.scatter
  19. TCP/IP详解(整理)
  20. IDEA Tomcat部署时war和war exploded区别以及平时踩得坑

热门文章

  1. HTML DOM firstChild lastChild nextSibling previousSibling 属性_获取属性值的undefined问题
  2. Oracle面试题
  3. 封装Button ,封装UITableView,封装UICollectionView
  4. TextInput组件的常用属性
  5. 【并行计算-CUDA开发】从熟悉到精通 英伟达显卡选购指南
  6. freeRTOS学习一
  7. intellij idea for mac 2018 破解版
  8. 23.安装php和echarts进行结合展示图表
  9. Elastic Search中Document的CRUD操作
  10. vue页面中图片不显示解决