JSP转发和重定向的区别

合集下载

servlet跳转页面的几种方法

servlet跳转页面的几种方法

servlet跳转页面的几种方法一直对Servlet的几种页面跳转方式,理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看。

跳转分两部分,一是发生在servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。

Servlet:当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。

1) redirect 方式response.sendRedirect("/a.jsp");页面的路径是相对路径。

sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:response.sendRedirect("");跳转后浏览器地址栏变化。

这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。

2) forward方式RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); dispatcher .forward(request, response);页面的路径是相对路径。

forward方式只能跳转到本web应用中的页面上。

跳转后浏览器地址栏不会变化。

使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttributeJSP:1) response.sendRedirect();和servlet的response.sendRedirect()方式一样。

此语句前不允许有out.flush(),如果有,会有异常:ng.IllegalStateException: Can't sendRedirect() after data has committed to the client.atcom.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpRes ponse.java:558)...跳转后浏览器地址栏变化如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;2) response.setHeader("Location","");此语句前不允许有out.flush(),如果有,页面不会跳转。

请求转发(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。

JavaWeb_程序设计_习题参考答案(第1-6章)

JavaWeb_程序设计_习题参考答案(第1-6章)

《JavaWeb程序设计》练习题参考答案第一章:Servlet基础1、下列选项中属于动态网站技术的是_________(多选)答:PHP/ASP/JSPA、PHPB、ASPC、JavaScriptD、JSP参考答案:PHP(Hypertext Preprocessor):超文本预处理器,其语法大量借鉴C、Java、Perl等语言,只需要很少的编程知识就能使用PHP建立一个真正交互的Web站点,由于PHP开放源代码,并且是免费的,所以非常流行,是当今Internet上最为火热的脚本语言之一。

ASP(Active Server Pages):是一种类似HTML、Script与CGI结合体的技术,他没有提供自己专门的编程语言,允许用户使用许多已有的脚本语言编写ASP应用程序局限于微软的IIS,般只适用于中小型站点,但目前ASP升级演变而来的支持大型网站的开发。

JSP(Java ServerPages):是基于Java Servlet以及Java体系的Web开发技术。

能在大部分服务器上运行,而且易于维护和管理,安全性能方面也被认为是三种基本动态网站技术中最好的。

2、下列关于Servlet的说法正确的是_______(多选)A、Servlet是一种动态网站技术B、Servlet运行在服务端C、Servlet针对每个请求使用一个进程来处理D、Servlet与普通的Java类一样,可以直接运行,不需要环境支持参考答案:Servlet是一种动态网站技术,是运行在服务器端,Servlet针对每个请求使用一个线程来处理,而不是启动一个进程,传统的CGI为每次请求启动一个进程来处理。

所以Servlet 的效率更高3、下列关于Servlet的编写方式正确的是______(多选)A、必须是HttpServlet的子类B、通常需要覆盖doGet() 和doPost()方法或其一C、通常需要覆盖service()方法D、通常要在web.xml文件中声明<servlet>和<servlet-mapping>两个元素参考答案:A、B、D必须继承Httpservlet类,不需要覆盖servlce()方法,service()方法是Servlet接口中的方法,Servlet是HttpServlet的父类,该方法会根据请求类型选择执行doGet()或doPost()方法。

转发和重定向的区别

转发和重定向的区别

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请求转发和重定向的区别

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()⽅法得到的,是属于请求对象的⽅法。

javaweb项目答辩答辩题总结(书本网上语言答辩+自己的语言答辩)

javaweb项目答辩答辩题总结(书本网上语言答辩+自己的语言答辩)

javaweb项⽬答辩答辩题总结(书本⽹上语⾔答辩+⾃⼰的语⾔答辩)答辩每个⼈的总分为1.5分。

每个⼈主要问3个问题。

开发流程===》系统架构====》项⽬模块+功能===》项⽬得失重定向与转发:?九个隐式对象?get与post的区辨:?jsp有静态包含,动态包含,两者的区辨:?什么是MVC:?web系统架构:?java web项⽬答辩总结试题注释:⽤楷体写的就是⽤⾃⼰组织的话来回答⽼师的问题。

1 http协议全名和特点(答辩⽼师:你对HTTP的是怎么理解的:答辩同学:⾸先HTTP是⼀种超⽂本传输协议,也是⼀种⽆状态的协议。

浏览器通过HTTP协议与web服务器交换信息,他处理信息交换的过程是:客户端和web服务器建⽴连接--->客户端发送HTTP请求--->服务器端接收客户端的HTTP请求,⽣成HTTP响应回发--->服务器端关闭连接HTTP请求,HTTP请求⾥有包含有请求⾏,请求头,空⾏,消息体。

HTTP响应⾥⼜包含状态⾏,响应码,空⾏,消息体。

)HTTP是⼀种超⽂本传输协议(HyperText Transfer Protocol),是⼀种⽆状态的协议;HTTP遵循请求/响应模型。

1.⽀持客户/服务器模式。

2.简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。

请求⽅法常⽤的有GET、HEAD、POST。

每种⽅法规定了客户与服务器联系的类型不同。

由于HTTP协议简单,使得HTTP服务器的程序规模⼩,因⽽通信速度很快。

3.灵活:HTTP允许传输任意类型的数据对象。

正在传输的类型由Content-Type加以标记。

4.⽆连接:⽆连接的含义是限制每次连接只处理⼀个请求。

服务器处理完客户的请求,并收到客户的应答后,即断开连接。

采⽤这种⽅式可以节省传输时间。

5.⽆状态:HTTP协议是⽆状态协议。

⽆状态是指协议对于事务处理没有记忆能⼒。

缺少状态意味着如果后续处理需要前⾯的信息,则它必须重传,这样可能导致每次连接传送的数据量增⼤。

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中请求转发和请求重定向的区别以及使⽤的⽂章就介绍到这了,更多相关请求转发和请求重定向内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

转发和重定向的区别

转发和重定向的区别

转发和重定向的区别重定向和转发有⼀个重要的不同:当使⽤转发时,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作⽤域。

转发重定向例子

转发重定向例子

转发重定向例子【篇一:转发重定向例子】httpservletresponse对象的sendredirect(ng.string location)方法称作重定向。

如果location地址前面加上 / ,则表示相对于servlet容器的根来请求,比如;如果location地址前面没有加上 / ,则表示相对于当前请求的uri来寻找地址。

requestdispatcher的:forward(servletrequest request, servletresponse response)方法叫做请求转发。

实验例子1:重定向和请求转发似乎都是造成页面跳转第一个页面first.jsp:%@ page language=java import=java.util.* pageencoding=utf-8% string path = request.getcontextpath();string basepath = request.getscheme()+://+request.getservername()+:+request.ge tserverport()+path+/; !doctype html public -//w3c//dtd html 4.01 transitional//en html head base href= %=basepath% title my jsp first.jsp starting page /title meta http-equiv=pragmacontent=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 linkrel=stylesheet type=text/css href=styles.css /head body form action=second input type=text name=username inputtype=submit value=submit /form /body /html first.jsp第二个页面是servlet:用请求转发:package com.shengqishiwind.servlet;importjava.io.ioexception;importjavax.servlet.requestdispatcher;importjavax.servlet.servletexception;importjavax.servlet.http.httpservlet;importjavax.servlet.http.httpservletrequest;importjavax.servlet.http.httpservletresponse;public class second extends httpservlet public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception process(request, response);public void dopost(httpservletrequest request,httpservletresponse response) throws servletexception, ioexception process(request, response); private voidprocess(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception // 请求转发requestdispatcher rd = request.getrequestdispatcher(third.jsp); rd.forward(request, response);}用重定向,则把处理方法改为:private void process(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception // 重定向 response.sendredirect(third.jsp); }第三个页面是third.jsp%@ page language=java import=java.util.* pageencoding=utf-8% string path = request.getcontextpath();string basepath = request.getscheme()+://+request.getservername()+:+request.ge tserverport()+path+/; !doctype html public -//w3c//dtd html 4.01 transitional//en html head base href= %=basepath% title my jsp third.jsp starting page /title meta http-equiv=pragmacontent=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 linkrel=stylesheet type=text/css href=styles.css /head body thisis my third page. br /body /html不管用请求转发还是重定向的方法,第一个页面点击提交后,都能顺利转到第三个页面:但是其实实际进行的操作还是很不同的,看下面的例子。

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共享的对象在应用程序的生存期中可被访问。

response请求转发和重定向,cookie

response请求转发和重定向,cookie

response请求转发和重定向,cookie ⼀.response:响应对象提供的⽅法:void addCookie(Cookie cookie);服务端向客户端增加⼀个cookie对象void sendRedirect(String location) throws IOExcetion:页⾯跳转的⼀种⽅法void setContentType(String type):设置服务端响应的编码⽰例重定向:login.jsp—->check.jsp->success.jsp 判断登录是否合法1.login.jsp<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html><html><head><meta charset="ISO-8859-1"><title>Insert title here</title></head><body><form action="check.jsp" method="post">⽤户名:<input type="text" name="uname"><br /> 密码:<inputtype="password" name="upwd"><br /> <input type="submit"value="登录"></br></form></body></html>2.check.jsp<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html><html><head><meta charset="ISO-8859-1"><title>Insert title here</title></head><body><%request.setCharacterEncoding("utf-8");String name = request.getParameter("uname");String pwd = request.getParameter("upwd");if (name.equals("zs") && pwd.equals("abc")) {response.sendRedirect("success.jsp");} else {out.print("⽤户名或者密码错误!");}%></body></html>3.success.jsp<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html><html><head><meta charset="ISO-8859-1"><title>Insert title here</title></head><body>登陆成功!<br /> 欢迎您:<%String name = request.getParameter("uname");out.print(name);%></body></html>经发现重定向⽅式会导致数据丢失:⽰例请求转发:checks.jsp修改:<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html><html><head><meta charset="ISO-8859-1"><title>Insert title here</title></head><body><%request.setCharacterEncoding("utf-8");String name = request.getParameter("uname");String pwd = request.getParameter("upwd");if (name.equals("zs") && pwd.equals("abc")) {//response.sendRedirect("success.jsp");request.getRequestDispatcher("success.jsp").forward(request,response);} else {out.print("⽤户名或者密码错误!");}%></body></html>经运⾏发现,地址栏没有变。

jsp的复习题

jsp的复习题
(C)request.getParameter("myName")
(D)request.getParameter("userName ")
8、Servlet 使用( )接口的 forward和 include方法进行通信。
(A) ServletContext (B) ServletConfig
( )37.<%和%>之间可以定义方法。
( )38.在webapps文件夹中新建的子文件夹对应类的包名。
( )39.JSP页面被再次访问的时候,如果内存中仍然保留与之相应的字节码文件,tomcat就直接执行这个文件,而不用重新编译。
( )40.javac的作用是把后缀名为.class的文件编译成后缀名为.java的文件。
15、在JSP中如果要导入 java.io.* 包,应该使用( )指令。
(A) page (B) taglib (C) include (D) forward
判断题
( )1. 在安装JDK之后,环境变量classpath的值通常设置为我们在编程时要使用的类所在的路径或者要使用的类所在的包。
( )52. FORM标记的内容如果提交给当前页面处理,需要把action的值设置成空引号,引号内பைடு நூலகம்连空格也不能有。
( )53. JSP页面访问数据库服务器的时候,可以不使用tomcat,只要打开SqlServer服务器就可以。
( )54. 访问数据库服务器的时候,有了通配符就可以不用写SQL语句了,因为通配符可以代替任何SQL语句。
( )8. 软件安装、设置正确之后,要访问某个页面的时候,只在浏览器中输入地址:端口号/待访问的资源就可以了。

TP04

TP04

JSP中应用Cookie2-2
电子科大成都学院云计算系
------从登录验证页面表单中获取用户名-----<% String username=reqeust.getParameter("username"); //以key/value的形式创建Cookie Cookie uname=new Cookie("uname", username); response.addCookie(uname); ... ... 创建Cookie,使用response的 %> addCookie方法保存Cookie -----在显示页面显示用户名--------------<%//获取请求中的Cookie,以数组方式保存 使用reqeust获取 Cookie cookies[ ]=request.getCookies(); Cookie数组,通过 //循环遍历数组,得到key=uname的Cookie cookie的名称获取对应 for(int i=0;i<cookies.length;i++){ 的内容 Cookie ucookie=cookies[i]; if(ucookie.getName().equals("uname”));//判断Cookie的名称 %> 欢迎你:<%=ucookie.getValue() %>//获取key对应的value,输出显示 <% } %> 演示示例:使用Cookie保存用户名称
管理员界面 3 1、从session中提取该用户信息 2、如果用户信息存在,显示管理员界面内容 4、如果用户信息不存在,跳转到登录页面

使用session实现访问控制42 在控制页面获取用户请求的登录信息进行验

JSP测试笔试题和答案

JSP测试笔试题和答案

内部测试-笔试试卷一、选择题(共25题,每题2分,满分100分)1. 在Servlet中有如下代码段:...public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {RequestDispatcher dis;_____________________________;dis.forward(request,response);}...那么能够正确填写在横线处的选项是(B)。

A. dis = response.getRequestDispatcher("error.jsp");B. dis = request.getRequestDispatcher("error.jsp");C. dis = request .RequestDispatcher("error.jsp");D. dis =new RequestDispatcher("error.jsp");2.下面关于Servlet生命周期的描述不正确的是()。

A. Servlet实例由Servlet容器负责加载和创建//tomcat服务器创建B. Servlet容器调用init()方法初始化Servlet,每加载一次Servlet都会执行一次init()方法.XXXXXC. Servlet初始化完毕后,就处于能响应请求的就绪状态D. Servlet的destroy()方法指明哪些资源可以被系统回收//调用destroy方法销毁3. 下列选项中关于HttpSession描述错误的是()。

A. HttpSession通过HttpServletRequest对象获得B. HttpSession可以用来保存数据,并实现数据的传递C. HttpSession被创建后,将始终存在,直到服务停止D. 调用HttpSession的invalidate()方法,可以删除创建的HttpSession对象及数据4.在Java EE中,如果req是HttpServletRequest的实例,要通过req获取已经存在的HttpSession对象,如果不存在就创建一个HttpSession对象,下面选项中()可以实现。

转发和重定向的区别与联系

转发和重定向的区别与联系

转发和重定向的区别与联系作为⼀名Java Web开发的程序员,在使⽤Servlet/JSP的时候,我们必须要知道实现页⾯跳转的两种⽅式的区别和联系:即转发和重定向的区别。

什么是转发客户⾸先发送⼀个请求到服务器端,服务器端发现匹配的Servlet,并指定它去执⾏。

当这个Servlet执⾏完之后,它要调⽤getRequestDispacther()⽅法,把请求转发给指定的JSP,整个流程都是在服务器端完成的,⽽且是在同⼀个请求⾥⾯完成的,因此Servlet和JSP共享的是同⼀个Request,在Servlet⾥⾯放的所有东西,在JSP中都能取出来,因此,JSP能把结果getAttribute()出来,getAttribute()出来后执⾏完把结果返回给客户端。

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

request.getRequestDispatcher("/yanggb.jsp").forword(request, response);什么是重定向客户⾸先发送⼀个请求到服务器端,服务器端发现匹配的Servlet,并指定它去执⾏。

当这个Servlet执⾏完之后,它就会调⽤sendRedirect()⽅法,⽴即向客户端返回这个响应,响应告诉客户端你必须要再发送⼀个请求,去访问JSP。

紧接着客户端收到这个请求后,就会⽴刻发出⼀个新的请求,去请求JSP,这⾥的两个请求互不⼲扰,相互独⽴。

这就意味着,在前⾯Request⾥⾯setAttribute()的任何东西,在后⾯的request⾥⾯都获得不了。

由此可见,在sendRedirect()⾥⾯是两个请求,两个响应(服务器向浏览器发送⼀个302状态码以及⼀个location消息头,浏览器收到请求后会向再次根据重定向地址发出请求)。

response.sendRedirect("/yanggb.jsp");区别与联系1.RequestDispatcher.forward()⽅法只能将请求转发给同⼀个WEB应⽤中的组件;⽽HttpServletResponse.sendRedirect()⽅法不仅可以重定向到当前应⽤程序中的其他资源,还可以重定向到同⼀个站点上的其他应⽤程序中的资源,甚⾄是使⽤绝对URL重定向到其他站点的资源。

转发和重定向路径问题

转发和重定向路径问题

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

“/”使⽤的三个最重要的地⽅: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()⽅法获得。

重定向和转发的区别

重定向和转发的区别

重定向和转发的区别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请求。

转发与重定向

转发与重定向

深入理解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”。

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"指出用户请求的文件的符号名。

jsp程序设计笔试简答

jsp程序设计笔试简答

1.什么是Servlet?答、Servlet是基于java的一种技术和标准,通常译为服务器小应用程序,是运行在服务器端的java应用程序。

3. Servlet的技术特点答、能够以进程运行、已编译、防崩溃、跨平台、跨服务器、持久性、在网络中动态加载、易于部署、可扩展性、多线程、面向对象、独立于协议、安全性、用java编写、自动重载。

4、JSP页面由哪些元素组成?<!-- JSP中的指令标识--><%@ page language="java" contentType="text/html; charset=gb2312”%><%@ page import="java.util.Date" %><!-- HTML标记语言--><html><head><title>JSP页面的基本构成</title></head><body><center><!-- 嵌入的Java代码--><% String today=new Date().toLocaleString(); %><!-- JSP表达式-->今天是:<%=today%><!-- HTML标记语言--></center></body></html>3-2 JSP中主要包含哪几种指令标识?它们的作用及语法格式是什么?答:page定义一个JSP页面的全局属性。

include在JSP中包含引用其他的资源。

taglib定以在JSP页面中使用到客户化标签库及引用标识。

tag用于声明客户化tag的属性。

variable用于声明一个EL的tag标记变量。

attribute用于在tag file中声明一个tag的属性。

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

JSP转发和重定向的区别
重定向response.sendRedirect("a.jsp");
转发:request.getRequestDispatcher("a.jsp").forward(request,response);
1.转发在服务器端完成的;重定向是在客户端完成的
2.转发的速度快;重定向速度慢
3.转发的是同一次请求;重定向是两次不同请求
4.转发不会执行转发后的代码;重定向会执行重定向之后的代码
5.转发地址栏没有变化;重定向地址栏有变化
6.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
好长时间不看,又把基础只是给忘了。

今天好好的再看看。

呵呵呵......温故而知新啊!!!
1.RequestDispatcher.forward()――转发
是在服务器端起作用,当使用forward()时, Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递.
但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过 response.setAttribute("name", name)来传至下一个页面.
转发后浏览器地址栏URL不变.
例:在servlet中进行重定向
public void doPost(HttpServletRequestrequest,HttpServletResponse response)
throws ServletException,IOException
{
response.setContentType("text/html; charset=gb2312");
ServletContextsc = getServletContext();
RequestDispatcherrd = null;
rd = sc.getRequestDispatcher("/index.jsp"); //定向的页面 rd.forward(request, response);
}
通常在servlet中使用,不在jsp中使用。

2.response.sendRedirect()――重定向
是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如
servlet?name=frank传至下个页面,同时它可以重定向至不同的主机
上,sendRedirect()可以重定向有frame.的jsp文件.
重定向后在浏览器地址栏上会出现重定向页面的URL
例:在servlet中重定向
public void doPost(HttpServletRequestrequest,HttpServletResponse response)
throws ServletException,IOException
{
response.setContentType("text/html; charset=gb2312");
response.sendRedirect("/index.jsp");
}
由于response是jsp页面中的隐含对象,故在jsp页面中可以用
response.sendRedirect()直接实现重定位。

由于response是jsp页面中的隐含对象,故在jsp页面中可以用
response.sendRedirect()直接实现重定位。

注意:
(1).使用response.sendRedirect时,前面不能有HTML输出。

这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。

事实上现在的server都有cache机制,一般在8K(我是说JSP SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的 HTML输出也是允许的。

(2).response.sendRedirect之后,应该紧跟一句return;
我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。

既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。

比较:
(1).Request Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
(2).response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。

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

前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法.
注:在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。

3.<jsp:forward page="" />
它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。

如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。

另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交
4.修改HTTP header的Location属性来重定向
通过设置直接修改地址栏来实现页面的重定向。

jsp文件代码如下:
<%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("Location",newLocn);
%>
5.JSP中实现在某页面停留若干秒后,自动重定向到另一页面
在html文件中,下面的代码:
<meta http-equiv="refresh" content="300; url=target.jsp"> 它的含义:在5分钟之后正在浏览的页面将会自动变为target.html这一页。

代码中300为刷新的延迟时间,以秒为单位。

targer.html为你想转向的目标页,若为本页则为自动刷新本页。

由上可知,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。

关键代码:
String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);。

相关文档
最新文档