1.访问资源

运用forward方法只能重定向到同一个Web应用程序中的一个资源。
而sendRedirect方法可以让你重定向到任何URL。
 2.request.get
Forward代码中的"/uu"则代表相对与WEB应用的路径。
举例:
  Servlet 和 目标文件的包路径:
 
 

Servlet  代码:中 doPost 和doGet代码:

request 重定向url地址 或者是是相对于 本项目 (WEB13)  http:localhost:8080/WEB13+url     ;

  url 地址为:     /html/Ok.html   或

          html/Ok.html

而 response 请求转发 的url     以   '  /   '  开头   相当于  本服务器 http:localhost:8080+ url             url   如:  /WEB13/html/No.html

而开头不以 ‘  /  ’ 开头    (html/No.html)    就 是 地址想对应本项目 (WEB13) http:localhost:8080/WEB13/+url

 public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         request.setCharacterEncoding("UTF-8");
         //response.setCharacterEncoding("UTF-8");

         DataSource dataSource=DBCPUtils.getDataSource();
         System.out.println(dataSource);
         QueryRunner qr=new QueryRunner(dataSource);
         PrintWriter out=response.getWriter();

         String userName=request.getParameter("userName");
         String password=request.getParameter("password");

         System.out.println(userName);
         String sql1="select * from user ";
         String sql="select * from user where userName=? and password=?";
 //        Object [] params={userName,password};
         try {
              Object[] u = qr.query(sql,new ArrayHandler(),userName,password);

                  if (u!=null) {
                      System.out.println("查询结果不为空");
                          request.getRequestDispatcher("html/Ok.html").forward(request, response);
 //                         response.sendRedirect("/WEB13/html/Ok.html");
                     }else {
                         System.out.println("查询结果为空");
               response.sendRediect('/WEB13/html/NO.html');
                     }
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }

     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         doGet(request, response);
     }

3.当Servlet 用request 请求转发,表单跳转Servlet 页面 的提交方式 :get ,post:

(运用RequestDispatcher接口的Forward)方法 forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,

同时forward()无法在后面带参数传递, 比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面.

即:  当 另一个页面(这里可以说是登录页面)跳转到Servlet 用get方式   request.getRequestDispatcher().forword(request.response);  是无法跳转的

4.servlet 用request 请求转发  到另一个页面的中文乱码问题

Servlet  request请求转发跳转到另一个页面时: 会出现中文乱码

OK.html

 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="UTF-8">
 <title>登录成功</title>
 </head>
 <body>
     

虽然在第四行  <meta charset="UTF-8">   已经告诉了浏览器显示该Ok页面的编码方式    ,但是没有加   response.setCharacterEncoding("UTF-8");  转发跳转到Ok页面时,显示 的依旧是乱码

 而response 重定向就不会; 

以下是截取 别人博客  地址

只有在客户端没有输出时才可以调用forward方法。如果当前页面的缓冲区(buffer)不是空的,那么你在调用forward方法前必须先清空缓冲区。 "/"代表相对与web应用路径
RequestDispatcher rd = request.getRequestDispatcher("/ooo");
rd.forward(request, response);
提交至http://localhost:8080/Test/ooo 

RequestDispatcher rd = getServletContext().getRequestDispatcher("/ooo");
rd.forward(request, response);
提交至http://localhost:8080/Test/ooo 

RequestDispatcher rd =getServletContext().getNamedDispatcher("TestServlet");(TestServlet为一个<servlet-name>) rd.forward(request, response);
提交至名为TestServlet的servlet 

如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。 另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交 从http://localhost:8080/Test/gw/page.jsp中转发
<jsp:forward page="OtherPage.jsp"/>在JSP页面被解析后转换成pageContext.forward("OtherPage.jsp"); "/OtherPage.jsp"提交到http://localhost:8080/Test/OtherPage.jsp
"OtherPage.jsp"提交到http://localhost:8080/Test/gw/OtherPage.jsp 

(运用HttpServletResponse接口的sendRedirect)方法302
是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,
同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.

假设转发代码包含于注册的servlet-url为/ggg/tt;jsp为/ggg/tt.jsp:
绝对路径:response.sendRedirect("http://www.brainysoftware.com")发送http://www.brainysoftware.com
根路径:response.sendRedirect("/ooo")发送至http://localhost:8080/ooo
相对路径:response.sendRedirect("ooo")发送至http://localhost:8080/Test/ggg/ooo, 

sendRedirect等同于此方式 response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("Location",newLocn); 

(Meta Refresh)方法200
这种方法是由HTML提供的,Meta本身就是HTML标签。
使用方法是:<meta http-equiv="refresh" content="5; url=http://www.dreamdu.com/" />
相应的java代码 String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);

javaWeb中request请求转发和response重定向的更多相关文章

  1. Javaweb中的请求路径的相关总结

    重定向和转发相对路径和绝对路径问题 ​ 注意:转发和重定向的URLString前有加 / 为绝对路径 反之为相对路径 1.假设通过表单请求指定的Url资源 action="LoginServ ...

  2. 入门servlet:request请求转发和共享数据

    request 请求转发:一种在服务器内部的资源跳转方式 步骤: 1.通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(Strin ...

  3. 请求转发 和 URL 重定向

    五 请求转发 和 URL 重定向 1 请求转发和重定向 干什么用? 是我们在java后台servlet中 由一个servlet跳转到 另一个 servlet/jsp 要使用的技术 前端发送请求到后台 ...

  4. Spring MVC中forward请求转发2种方式(带参数)

    Spring MVC中forward请求转发2种方式(带参数) http://www.51gjie.com/javaweb/956.html  

  5. request 请求转发

    package request; import java.io.IOException;import javax.servlet.ServletException;import javax.servl ...

  6. JSTL、请求转发和URL重定向

    JSTL 为什么要使用JSTL? 因为在JSP中写JAVA代码很麻烦,而JSTL可以简化在JSp中写JAva代码的流程 如何使用JSTL? 准备工作: ①将JSTL依赖的jar包导入工程的WEB-IN ...

  7. javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别

    先来两张图,方便理解: 可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源 而请求转发时,类似于是服务器自己向自己发了一个跳转 ...

  8. JSP中的请求转发与重定向

    在说请求转发和重定向之前,得了解下JSP九大内置对象中的response和request response:将服务器端数据发送到客户端,可通过在客户端浏览器中显示,用户浏览页面的重定向以及在客户端创建 ...

  9. Servlet中的请求转发和重定向

    跳转和重定向 有的时候客户端请求到达服务端后需要对请求重新转发到其它Servlet甚至别的服务器,这就需要跳转和重定向. 区别 一般来说,跳转是服务器内部跳转,例如将请求从一个Servlet转发给另外 ...

随机推荐

  1. Matlab中图论工具箱的应用

    Matlab图论工具箱的命令见表1 表1  matlab图论工具箱的相关命令 命令名 功能 graphallshortestpaths 求图中所有顶点对之间的最短距离 graphconncomp 找无 ...

  2. .NET图表控件(LightningChart )的用法

    概述 LightningChart (LightningChart Ultimate) 软件开发工具包是微软Visual Studio 的一个插件,专攻大数据可视化呈现问题,用于 WPF(Window ...

  3. javascript 回到顶部 动画效果

    上代码: <!DOCTYPE html> <html> <head> <meta content="测试demo" name=" ...

  4. PHP 支持8种基本的数据类型

    四种标量类型: boolean (布尔型):这是最简单的类型,只有两种取值,可以为 TRUE/true 或 FALSE/false ,不区分大小写.详细请查看:PHP布尔类型(boolean)inte ...

  5. [Python Study Notes] python面试题总结

    python语法以及其他基础部分 可变与不可变类型: 浅拷贝与深拷贝的实现方式.区别:deepcopy如果你来设计,如何实现: __new__() 与 __init__()的区别: 你知道几种设计模式 ...

  6. 介绍一个轻量级iOS安全框架:SSKeyChain

    SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账户进行访问,包括读取.删除和设置.SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsoffes ...

  7. 基于微软企业库的AOP组件(含源码)

    软件开发,离不开对日志的操作.日志可以帮助我们查找和检测问题,比较传统的日志是在方法执行前或后,手动调用日志代码保存.但自从AOP出现后,我们就可以避免这种繁琐但又必须要实现的方式.本文是在微软企业库 ...

  8. Java JMS 程序基础 与 ActiveMQ 安装(一)

    一 ActiveMQ安装 从Apache官网上下载 ActivieMQ的安装包 apache-activemq-5.9.1-bin.tar.gz, 并拷贝到linux的安装目录解压 # tar -zx ...

  9. Jquery那些坑

    今天写Jquery的时候突然发现在将$("<td><td/>").appendTo(someElement)的时候发现一下子多出来两个,甚是奇怪,检查后端和 ...

  10. Yii2中DAO

    数据库访问 (DAO) 创建数据库连接 执行 SQL 查询 引用表和列名称 执行事务 复制和读写分离 操纵数据库模式 Yii 包含了一个建立在 PHP PDO 之上的数据访问层 (DAO).DAO为不 ...