idea创建简单web项目分析Servlet的请求转发与重定向的区别

注:如需转载,请附上原文链接,如有建议或意见,欢迎批评指正!

需求说明:

// index.jsp页面
 1 <%
 2   String basePath = request.getScheme()+":"+"//"+request.getServerName()+":"+request.getServerPort()+"/"
 3           +request.getServletContext().getContextPath()+"/";
 4 %>
 5 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 6 <html>
 7   <head>
 8     <title>ServletDemo加法运算</title>
 9   </head>
10   <body>
11     <%--action: 表示访问的servlet路径--%>
12     <%out.print("basePath意味着:" + basePath);%>
13     <form action="<%=basePath%>ServletDemo1" method="post">
14       a: <input type="text" name="a"><br>
15       b: <input type="text" name="b"><br>
16       <input type="submit" value="计算"/><br>
17     </form>
18   </body>
19 </html>
// ServletDemo1.java
 1 import javax.servlet.ServletContext;
 2 import javax.servlet.ServletException;
 3 import javax.servlet.annotation.WebServlet;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import java.io.IOException;
 8
 9 @WebServlet("/ServletDemo1")
10 public class ServletDemo1 extends HttpServlet {
11     @Override
12     public void init() throws ServletException {
13         System.out.println("init()方法");
14     }
15
16     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
17         System.out.println("doPost()方法");
18         doGet(request, response);
19     }
20
21     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
22         String a = request.getParameter("a");
23         String b = request.getParameter("b");
24         int sum = Integer.valueOf(a) + Integer.valueOf(b);
25         request.setAttribute("sum", sum);
26         // 方式一:PrintWriter对象写入
27 //        response.getWriter().print(sum);
28         // 方式二:请求转发
29 //        request.getRequestDispatcher("sum.jsp").forward(request, response);
30         // 方式三:重定向
31         ServletContext sc = request.getServletContext();
32         sc.setAttribute("sum2", sum);
33         response.sendRedirect("sum2.jsp");
34         System.out.println("doGet()方法");
35     }
36
37     @Override
38     public void destroy() {
39         System.out.println("destroy()方法");
40     }
41 }

// sum.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>请求跳转求和</title></head><body>a + b = <%=request.getAttribute("sum")%></body></html>

// sum2.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>重定向跳转求和</title></head><body>a + b = <%=application.getAttribute("sum2")%></body></html>

index.jsp页面效果图展示:

1. 方式一:PrintWriter对象写入效果图:

2. 方式二:请求转发效果图:

3. 重定向效果图:

原文地址:https://www.cnblogs.com/chris0710/p/8970543.html

时间: 2024-08-27 17:36:38

idea创建简单web项目分析Servlet的请求转发与重定向的区别的相关文章

Servlet到Servlet的请求转发与重定向的区别

Servlet跳转到另一个Servlet中: request.getRequestDispatcher().forward();代表默认的是post方法,即在被跳转的Servlet的doPost()方法中接收或写代码 response.sendRedirector()代表默认的是get方法.//因为重定向,又重新从页面发送请求到服务端

Servlet技术-请求转发,重定向和包含的关系

Web组件之间的关系包含3种,请求转发,URL重定向和包含 1.请求转发 请求转发允许把请求转发给同一应用程序的其他web组件,这种技术通常用于Web应用控制层的Servlet流程控制器,可检查HTTP请求的数据,并将请求转发到合适的目标组件,目标组件执行具体的请求处理操作并生成响应结果. 实例: 如果当前的Servlet组件要把请求转发给一个jsp组件,如hello.jsp,可在Servlet中的service方法中执行一下代码: RequestDispatcher rd=request.ge

Servlet 及 请求转发与重定向

Servlet: Java编写的服务器端程序,处理客户端的http请求并将其结果发送到客户端. Servlet容器Tomcat: 最熟悉的是容器就是tomcat.在tomcat中,server-包含-service-包含-connector+container+other 最核心的组件: Connector:接收TCP请求,创建response和request对象,分配线程给container处理 Container:servlet容器,责任链模式的子容器:engine--host--Conte

请求转发和重定向的区别以及他们的实现方式?

1.请求转发是什么? 答:请求转发是RequestDispatcher.forword方法:作用是:在服务器端内部将请求转发给另一个资源,浏览器只知道发出请求并得到响应结果,但不知道在服务器程序内部发生了转发行为. 举例:别名为“浏览器”的人写信找张三100块,张三只有50块,于是张三找李四借了50块,然后将钱转给“浏览器”.可知,“浏览器”只发出一封信和收到一次回复,他只知道钱是张三借给他的,并不知道有一部分是李四的. 2.重定向是什么? 答:重定向是HttpServletResponse.s

SERVLET API中转发与重定向的区别?

SERVLET API中转发与重定向的区别? 1.转发(forward方法) 转发仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址. 转发是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址. 2.重定向(sendRedirect方法) 重定向是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接.这样,从浏览器的地址栏中可以看到跳转后的链

JAVA WEB:请求转发和重定向的区别

sevlet response有一个重定向的方法我们先介绍一下. 1.HttpServletResponse对象的sendRedirect(String local)方法称作重定向.如果location地址前面加上 "/",则表示相对于Servlet容器的根来请求,即http://localhost:8080,如果location地址钱没有加上“/”,则表示相对于当前请求的url来寻找地址. 2.RequestDispatcher的forward(request, response)称

servlet请求转发与重定向的区别

1.请求转发(forward) request.getRequestDispatcher("parameter").forward(request,response);跳转到指定的服务器资源,地址栏URL不变,请求响应不变. 2请求包含(include)request.getRequestDispatcher("parameter").include(request,response);跳转到指定的服务器资源且包含之前的资源,地址栏URL不变,请求响应不变. 注* 

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

重定向和转发有一个重要的不同:当使用转发时,服务器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求.因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变.重定向的速度比转发慢,因为浏览器还得发出一个新的请求.同时,由于重定向方式产生了一个新的请求,所以经过一次重 定向后,request内的对象将无法使用. 怎么选择是重定向还是转发呢

servlet请求转发与重定向的区别------用生活实例来形象说明两者的区别

1,请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保持,地址栏的URL地址会改变. 2,请求转发:服务器行为,request.getRequsetDispatcher().forward(requset,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变.(服务器内部转发,所有客户端看不到地址栏的改变) 下面举个生活中的实例来说明: 请求重定向:就好比我们找一个A广告公司给设计名片,A明确告诉我