JSP中Forward与Redirect的区别(用例子说明)

包含四个文件(放在同一目录$TOMCAT_HOME/webapps/forwardRedirectTest,其下应该放上简单的WEB- INF目录,这里不说了,我在Tomcat5.5.23下没放WEB-INF目录也行,^_^):index.jsp(主页,主要包含两个链接:一个指向执行forward的页面而且通过问号的形式传递参数,另一个指向执行redirect的页面而且通过问号的形式传递参数;另外还包括一个form用于测试forward与redirect传值的情况),requestForForward.jsp(执行forward的页面,并且接受问号以及form传过来的参数),requestForRedirect.jsp(执行redirect的页面,并且接受问号以及form传过来的参数), redirectOrForward.jsp(forward或者redirect到此页面,主要用来接受从index.jsp中以问号以及form传过来的参数,以说明forward以及redirect的区别)。
(由于使用csdn blog自带的代码粘贴工具会朝里加入一些"..."字符,虽然利于查看,但是不利于把代码copy出来运行,而亲自运行代码对程序员来说是很重要的,故没有使用csdn blog自带的代码粘贴工具来插入代码,而是用着用直白的方式):
一、四个文件源代码
index.jsp
(主页,主要包含两个链接:一个指向执行forward的页面而且通过问号的形式传递参数,另一个指向执行redirect的页面而且通过问号的形式传递参数;另外还包括一个form用于测试forward与redirect传值的情况)
<html>
<head>
    <title>index.jsp</title>
    <SCRIPT LANGUAGE="JavaScript">
            <!--
            function submit1(url)
            {
                document.form1.action=url;
                document.form1.submit()
            }     
            // -->
        </SCRIPT>
</head>
<body>
    <form name="form1" method="POST" action="">
         <INPUT type="hidden" name="formPara" value="formPara">
    </form>
index.jsp
<br/>
<a href="#" onClick="submit1('requestForForward.jsp?redirectOrForward=requestForForward')">requestForForward.jsp</a>
<br/>
<a href="#" onClick="submit1('requestForRedirect.jsp?redirectOrForward=requestForRedirect')">requestForRedirect.jsp</a>
</body>
</html>
requestForForward.jsp
(执行forward的页面,并且接受问号以及form传过来的参数。实际运行表明:执行完第一行代码后,后面的就不执行了,其实就第一行游泳)
<jsp:forward page="redirectOrForward.jsp"/>

<%out.println("requestForForward.jsp<br/>");
String str=request.getParameter("redirectOrForward");
out.println(str+"<br/>");
String str1=request.getParameter("formPara");
out.println(str1+"<br/>");
%>
requestForRedirect.jsp
(执行fredirect的页面,并且接受问号以及form传过来的参数。实际运行表明:执行完第一行代码后,后面的就不执行了,其实就第一行游泳)
<%
response.sendRedirect("redirectOrForward.jsp");
%>

<%out.println("requestForRedirect.jsp<br/>");
String str=request.getParameter("redirectOrForward");
out.println(str+"<br/>");
String str1=request.getParameter("formPara");
out.println(str1+"<br/>");
%>
redirectOrForward.jsp
(forward或者redirect到此页面,主要用来接受从index.jsp中以问号以及form传过来的参数,以说明forward以及redirect的区别)
<%out.println("redirectOrForward.jsp<br/>");
String str=request.getParameter("redirectOrForward");
out.println(str+"<br/>");
String str1=request.getParameter("formPara");
out.println(str1+"<br/>");
%>
二、forward以及redirect的执行过程以及结果
forward的执行过程
1、运行包含这几个jsp的工程,比如URL为:http://davidcui:8080/forwardRedirectTest/index.jsp
2、点击主页上requestForForward.jsp 链接(链接URL为:http://davidcui:8080/forwardRedirectTest/requestForForward.jsp?redirectOrForward=requestForForward)
3、查看结果,结果为(此时地址栏中URL为:http://davidcui:8080/forwardRedirectTest/requestForForward.jsp?redirectOrForward=requestForForward):
redirectOrForward.jsp
requestForForward
formPara 
redirect的执行过程
1、运行包含这几个jsp的工程,比如URL为:http://davidcui:8080/forwardRedirectTest/index.jsp
2、点击主页上requestForRedirect.jsp  链接(链接URL为:http://davidcui:8080/forwardRedirectTest/requestForRedirect.jsp?redirectOrForward=requestForRedirect)
3、查看结果,结果为(此时地址栏中URL为:http://davidcui:8080/forwardRedirectTest/redirectOrForward.jsp):
redirectOrForward.jsp
null
null
 
三、分析forward以及redirect的区别
从第二部分的“forward以及redirect的执行过程以及结果”可以看出forward以及redirect至少有两个区别:
其一、forward(requestForForward)可以把index.jsp中的问号以及表单中的参数传到forward的目标页面(redirectOrForward.jsp),但是redirect不行;
其二、forward的时候,请求的地址(点击 requestForForward.jsp 中链接URL)就是最终显示在浏览器地址栏中的URL,而redirect时,请求的地址与最终显示在浏览器地址栏中的URL一般不一样,而且后者以redirect时的参数(地址)为准。
 
总结:
原理:
forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,客户机并不知道;
redirect则是服务器收到请求后发送一个状态头给客户,客户将再请求一次,这里多了两次网络通信的
来往。
区别:
1.
forward 会将 attributs/parameters等等信息带往目标的jsp页面;
redirect 由于是送到 client 端后再一次 request , 所以第2次request将丢失第一次的
attributs/parameters等,资料不被保留.
2.
在地址栏上是否显示的区别.

你可能感兴趣的:(职场,休闲)