请求转发和重定向的区别

合集下载

转发和重定向的区别

转发和重定向的区别

redirect 就是服务端根据逻辑,发送 一个状态码,告诉浏览器重新去请 求那个地址,一般来说浏览器会用 刚才请求的所有参数重新请求,所 以 session,request 参数都可以获取, 并且从浏览器的地址栏中可以看到 跳转后的

前者更加高效,在前者可)方法, 并且,这样也有助于隐藏实际的链 接;在有些情况下,比如,需要跳 转到一个其 它服务器上的资源,则必须使用 sendRedirect()方法。
重定向的地址是任意的 重定向之后,浏览器地址栏的地址变成了 location 所指定的地址。
forward 和 redirect 的区别?

答:forward 是容器中控制权的转向,是服务 器请求资源,服务器直接访问目标 地址的 URL,把那个 URL 的响应内容读取 过来,然后把这些内容再发给浏览器, 浏览器根本不知道服务器发送的内容是从哪 儿来的, 所以它的地址栏中还是原来 的地址。

如何重定向?

response.sendRedirect(String url); 其 中,url 是重定向的地址。
编程要注意的问题?
重定向之前,不能够有 out.close()或者 out.flush()操作。
重定向之前,如果 response 对象缓存有数 据,则这些数据会被清空。
重定向的特点 ?


Object request.getAttribute(String name); request.removeAttribute(String name);

编程中要注意的问题:
转发之前,不能够执行 out.close 或者 out.flush。 转发之前,会将 response 中缓存的数据先清 空。

java Servlet请求转发和重定向

java Servlet请求转发和重定向

•请求转发☐请求转发是指将请求再转发到另一资源(一般为JSP或Servlet)。

此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变☐请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发到另外一个资源,并让该资源对浏览器的请求进行响应RequestDispatcher rd = request.getRequestDispatcher(path);rd.forward(request,response);或request.getRequestDispatcher(path) .forward(request,response);•重定向☐重定向是指页面重新定位到某个新地址,之前的请求失效,进入一个新的请求,且跳转后浏览器地址栏内容将变为新的指定地址☐重定向是通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于浏览器重新发送一个请求response.sendRedirect(path);•请求转发和重定向区别如下:☐forward()只能将请求转发给同一个Web应用中的组件,而sendRedirect()方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到其他站点的资源。

☐sendRedirect()方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用forward()方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

☐forward()方法的调用者与被调用者之间共享相同的request对象和response对象;而sendRedirect()方法调用者和被调用者使用各自的request对象和response对象,它们属于两个独立的请求和响应过程。

•使用请求对象(request)存储数据(在servlet中存,在JSP中取)request. setAttribute(“score”,score);int score=(INTEGER)request. getAttribute(“score”);☐HttpServletRequest接口的方法:public void setAttribute(String name, Object obj)public Object getAttribute(String name)public Enumeration getAttributeNames()public void removeAttribute(String name)•使用HttpSession对象存储数据HttpSession session=request.getSession();session. setAttribute(“score”,score);int score=(Integer) session. getAttribute(“score”);☐HttpSession接口的方法public void setAttribute(String name, Object obj)public Object getAttribute(String name)public Enumeration getAttributeNames()public void removeAttribute(String name)•使用ServletContext对象存储数据ServletContext context = this.getServletContext();或ServletContext context = this.getServletConfig().getServletContext();context. setAttribute(“score”,score);int score=(Integer) application. getAttribute(“score”);ServletContext接口的方法public void setAttribute(String name, Object obj)public Object getAttribute(String name)public Enumeration getAttributeNames()public void removeAttribute(String name)简单的说,HttpServletRequest共享的对象仅在请求的生存期中可被访问,使用HttpSession共享的对象仅在会话的生存期中可被访问,使用ServletContext共享的对象在应用程序的生存期中可被访问。

工学院java复习

工学院java复习

1、POST请求和GET请求主要有如下不同:1)POST传输数据大小无限制2)POST比GET请求方式更安全2、Cookie与Session主要有如下区别:1)Cookie和HttpSession是保存会话相关数据的技术,其中Cookie将信息存储在浏览器端,是客户端技术,Session将数据保存在服务器端,是服务器端技术2)Cookie是基于HTTP协议中的Set-Cookie响应头和Cookie请求头进行工作的3)默认情况下HttpSession是基于一个名称为JSESSIONID 的特殊Cookie工作的4)浏览器对Cookie具有严格的限制,一个网站能在浏览器中保存多少Cookie是有限制的3、请求转发与重定向的异同点如下:1)请求转发和重定向都可以实现访问一个资源时转向当前应用资源2)请求转发是一次请求一次响应,而重定向为两次请求两次响应3)一般情况下应该使用请求转发,减少浏览器对服务器的访问,减轻服务器压力4)如果需要改变浏览器的地址栏,或更改浏览器的刷新按钮的功能时需要使用重定向4.1、简述过滤器的作用。

Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。

2、Servlet事件监听器的作用有如下几点:1)监听Web应用程序中ServletContext、HttpSession和ServletRequest等域对象的创建和销毁过程。

2)监听ServletContext、HttpSession和ServletRequest等域对象属性的修改。

3)感知绑定到HttpSession域中某个对象的状态。

5、JDBC的实现步骤如下:1)加载并注册数据库驱动2)通过DriverManager获取数据库连接3)通过Connection对象获取Statement对象4)使用Statement执行SQL语句5)操作ResultSet结果集String url = "jdbc:mysql://localhost:3306/jdbc";String username = "root";String password = "itcast";Connection conn = DriverManager.getConnection(url, username, password);// 3.通过Connection对象获取Statement对象Statement stmt = conn.createStatement();// 4.使用Statement执行SQL语句。

servlet请求转发的三种方式

servlet请求转发的三种方式

servlet请求转发的三种方式servlet中的请求转发主要有三种方式:1、 forward:是指转发,将当前request和response对象保存,交给指定的url 处理。

并没有表示页面的跳转,所以地址栏的地址不会发生改变。

2、 redirect:是指重定向,包含两次浏览器请求,浏览器根据url请求一个新的页面,所有的业务处理都转到下一个页面,地址栏的地址会变发生改变。

3、 include:意为包含,即包含url中的内容,进一步理解为,将url中的内容包含进当前的servlet当中来,并用当前servlet的request和respose来执行url中的内容处理业务.所以不会发生页面的跳转,地址栏地址不会发生改变。

测试如下:首先编写三个html界面:分别是登录界面:login.html;登录成功界面:success.html;登录失败界面:fail.html.之后,处理登录逻辑的servlet类如下:Java代码运行后如果输入正确的用户名密码,则执行include方法,界面显示:include 包含。

登录成功!并且地址栏地址未改变,若是输入错误登录名或者密码,界面显示:登录失败!并且地址栏地址改变。

其中要注意的是sendRedirect方法中在要跳转的页面url前必须加上当前web程序路径名,这个路径通过request.getContextPath()可以得到。

如果吧其中include方法改为forward方法:Java代码登录时输入正确信息,则跳转的页面地址不变,显示:登录成功!不包含url中的内容。

总结如下:redirect与include、forward的区别在于是不是同一个Request,redirect会有两次交互。

include与forward的区别在于输出的内容,include包含本身servlet与跳转页面内容的结果,而forward不包含本身servlet的内容。

第4章 请求和响应题与答案

第4章 请求和响应题与答案

第4章请求和响应题与答案第4章请求和响应一、选择题1.下面选项中关于请求包含include()方法的参数,正确的是()A:依次为ServletRequest和ServletResponse两个B:依次为ServletResponse和ServletRequest两个C:只有ServletRequestD:只有ServletResponse2.通过配置Tomcat来解决GET请求参数的乱码问题,可以在server.xml文件中的Connector节点下添加的属性是()A:useBodyEncodingForURI=”false”B:useBodyEncoding=”true”C:useBodyEncodingForURI=”true”D:useBodyEncoding=”false”3.如果请求消息中包含有多个该指定名称的参数,getParameter()方法的返回值是()A:这些参数的所有值形成一个数组B:“”C:第一个参数的值D:最后一个参数的值4.下列关于HttpServletRequest接口中getDateHeader(String name)方法返回值的说法中,正确的是()A:自1970年1月1日0点0分0秒算起的以秒为单位的时间值B:自1970年1月1日0点0分0秒算起的以毫秒为单位的时间值C:自1970年1月1日0点0分0秒算起的以纳秒为单位的时间值D:自1970年1月1日0点0分0秒算起的以分钟为单位的时间值5.一次重定向过程中,浏览器会发出多少次服务器请求()A:1次B:2次C:0次D:3次二、填空题1.请求包含指的是使用【】方法将Servlet请求转发给其它Web资源进行处理,响应消息中既包含了当前Servlet又包含了其它Web资源的响应消息。

2.在HttpServletResponse接口中,定义了一个【】方法,用于实现请求重定向。

3.我们可以通过response.setHeader("【】",“3”)语句,使当前页面定时每3秒刷新一次。

IP地址的重定向和转发技术的方式

IP地址的重定向和转发技术的方式

IP地址的重定向和转发技术的方式随着互联网的迅猛发展,IP地址的重定向和转发成为互联网通信中不可或缺的技术手段之一。

在网络中,IP地址是唯一的标识符,用于标示设备之间的通信。

然而,由于网络的复杂性和安全性的需求,传统的直接通信方式已经无法满足实际需求,因此需要引入IP地址的重定向和转发技术。

一、IP地址的重定向技术IP地址的重定向技术是指将一个IP地址的请求转发至另一个IP地址的过程。

该技术主要应用于网络服务器的负载均衡、流量控制以及网站的跳转等场景。

下面将介绍几种常见的IP地址的重定向技术。

1. DNS重定向DNS重定向是指通过修改域名系统(DNS)服务器的配置,将用户请求的域名解析结果指向另一个IP地址。

通过DNS重定向技术,服务器可以将请求分发至多台服务器,实现负载均衡。

同时,DNS重定向还可以用于实现网站的灵活跳转,实现多个域名指向同一个IP地址。

2. 301重定向301重定向是指通过HTTP响应的状态码301,将用户请求的URL 重定向至另一个URL。

当服务器接收到用户请求时,会返回一个包含301状态码和新的URL的响应,从而告诉浏览器重新发送请求到新的URL。

301重定向主要用于网页的永久性重定向,能够帮助网站更好地管理和维护网页。

3. 302重定向302重定向与301重定向类似,也是通过返回一个状态码告诉浏览器重定向至新的URL。

不同的是,302重定向用于临时性的重定向。

当服务器接收到用户请求时,会返回一个302状态码和新的URL的响应,告诉浏览器临时重定向至新的URL。

302重定向主要用于临时维护网站或者测试网页。

二、IP地址的转发技术除了IP地址的重定向技术,IP地址的转发技术也是网络通信中的重要方面。

IP地址的转发技术是指路由器根据目标IP地址将数据包转发至下一个网络设备的过程。

下面将介绍几种常见的IP地址转发技术。

1. 静态路由转发静态路由转发是指网络管理员手动配置路由器的路由表,将特定的目标IP地址与对应的下一跳路由器关联起来。

include 和forward和SendRedirect

include 和forward和SendRedirect

其实sendredict就是重定向,而requestDispatcher则是转发。

我认为两个最主要的区别在于重定向是返回数据到客户端之后客户端再向另外的地址发送请求,这样一个来回就发送两次请求,接受两次响应,客户端知道请求发生了变化;而转发则是在服务器端直接发送请求到另外的地址,然后将响应返回到客户端,这样只有一次请求,一次响应,而客户端是不知道请求已经发生变化的。

Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个Servlet或JSP页面,甚至是HTML页面,来处理对请求的响应。

一,RequestDispatcher接口方法简介1,RequestDispatcher对象由Servlet容器来创建,封装一个由路径所标识的服务器资源。

2,RequestDispatcher接口中定义了二种方法用于请求转发:forward(ServletRequest,ServletResponse)方法:将请求转发给服务器上另外一个Servlet,JSP页面,或者HTML文件这个方法必须在响应被提交给客户端之前调用,否则抛出异常。

方法调用后在响应中的没有提交的内容被自动消除。

include(ServletRequest,ServletResponse)方法:用于在响应中包含其他资源(Servlet,JSP页面或HTML文件)的内容。

即请求转发后,原先的Servlet还可以继续输出响应信息,转发到的Servlet对请求做出的响应将并入原先Servlet的响应对象中。

3,forward方法和include方法的区别:forward方法调用后在响应中的没有提交的内容被自动消除。

将请求转发给其他的Servlet后,由被调用的Servlet负责对请求做出响应,而原先Servlet的执行则终止。

include方法使原先的Servlet和转发到的Servlet都可以输出响应信息,即原先的Servlet还可以继续输出响应信息二,得到RequestDispatcher对象三种方法可以得到RequestDispatcher对象:1,利用ServletRequest接口中的getRequestDispatcher(String path)方法。

请求重定向与请求转发

请求重定向与请求转发

ServletContext sc = this.getServletContext(); //ServletContext对象的获取
//RequestDispatcher对象的获取
--RequestDispatcher dis = sc.getNamedDispatcher("/servlet2");
[注: 传递给该方法的参数是在WEB应用程序部署描述符中声明过的Servlet或jsp的映射名称]
2) RequestDispatcher对象的获取[通过ServletRequest对象]:
在ServletRequest接口中也定义了一个 getRequestDispatcher(String param) 方法来获取
4) 用include方法实现资源包含
dis.include(request, response); //[两个页面中的request与response是相同的]
2: HttpServletResponse 接口(请求重定向)
HttpServletResponse 接口中定义了一些用于将请求再次定向到新的资源下的方法,最主要的是
源作为当前响应内容的一部分包含进来.
1) RequestDispatcher对象的获取[通过ServletContext对象]:
ServletContext 接口中定义了两个用于获取 RequestDispatcher对象的方法
(1) getRequestDispatcher(String param)
RequestDispatcher对象,它与ServletContext.getRequestDispatcher()方法的区别在于:
传递给这个方法的参数除了可以采用以"/"开头的路径字符串,还可以采用非"/"开头的相对路径.

转发与重定向

转发与重定向

深入理解Servlet/JSP之“转发和重定向”闻听“Bear”同学求职之时被问及“Servlet/JSP之间转发和重定向有何区别?”其实此问题不甚高明,但凡要谈区别的,必然二者非常相似并略有不同。

“转发”和“重定向”本质相差甚远,答此问题只需言明二者分别为何物即可。

一、转发转发的原理,可以通过下图展示:浏览器的请求发送给组件1,组件1经过一些处理之后,将request和response对象“传递”给组件2,由组件2继续处理,然后输出响应(当然,也可以继续向其他组件“传递”),这个传递的过程称之为“转发”。

整个过程只涉及一次浏览器和服务器之间的“请求-响应”,转发过程中的组件共享同一个请求(request)和响应(response)对象。

转发的意义在于可以实现组件的“分工”。

在基于MVC,多层结构的Web应用中,经常需要多个组件协同完成一次“请求-响应”工作,例如:用户要获取“设备列表信息”,提交请求至控制器组件(Servlet),该Servlet调用适当的JavaBean获取了“设备列表”数据然后再转发至JSP组件去显示信息。

RequestDispatcher对象封装了转发操作。

通过request的getRequestDispatcher(String path)方法获得RequestDispatcher对象,其中String类型参数path表示要转发到的地址。

调用Dispacther 对象的forward(request, response)方法实现转发。

关于转发的具体操作,有如下几点需要注意:1、转发只能在同一个应用的组件之间进行,不可以转发给其他应用的地址。

2、转发的地址可以用“相对地址”方式,也可以用“绝对地址”方式。

但需要注意的是:用绝对地址方式时,应从应用名后(Context path)开始。

例如:要转发到的地址为:(其中tst为应用名),对应的绝对地址为:“/jsp/somewhere.jsp”。

03-JSP隐式对象-课后作业

03-JSP隐式对象-课后作业

1.1、下面不属于JSP内置对象的是:A out对象B respone对象C application对象D page对象1.2、以下哪个对象提供了访问和放置页面中共享数据的方式?A pageContextB responseC requestD session1.3、调用getCreationTime()可以获取session对象创建的时间,该时间的单位是:A 秒B 分秒C 毫秒D 微秒1.4、当response的状态行代码为哪个时,表示用户请求的资源不可用?A 101B 202C 303D 4041.5、可以利用JSP动态改变客户端的响应,使用的语法是:A response.setHeader()B response.outHeader()C response.writeHeader()D response.handlerHeader()2、简述request对象和response对象的作用及常用方法的功能。

3、简述请求转发和请求重定向的定义及它们区别。

一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理(服务器内部的调用),称之为请求转发一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源(浏览器进行2次请求),称之为请求重定向请求重定向和请求转发的区别1.forward是服务器内部转发,而redirect是通过客户端进行转发2.如果用forward进行转发的话,客户端的url地址不会改变,但是如果用redirect的话,则url地址会改变3.如果用forward进行转发,转发页面和被转发页面处于一个request请求内,而redirect不是。

4、session对象与application对象有何区别?请编写JSP程序实现如图所示的简易计算器。

要求:输入“第一个参数”,选择运算类型(+,-,*,/),输入“第二个参数”后,按“计算”按钮,结果将显示在“结果”文本框中。

J EE考试题目及答案

J EE考试题目及答案

J2EE简答题1、简述J2EE的四层模型。

运行在客户端机器上的客户层组件;运行在J2EE服务器上的Web层组件;运行在J2EE服务器上的业务逻辑层组件;运行在EIS服务器上的企业信息系统层软件2、什么是对象持久化?即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。

持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

3、简述一下ORMAPPING,为什么我们使用它?ORM(Object Relational Mapping)是一种为了解决面向对象与关系型数据库存在的互不匹配的现象的技术。

简单说:ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据中。

本质上就是将数据从一种形式转换到另外一种形式。

原因:用它来架起对象和关系型数据库的桥梁,可解决对象层次的映射、对象关系的映射以及对象的持久化问题。

4、简述一下如何使用Hibernate实现对象持久化的过程(可画图或用伪码描述)STEP 1:创建Configuration对象。

在这一步中主要为了进行配置文件的装载操作,读取所有的配置文件并进行解析、STEP 2: 创建SessionFactory对象。

通过创建好的Configuration对象可以创建一个sessionFactory对象的实例,同时是生成Session对象实例的工厂,他在整个应用中应该是,唯一的。

STEP 3:创建Session对象。

Session对象类似于数据库的连接对象,可以理解为与数据库建立的一个连接,但是他的功能要比JDBC中的Connection对象丰富很多。

STEP 4:开始一个事务。

在Java中定义一个事务操作的开始,这是使用Hibernate进行持久化操作必不可少的步骤STEP 5:进行持久化操作。

在这个步骤中可以读取或者保存Java对象。

STEP 6:结束事务。

Java请求转发和重定向的区别

Java请求转发和重定向的区别

Java请求转发和重定向的区别Java请求转发和重定向的区别1、请求转发:request.getRequestDispatcher(URL地址).forward(request, response)处理流程:1. 客户端发送请求,Servlet做出业务逻辑处理。

2. Servlet调⽤forword()⽅法,服务器Servlet把⽬标资源返回给客户端浏览器。

2、重定向:response.sendRedirect(URL地址)处理流程:1. 客户端发送请求,Servlet做出业务逻辑处理。

2. Servlet调⽤response.sendReadirect()⽅法,把要访问的⽬标资源作为response响应头信息发给客户端浏览器。

3. 客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应。

3、转发和重定向的区别:1、转发使⽤的是getRequestDispatcher()⽅法; 重定向使⽤的是sendRedirect();2、转发:浏览器URL的地址栏不变。

重定向:浏览器URL的地址栏改变。

request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显⽰出转向后的地址;服务器内部转发,整个过程处于同⼀个请求当中。

response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。

这样,从浏览器的地址栏中可以看到跳转后的链接地址。

不在同⼀个请求。

重定向,实际上客户端会向服务器端发送两个请求。

所以转发中数据的存取可以⽤request作⽤域:request.setAttribute(), request.getAttribute(),重定向是取不到request中的数据的。

只能⽤session。

3、转发是服务器⾏为,重定向是客户端⾏为;4、转发是浏览器只做了⼀次访问请求。

重定向是浏览器做了⾄少两次的访问请求;5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)6、RequestDispatcher是通过调⽤HttpServletRequest对象的getRequestDispatcher()⽅法得到的,是属于请求对象的⽅法。

请求转发的方法

请求转发的方法

请求转发的方法正文:请求转发是指在网络通信中,将客户端发送的一个请求转发给另一个服务器进行处理的过程。

请求转发的方法有多种,下面将介绍其中几种常见的方法。

1. 重定向:重定向是最常见的请求转发方法之一。

当客户端发送请求到服务器时,服务器会返回一个HTTP状态码,指示客户端将请求重定向到另一个URL。

客户端会重新发送请求到新的URL,完成转发。

重定向可以通过HTTP状态码301和302实现,分别表示永久重定向和临时重定向。

2. 代理服务器:代理服务器是一种充当客户端与目标服务器之间中介的服务器。

当客户端发送请求时,代理服务器会接收请求并转发给目标服务器。

代理服务器可以根据不同的规则来选择目标服务器,例如根据负载均衡算法选择最合适的服务器。

3. 转发器:转发器是一种在应用程序级别进行请求转发的方法。

在Web开发中,常用的转发器是Servlet容器中的RequestDispatcher。

通过RequestDispatcher,开发人员可以将请求转发给同一Web应用程序中的另一个Servlet或JSP进行处理。

转发器可以实现请求的内部转发,对客户端是透明的。

4. 反向代理:反向代理是一种在服务器端进行请求转发的方法。

与代理服务器不同的是,反向代理是将客户端发送的请求转发给内部服务器进行处理。

客户端只知道反向代理服务器的存在,而不知道真正的服务器。

反向代理可以提供负载均衡和缓存等功能,提高服务器的性能和安全性。

总结起来,请求转发是一种将客户端的请求转发给另一个服务器进行处理的方法。

常见的请求转发方法包括重定向、代理服务器、转发器和反向代理。

不同的方法适用于不同的场景,开发人员可以根据实际需求选择最合适的方法。

请求转发(Forward)和重定向(Redirect)的区别

请求转发(Forward)和重定向(Redirect)的区别

请求转发(Forward)和重定向(Redirect)的区别请求转发(Forward)和重定向(Redirect)的区别forward(转发):是服务器请求资源,服务器直接访问⽬标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪⾥来的,因为这个跳转过程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址.redirect(重定向):是服务端根据逻辑,发送⼀个状态码,告诉浏览器重新去请求那个地址.所以地址栏显⽰的是新的URL.转发是服务器⾏为,重定向是客户端⾏为。

区别:1. 从地址栏显⽰来说forward是服务器请求资源,服务器直接访问⽬标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪⾥来的,所以它的地址栏还是原来的地址.redirect是服务端根据逻辑,发送⼀个状态码,告诉浏览器重新去请求那个地址.所以地址栏显⽰的是新的URL.2. 从数据共享来说forward:转发页⾯和转发到的页⾯可以共享request⾥⾯的数据.redirect:不能共享数据.3. 从运⽤地⽅来说forward:⼀般⽤于⽤户登陆的时候,根据⾓⾊转发到相应的模块.redirect:⼀般⽤于⽤户注销登陆时返回主页⾯和跳转到其它的⽹站等4. 从效率来说forward:⾼.redirect:低.本质区别:解释⼀:⼀句话,转发是服务器⾏为,重定向是客户端⾏为。

为什么这样说呢,这就要看两个动作的⼯作流程:转发过程:客户浏览器发送http请求----》web服务器接受此请求–》调⽤内部的⼀个⽅法在容器内部完成请求处理和转发动作----》将⽬标资源发送给客户;在这⾥,转发的路径必须是同⼀个web容器下的url,其不能转向到其他的web路径上去,中间传递的是⾃⼰的容器内的request。

转发和重定向区别

转发和重定向区别

转发和重定向区别页⾯跳转的两种实现⽅式:请求转发和重定向;请求转发:客户⾸先发送⼀个请求到服务器端,服务器端发现匹配的servlet,并指定它去执⾏,当这个servlet执⾏完之后,它要调⽤getRequestDispacther()⽅法,把请求转发给指定的student_list.jsp,整个流程都是在服务器端完成的,⽽且是在同⼀个请求⾥⾯完成的,因此servlet和jsp共享的是同⼀个request,在servlet⾥⾯放的所有东西,在student_list中都能取出来,因此,student_list能把结果getAttribute()出来,getAttribute()出来后执⾏完把结果返回给客户端。

整个过程是⼀个请求,⼀个响应。

重定向:客户发送⼀个请求到服务器,服务器匹配servlet,servlet处理完之后调⽤了sendRedirect()⽅法,⽴即向客户端返回这个响应,响应⾏告诉客户端你必须要再发送⼀个请求,去访问student_list.jsp,紧接着客户端收到这个请求后,⽴刻发出⼀个新的请求,去请求student_list.jsp,这⾥两个请求互不⼲扰,相互独⽴,在前⾯request⾥⾯setAttribute()的任何东西,在后⾯的request⾥⾯都获得不了。

可见,在sendRedirect()⾥⾯是两个请求,两个响应。

(服务器向浏览器发送⼀个302状态码以及⼀个location消息头,浏览器收到请求后会向再次根据重定向地址发出请求)请求转发:request.getRequestDispatcher("/test.jsp").forword(request,response);重定向:response.sendRedirect("/test.jsp");区别:1、请求次数:重定向是浏览器向服务器发送⼀个请求并收到响应后再次向⼀个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到⼀个新的地址;重定向⾄少请求两次,转发请求⼀次;2、地址栏不同:重定向地址栏会发⽣变化,转发地址栏不会发⽣变化;3、是否共享数据:重定向两次请求不共享数据,转发⼀次请求共享数据(在request级别使⽤信息共享,使⽤重定向必然出错);4、跳转限制:重定向可以跳转到任意URL,转发只能跳转本站点资源;5、发⽣⾏为不同:重定向是客户端⾏为,转发是服务器端⾏为;使⽤:1、可以利⽤request的域对象的特点,由源组件向其中存放写数据;2、可以让⽤户访问到存放在WEB-INF⽬录中的⽬标资源;3、重定向的速度⽐转发慢,因为浏览器还得发出⼀个新的请求,所以如果在使⽤转发和重定向都⽆所谓的时候建议使⽤转发;4、因为转发只能访问当前WEB的应⽤程序,所以不同WEB应⽤程序之间的访问,特别是要访问到另外⼀个WEB站点上的资源的情况,这个时候就只能使⽤重定向了。

重定向和转发的区别

重定向和转发的区别

重定向和转发的区别1. 重定向与转发的区别:1.重定向访问服务器两次,转发只访问服务器⼀次。

2.转发页⾯的URL不会改变,⽽重定向地址会改变3.转发只能转发到⾃⼰的web应⽤内,重定向可以重定义到任意资源路径。

4.转发相当于服务器跳转,相当于⽅法调⽤,在执⾏当前⽂件的过程中转向执⾏⽬标⽂件,两个⽂件(当前⽂件和⽬标⽂件)属于同⼀次请求,前后页共⽤⼀个request,可以通过此来传递⼀些数据或者session信息,request.setAttribute()和 request.getAttribute()。

⽽重定向会产⽣⼀个新的request,不能共享request域信息与请求参数5.由于转发相当于服务器内部⽅法调⽤,所以转发后⾯的代码仍然会执⾏(转发之后记得return);重定向代码执⾏之后是⽅法执⾏完成之后进⾏重定向操作,也就是访问第⼆个请求,如果是⽅法的最后⼀⾏进⾏重定向那就会马上进⾏重定向(重定向也需要return)。

6.⽆论是RequestDispatcher.forward⽅法,还是HttpServletResponse.sendRedirect⽅法,在调⽤它们之前,都不能有内容已经被实际输出到了客户端。

如果缓冲区中已经有了⼀些内容,这些内容将被从缓冲区中移除。

可以这么理解: 转发相当于,张三向你借钱,但是你兜⾥没钱,所以你去找李四借到钱之后借给张三。

对于张三⽽⾔并不知道你的钱是和李四借的。

重定向相当于,张三向你借钱,你兜⾥没钱,你告诉他李四有钱,所以张三再次去找李四借钱。

2. 调⽤⽅式转发和重定向在Java中的⽅法如下:request.getRequestDispatcher("/SecondServlet?addParam=newParam").forward(request, response);response.sendRedirect("/WebSocket/SecondServlet"); WebSocket相当于项⽬名称,SecondServlet是具体的servlet请求。

JavaWeb中请求转发和请求重定向的区别以及使用

JavaWeb中请求转发和请求重定向的区别以及使用

JavaWeb中请求转发和请求重定向的区别以及使⽤什么是请求转发?请求转发是指,服务器收到请求后,从⼀次资源跳转到另⼀个资源的操作。

请求转发的特点1.浏览器地址栏不会发⽣变化2.他们⼀次请求,服务器完成转发操作3.共享Request域中的数据4.可以转发到WEB-INF⽬录下5.不可以访问⼯程以外的资源举个例⼦:1.⼀个公司有多个部门,其中部门1(Servlet1)向客户提供了⾃⼰能够提供的服务,但是还有⼀部分服务⾃⼰提供不了,需要其他部门的服务;2.所以部门1(Servlet1)将客户的⽂件盖⼀个章,证明部门1已经提供了服务,然后将其转交(请求转发)到部门2(Servlet2);3.部门2检查部门1是否盖过章了,如果盖过章就继续向客户提供服务…;4.直到所有服务都处理完,将客户需要的数据提供给客户(即,将数据转发给客户端**[转发到某个页⾯]**);package servlet;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class Servlet1 extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.servlet1先获取请求参数,看看servlet1需要做的事String username = request.getParameter("username");System.out.println(username);//.....部门1提供⾃⼰的服务//2.servlet1设置⼀个参数证明servlet1转发的请求(部门1盖⼀个章)request.setAttribute("key1", "servlet1");//3.查询servlet2的路径,(部门1将其转交给部门1)RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");//4.把请求和响应转发给servlet2dispatcher.forward(request, response);}}package servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class Servlet2 extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//部门2查看客户需要的服务System.out.println("Servlet2查看参数: "+request.getParameter("username"));//部门2查看部门1有没有盖章,判断是否继续服务System.out.println("Servlet2查看是否有Servlet1的证明: "+request.getAttribute("key1"));//部门2处理完⾃⼰的服务,System.out.println("Servlet处理⾃⼰的业务");}}注意1.这时候如果我们将Servlet2放在WEB_INF下,那么我们就⽆法直接访问servlet2了;2.但是我们可以通过请求转发来实现访问servlet2;思考:登录功能和这种请求转发⽅法类似,我们⽆法跳过登录界⾯直接访问系统,所有我们可以⽤这种请求转发的⽅法来实现;什么是请求重定向?请求重定向:是指客户端发送请求,然后服务器告诉客户端,我给你⼀个地址,你去新的地址访问(之前的地址可能已经被废弃,或者之前的地址[Servlet]⽆法满⾜需求);第⼀种⽅案// 设置响应状态码 302 ,表⽰重定向,(已搬迁)resp.setStatus(302);// 设置响应头,说明新的地址在哪⾥resp.setHeader("Location", http://localhost:8080);第⼆种⽅案(推荐使⽤)resp.sendRedirect(http://localhost:8080);请求重定向的特点1.浏览器的地址栏会发⽣变化2.浏览器发送了两次请求,⽽不是像调⽤request的getRequestDispatcher("/a/b/c.html").forward(request, response)⽅法实现的;所以⼀共创建了两个request对象3.两个request对象不能共享域数据4.重定向不能访问WEB-INF⾥的资源,因为两次请求都是客户端发起的,客户端⽆法直接访问到WEB-INF⾥的资源5.可以访问⼯程外的资源(⽐如说调转的百度等等)什么时候使⽤请求重定向?1.浏览会记录最后⼀次请求的所有数据,客户端可以通过刷新页⾯的⽅法,重新发起最后⼀次请求;2.⽽我们在请求转发或请求重定向之前,总会处理⼀些业务;此时,如果当本次业务是对数据库,本地⽂件的增删改操作时,就需要使⽤请求重定向;为什么呢?因为,这时如果我们使⽤请求转发(整个处理业务过程就只是⼀次请求),浏览就会记录我们这次请求(操作数据库),⼀旦客户端刷新页⾯,就会执⾏(操作数据库)的请求,这时很严重的bug,我们要避免,所有就要⽤到请求重定向;1.因为我们每次操作完数据库,都会跳转到⾸页,或者数据展⽰的页⾯,所以这时我们使⽤请求重定向跳转到这个页⾯(实际是跳转到某个Servlet查询数据库中的记录,这个Servlet再跳转到数据展⽰的页⾯);2.此时浏览器记录的最后⼀次请求就是查询数据库中记录的请求了,这时我们刷新页⾯,也只是查询数据,不再是对数据库的增删改了;总结:当我们修改数据库中的数据的之后,就需要使⽤请求重定向来避免上述的问题了;到此这篇关于JavaWeb中请求转发和请求重定向的区别以及使⽤的⽂章就介绍到这了,更多相关请求转发和请求重定向内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

转发和重定向路径问题

转发和重定向路径问题

转发和重定向路径问题精髓:开发过程中建议使⽤绝对路径。

“/”使⽤的三个最重要的地⽅:1,web.xml中使⽤“/”,给servlet指定url-partner是为servlet指定通过什么路径能够访问到当前的servlet⽐如我们设置“/test”,那其实我们需要通过localhost:8080/projectname(项⽬名称)/test才能够访问到servlet,所以这⾥的/表⽰的是”localhost:8080/projectname(项⽬名称)/“。

“/"可以理解为⼀个缩写。

2,转发和重定向他们的路径都可以是相对路径,如果是相对路径,在转发和重定向中都⼀样,但是如果他们使⽤绝对路径就不⼀样了转发中“/”表⽰”localhost:8080/projectname(项⽬名称)/“,但是在重定向中使⽤“/”,这个表⽰的是localhost:8080/,也就是到达webapp。

3,在HTML中绝对路径“/”表⽰的是到达tomcat的webapp,不包括当前项⽬路径,只要是HTML前端的“/”到达的都是:localhost:8080"。

从需求⾓度记忆,在可以跨域的地⽅“/”表⽰的是到达localhost:8080,如果不能跨域的地⽅表⽰的就是localhost:8080/projectname(项⽬名称)/。

1,a标签:<a href="/day53/index.jsp">跳转</a> 的路径如果是"/"开头,"/"则相当于"localhost:8080"。

2,form表单:<form action= "/"></form>3,<script type="text/javascript" src="/"></script>4,<link rel="stylesheet" type="text/css" href="/" />5,<script type="text/javascript" >window.location.href="/"</script>以上"/"都表⽰:localhost:8080=================================================⼀、请求转发与响应重定向的种类有两种⽅式获得Servlet转发对象(RequestDispatcher):⼀种是通过HttpServletRequest的getRequestDispatcher()⽅法获得,⼀种是通过ServletContext的getRequestDispatcher()⽅法获得。

转发和重定向的区别

转发和重定向的区别

转发和重定向的区别重定向和转发有⼀个重要的不同:当使⽤转发时,JSP容器将使⽤⼀个内部的⽅法来调⽤⽬标页⾯,新的页⾯继续处理同⼀个请求,⽽浏览器将不会知道这个过程。

与之相反,重定向⽅式的含义是第⼀个页⾯通知浏览器发送⼀个新的页⾯请求。

因为,当你使⽤重定向时,浏览器中所显⽰的URL会变成新页⾯的URL, ⽽当使⽤转发时,该URL会保持不变。

重定向的速度⽐转发慢,因为浏览器还得发出⼀个新的请求。

同时,由于重定向⽅式产⽣了⼀个新的请求,所以经过⼀次重定向后,request内的对象将⽆法使⽤。

怎么选择是重定向还是转发呢?通常情况下转发更快,⽽且能保持request内的对象,所以他是第⼀选择。

但是由于在转发之后,浏览器中URL仍然指向开始页⾯,此时如果重载当前页⾯,开始页⾯将会被重新调⽤。

如果你不想看到这样的情况,则选择重定向。

转发和重定向的区别不要仅仅为了把变量传到下⼀个页⾯⽽使⽤session作⽤域,那会⽆故增⼤变量的作⽤域,转发也许可以帮助你解决这个问题。

重定向:以前的request中存放的变量全部失效,并进⼊⼀个新的request作⽤域。

转发:以前的request中存放的变量不会失效,就像把两个页⾯拼到了⼀起。

正⽂开始:先是看上去不同,他们的调⽤分别如下:request.getRequestDispatcher("apage.jsp").forward(request, response);//转发到apage.jspresponse.sendRedirect("apage.jsp");//重定向到apage.jsp在jsp页⾯中你也会看到通过下⾯的⽅式实现转发:<jsp:forward page="apage.jsp" /><jsp:forward>与response.sendRedirect的区别:<jsp:forward>(转发)具有以下⼏个特点:1)使⽤同⼀个request2)forward后的语句不会继续发送给客户端3)速度快4)服务器内部转换5)可以传参数response.sendRedirect(重定向)具有以下⼏个特点:1)是不同的request2) send后的语句会继续执⾏,除⾮return3)速度慢4)需要到客户端的往返,可以转到任何页⾯5)可以传参数,直接写在url后提到转发和重定向就不得不提到request作⽤域。

JavaHTTP请求转发、重定向和包含

JavaHTTP请求转发、重定向和包含

Java HTTP 请求转发、重定向和包含使Web应用程序如此强大的原因之一是它们彼此链接和聚合信息资源。

J2EE平台为特定的Web组件提供三种相互关联、但是有区别的方式,以便使用其他的数据来创建响应。

本技巧讨论了如何使用Java Servlet API来实现请求转发、重定向和包含。

请求转发请求转发允许组件发送请求到某个应用程序中的,并通过同一应用程序中的不同中的组件来处理该请求。

这种技术通常用于Web层控制器servlet,它检查Web请求中的数据,并将请求定向到合适的组件,以便进行处理。

Servlet可以使用javax.servlet.RequestDispatcher.forward方法来转发它所收到的HTTP请求。

接收转发请求的组件能够处理该请求并生成一个响应,或者它还可以将请求转发到另一个组件。

最初请求的ServletRequest和ServletResponse对象被传递给转发目标组件。

这允许目标组件访问整个请求上下文。

请求可以只转发给同一应用程序上下文根中的组件,而不在应用程序之间转发。

表单通过POST方法发送给DispatchDemoServlet,将完成本技巧中三个例子的处理。

请求转发由servlet的doForward方法处理,代码如下。

protected void doForward(HttpServletRequest req,HttpServletResponse res)throws IOException,ServletException{String name=req.getParameter("name");//Look up the site by name String url=(String)_p.get(name);if(url==null){url="errorPage.html";}//Get the request dispatcher--request will be//dispatched to this URL.RequestDispatcher rd=req.getRequestDispatcher(url);//Forward to requested URL rd.forward(req,res);}POST参数"name"指出用户请求的文件的符号名。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

请求转发和重定向的区别
一、调用方式
我们知道,在servlet中调用转发、重定向的语句如下:
request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp response.sendRedirect("new.jsp");//重定向到new.jsp
在jsp页面中你也会看到通过下面的方式实现转发:
<jsp:forward page="apage.jsp" />
当然也可以在jsp页面中实现重定向:
<%response.sendRedirect("new.jsp");//重定向到new.jsp%>
二、本质区别
解释一
一句话,转发是服务器行为,重定向是客户端行为。

为什么这样说呢,这就要看两个动作的工作流程:
转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。

在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。

转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。

在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。

在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。

重定向行为是浏览器做了至少两次的访问请求的。

解释二
重定向,其实是两次request,
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。

这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。

重定向可以访问自己web应用以外的资源。

在重定向的过程中,传输的信息会被丢失。

例子:
请求转发是服务器内部把对一个request/response的处理权,移交给另外一个
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。

传输
的信息不会丢失。

例子:
解释三
假设你去办理某个执照,
重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A 退了出来,自己乘车去了B局。

转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。

三、请求重定向与请求转发的比较
尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。

下面是HttpServletResponse.sendRedirect方法实现的请求重定向与RequestDispatcher.forward方法实现的请求转发的总结比较:
(1)RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。

(2)调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

(3)HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。

于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。

可见,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。

RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。

这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。

可见,“浏览器”只发出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

(4)RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect 方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用RequestDispatcher.forward方法。

不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用HttpServletResponse.sendRedirect方法。

(5)无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。

如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。

相关文档
最新文档