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

来源:互联网 发布:mysql创建外键 编辑:程序博客网 时间:2024/06/06 04:56

包含四个文件(放在同一目录$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时的参数(地址)为准。

基于以上做一个简单的分析或者说推测:
1、forward是你所请求的URL所在服务器,把你的请求封装成流传给forward到的目标页面(其中含有以及基本信息以及参数等),而redirect相当于你首先向你所请求的URL申请,然后此URL给你一个新的URL,你再向此新URL再来一次新的请求,所以浏览器地址栏会变,而且接受不到原先传的参数(index.jsp中传的) 

 

 

 

 

原创粉丝点击