JavaWeb中请求转发和请求重定向的区别有哪些(javaweb,开发技术)

时间:2024-05-09 19:30:37 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

什么是请求转发?

请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作。

JavaWeb中请求转发和请求重定向的区别有哪些

请求转发的特点

1.浏览器地址栏不会发生变化

2.他们一次请求,服务器完成转发操作

3.共享Request域中的数据

4.可以转发到WEB-INF目录下

5.不可以访问工程以外的资源

举个例子:

1.一个公司有多个部门,其中部门1(Servlet1)向客户提供了自己能够提供的服务,但是还有一部分服务自己提供不了,需要其他部门的服务;

2.所以部门1(Servlet1)将客户的文件盖一个章,证明部门1已经提供了服务,然后将其转交(请求转发)到部门2(Servlet2);

3.部门2检查部门1是否盖过章了,如果盖过章就继续向客户提供服务…;

4.直到所有服务都处理完,将客户需要的数据提供给客户(即,将数据转发给客户端**[转发到某个页面]**);

packageservlet;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;publicclassServlet1extendsHttpServlet{protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//1.servlet1先获取请求参数,看看servlet1需要做的事Stringusername=request.getParameter("username");System.out.println(username);//.....部门1提供自己的服务//2.servlet1设置一个参数证明servlet1转发的请求(部门1盖一个章)request.setAttribute("key1","servlet1");//3.查询servlet2的路径,(部门1将其转交给部门1)RequestDispatcherdispatcher=request.getRequestDispatcher("/servlet2");//4.把请求和响应转发给servlet2dispatcher.forward(request,response);}}
packageservlet;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;publicclassServlet2extendsHttpServlet{protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//部门2查看客户需要的服务System.out.println("Servlet2查看参数:"+request.getParameter("username"));//部门2查看部门1有没有盖章,判断是否继续服务System.out.println("Servlet2查看是否有Servlet1的证明:"+request.getAttribute("key1"));//部门2处理完自己的服务,System.out.println("Servlet处理自己的业务");}}

JavaWeb中请求转发和请求重定向的区别有哪些

注意

1.这时候如果我们将Servlet2放在WEB_INF下,那么我们就无法直接访问servlet2了;

2.但是我们可以通过请求转发来实现访问servlet2;

思考:登录功能和这种请求转发方法类似,我们无法跳过登录界面直接访问系统,所有我们可以用这种请求转发的方法来实现;

什么是请求重定向?

请求重定向:是指客户端发送请求,然后服务器告诉客户端,我给你一个地址,你去新的地址访问(之前的地址可能已经被废弃,或者之前的地址[Servlet]无法满足需求);

JavaWeb中请求转发和请求重定向的区别有哪些

第一种方案

//设置响应状态码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.此时浏览器记录的最后一次请求就是查询数据库中记录的请求了,这时我们刷新页面,也只是查询数据,不再是对数据库的增删改了;

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:JavaWeb中请求转发和请求重定向的区别有哪些的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Python怎么对文件进行重命名下一篇:

9 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18