﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-jimingminlovefly-文章分类-jsp/servlet</title><link>http://www.blogjava.net/jimingminlovefly/category/51234.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 05 Feb 2015 23:52:44 GMT</lastBuildDate><pubDate>Thu, 05 Feb 2015 23:52:44 GMT</pubDate><ttl>60</ttl><item><title>Servlet中forward和redirect的区别（转）</title><link>http://www.blogjava.net/jimingminlovefly/articles/422593.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Fri, 30 Jan 2015 09:42:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/422593.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/422593.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/422593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/422593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/422593.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">forward方式：request.getRequestDispatcher("/somePage.jsp").forwardrequest, response);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />redirect方式：response.sendRedirect("/somePage.jsp");<br />forward是服务器内部重定向，程序收到请求后重新定向到另一个程序，客户机并不知道；redirect则是服务器收到请求后发送一个状态头给客户，客户将再请求一次，这里多了两次网络通信的来往。当然forward也有缺点，就是forward的页面的路径如果是相对路径就会有些问题了。&nbsp;&nbsp;&nbsp;&nbsp;forward 会将 request state , bean 等等信息带往下一个 jsp<br />redirect 是送到 client 端后再一次 request , 所以资料不被保留.<br />使用 forward 你就可以用 getAttribute() 来取的前一个 jsp 所放入的 bean 等等资料<br /><br />在网上看到一些帖子，总结了一些区别，可以从以下几个方面来看：<br /><br />1.从地址栏显示来说<br /><br />forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.<br /><br />redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request，同时也接受两次response。<br /><br />2.从数据共享来说<br /><br />forward:转发页面和转发到的页面可以共享request里面的数据.<br />redirect:不能共享数据.<br /><br />redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源.<br /><br />forward,方法只能在同一个Web应用程序内的资源之间转发请求.forward 是服务器内部的一种操作.<br />redirect 是服务器通知客户端,让客户端重新发起请求.<br /><br />所以,你可以说 redirect 是一种间接的请求, 但是你不能说"一个请求是属于forward还是redirect "<br /><br /><br />3.从运用地方来说<br /><br />forward:一般用于用户登陆的时候,根据角色转发到相应的模块.<br /><br />redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.<br /><br />4.从效率来说<br />forward:高.<br />redirect:低.<br /><br />5.jsp 语法<br /><br />&lt;jsp:forward page={"relativeurl" | "&lt;%= expression %&gt;"} /&gt;<br /><br />或者这样写：<br /><br />&lt;jsp:forward page={"relativeurl" | "&lt;%= expression %&gt;"} &gt;<br /><br /><br />&lt;jsp:param name="parametername" value="{parametervalue | &lt;%= expression %&gt;}" /&gt;+<br /><br /><br />&lt;/jsp:forward&gt;<br /><br />6.例子<br /><br />&lt;jsp:forward page="/servlet/login.jsp" /&gt;<br /><br />&lt;jsp:forward page="/servlet/login.jsp"&gt;<br /><br />&lt;jsp:param name="username" value="jsmith" /&gt;<br /><br />&lt;/jsp:forward&gt;<br /><br />描述<br /><br />&lt;jsp:forward&gt;标签从一个jsp文件向另一个文件传递一个包含用户请求的request对象.&lt;jsp:forward&gt;标签以下的代码，将不能执行.<br /><br /><br />你能够向目标文件传送参数和值，在这个例子中我们传递的参数名为username,值为scott,如果你使用了&lt;jsp:param&gt;标签的话，目标文件必须是一个动态的文件，能够处理参数.<br /><br /><br />如果你使用了非缓冲输出的话，那么使用&lt;jsp:forward&gt;时就要小心。<br />如果在你使用&lt;jsp:forward&gt;之前，jsp文件已经有了数据，那么文件执行就会出错.<br /><br />属性<br /><br />page="{relativeurl | &lt;%= expression %&gt;}"<br />这里是一个表达式或是一个字符串用于说明你将要定向的文件或url.这个文件可以是jsp,程序段，或者其它能够处理request对象的文件(如asp,cgi,php).<br /><br />&lt;jsp:param name="parametername" value="{parametervalue | &lt;%= expression %&gt;}" /&gt;+<br />向一个动态文件发送一个或多个参数，这个文件一定是动态文件.<br /><br />如果你想传递多个参数，你可以在一个jsp文件中使用多个&lt;jsp:param&gt;。name指定参数名，value指定参数值.<br /><br /><br /><br />&lt;jsp:forward&gt;例子<br /><br />&lt;%@ page contentType="text/html;charset=gb2312" %&gt;<br /><br />&lt;html&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;test&lt;/title&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;jsp:forward page="forwardTo.jsp"&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;jsp:param name="userName" value="riso"/&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/jsp:forward&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br /><br />&lt;/html&gt;<br /><br />forwardTo.jsp<br /><br />&lt;%@ page contentType="text/html;charset=gb2312" %&gt;<br /><br />&lt;!--forwardTo.jsp--&gt;<br /><br />&lt;%<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String useName=request.getParameter("userName");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String outStr= "谢谢光临！";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outStr+=useName;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(outStr);<br /><br />%&gt;<br /><br />redirect的例子：<br /><br />譬如：client 通过XXX/index.jsp?name=gauss&amp;pwd=123访问index.jsp,而index.jsp中有&lt; jsp:forward page="login.jsp"/&gt;,则在login.jsp中可以通过request.getParameter()得到name和pwd，而&lt;%response.sendRedirect("login.jsp");%&gt;得不到。</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">--------------------------------------------------------------------------------------------------</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">在Java Web开发中，经常会用到跳转页面的方法，一般有下面两种方法。<br />Java代码<br />HttpServletResponse response = new HttpServletResponse();&nbsp;<br />response.sendRedirect(location);<br />RequestDispatcher rd = new RequestDispatcher();&nbsp;<br />rd.forward(request, response);<br />跳转方式<br />http://localhost:8080/Test应用<br />运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何URL。<br />表单form的action= &#8220;/uu &#8220;;sendRedirect( &#8220;/uu &#8220;);表示相对于服务器根路径。如http://localhost:8080/Test应用（则提交至http://localhost:8080/uu）;<br />Forward代码中的 &#8220;/uu &#8220;则代表相对与WEB应用的路径。如http://localhost:8080/Test应用（则提交至http://localhost:8080/Test/uu）;<br />（运用RequestDispatcher接口的Forward）方法<br />forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,<br />同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute( &#8220;name &#8220;,name)来传至下一个页面.<br />重定向后浏览器地址栏URL不变.<br />只有在客户端没有输出时才可以调用forward方法。如果当前页面的缓冲区（buffer）不是空的，那么你在调用forward方法前必须先清空缓冲区。<br />&#8220;/ &#8220;代表相对与web应用路径<br />RequestDispatcher&nbsp;&nbsp;&nbsp;rd&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;request.getRequestDispatcher( &#8220;/ooo &#8220;);<br />rd.forward(request,&nbsp;&nbsp;&nbsp;response);提交至http://localhost:8080/Test/ooo<br />RequestDispatcher&nbsp;&nbsp;&nbsp;rd&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;getServletContext().getRequestDispatcher( &#8220;/ooo &#8220;);<br />rd.forward(request,&nbsp;&nbsp;&nbsp;response);提交至http://localhost:8080/Test/ooo<br />RequestDispatcher&nbsp;&nbsp;&nbsp;rd&nbsp;&nbsp;&nbsp;=getServletContext().getNamedDispatcher( &#8220;TestServlet &#8220;);（TestServlet为一个 &lt;servlet-name&gt; ）<br />rd.forward(request,&nbsp;&nbsp;&nbsp;response);提交至名为TestServlet的servlet<br />如果在 &lt;jsp:forward&gt; 之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。<br />另外要注意：它不能改变浏览器地址，刷新的话会导致重复提交<br />从http://localhost:8080/Test/gw/page.jsp中转发<br />&lt;jsp:forward&nbsp;&nbsp;&nbsp;page= &#8220;OtherPage.jsp &#8220;/&gt; 在JSP页面被解析后转换成pageContext.forward( &#8220;OtherPage.jsp [...]</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">--------------------------------------------------------------------------------------------------</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">清空当前缓存：</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">在之前撰写JSP的例子中，实用了out这个对象，这个对象您不用事先宣告，就可以在JSP网页中使用，这是JSP所提供的隐含对象</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">(Implicit Object)，在转译为Servlet之后，out会转换为对应于javax.servlet.jsp.JspWriter型态的对象。</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">JspWriter直接继承自java.io.Writer，您可以使用println()、print()方法将指定的数据以字符的方式传送至客户端，println()会</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">在送出数据之后进行换行，而print()则否，注意换行指的是在HTML原始码中设定换行字符，而不是输出&lt;br&gt;标签使得在网页中可以</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">换行。</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">out(JspWriter)具有缓冲区功能，HTTP的特性是为了要取得一份资源，就进行一份协议沟通，如果资源数目很多(例如一份HTML文件</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">还包括了许多的小图片)，而每份资源的容量实际上很小，那么为了要取得完整的资源，将会花费很多通讯在协议往来上，假设如果</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">out(JspWriter)不具有缓冲功能，则每一次out.println()，就会直接将数据送出至客户端，那么单要完成一个完整网页的传送，就</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">会花费不少的网络资源，每一个JSP网页预设上都会具有缓冲，您可以使用page指令元素的autoFlush属性来设定是否使用缓冲区功能</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">。</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">在Tomcat5上，预设为每一个JSP网页备有8192字节的缓冲区(您可以使用page指令元素的buffer属性来自缓冲区的大小)，在缓冲区还</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">没有满之前，数据不会真正被送出至客户端，在这之前，您还有机会重设送出的数据，如果缓冲区满了，数据将会被清出并送至客户</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">端，可以使用下面这个程序来示范：</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">buffer.jsp<br />&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;" style="color: #336699; text-decoration: none;">%@page</a>&nbsp;contentType="text/html;charset=Big5"%&gt;<br />&lt;%<br />out.println("预设缓冲区大小：" + out.getBufferSize() + "&lt;br&gt;");<br />out.flush();<br />//下面的文字不会出现在客户端<br />out.println("您看的到这段文字吗?");<br />out.clearBuffer();<br />out.println("这段您可以看到!");<br />%&gt;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">您可以使用flush()直接清出缓冲区的内容，而clearBuffer()会将缓冲区的内容清除，所以第二段文字不会出现在客户端的网页上，</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">而最后一段会整个JSP网页执行完整后自动送出至客户端，执行结果如下：</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">预设缓冲区大小：8192</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">这段您可以看到!</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">您可以使用page指令元素的autoFlush来设定JSP页面是否使用缓冲区自动清出功能，out(JspWriter)以一种方式与</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">HttpServletResponse的PrintWriter建立关系，两者之间的行为关系取决于是否使用缓冲区自动清出，如果使用缓冲区自动清出，则</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">在缓冲区满之前，或是使用flush()之前不会建立PrintWriter对象来对客户端进行输出，如果不使用缓冲区自动清出，则写入out</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">(JspWriter)对象的数据会直接写入PrintWriter对象，然后在指定flush()之后输出至客户端。</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">如果您将autoFlush设定为false，则您必须明确的使用flush()来输出数据，否则缓冲区满了的话，就会发生IOException例外，使用</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">缓冲区有其好处，但由于缓冲区在满之前，数据并不会真正送出客户端，所以会有响应延迟的问题，如果您要实时性将结果响应至客</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">户端，则可以关闭缓冲区。</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">下面这个程序测试缓冲区关闭之后，如果缓冲区满了，会有什么结果：</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">buffer.jsp<br />&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;" style="color: #336699; text-decoration: none;">%@page</a>&nbsp;contentType="text/html;charset=Big5" %&gt;<br />&lt;%<br />for(int i=0; i&lt;2000; i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;out.println("test");<br />&nbsp;&nbsp;&nbsp;&nbsp;//out.flush();<br />}<br />%&gt;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">如果没有移开out.flush()的批注符号，则会响应一下的错误讯息：<br />HTTP Status 500 -<br />type Exception report<br />message<br />description The server encountered an internal error() that prevented it from fulfilling this request.<br />exception<br />java.io.IOException: Error: JSP Buffer overflow<br />......</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"></p><h2><a name="t1" style="color: rgb(51, 102, 153);"></a>转自<a href="http://blog.sina.com.cn/s/blog_4f925fc30100mt2e.html" style="color: #336699; text-decoration: none;">http://blog.sina.com.cn/s/blog_4f925fc30100mt2e.html</a></h2><img src ="http://www.blogjava.net/jimingminlovefly/aggbug/422593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2015-01-30 17:42 <a href="http://www.blogjava.net/jimingminlovefly/articles/422593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Redirect和Forward、Include比较 </title><link>http://www.blogjava.net/jimingminlovefly/articles/387672.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Thu, 13 Sep 2012 11:13:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/387672.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/387672.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/387672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/387672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/387672.html</trackback:ping><description><![CDATA[<div class="articalContent  " id="sina_keyword_ad_area2">
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">A.1</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">Redirect</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US" xml:lang="EN-US">Forward</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的区别</span></strong></p>
<p><span lang="EN-US" xml:lang="EN-US">web</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">开发开发中进行页面跳转的方法有两个，</span><span lang="EN-US" xml:lang="EN-US">forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US" xml:lang="EN-US">redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">。</span></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">Forward</span></strong></p>
<p style="text-indent: 21pt"><span lang="EN-US" xml:lang="EN-US">Forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">简单来说就是在服务器端完成叶面跳转，服务端从</span><span lang="EN-US" xml:lang="EN-US">A</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">页</span><span lang="EN-US" xml:lang="EN-US">forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">到</span><span lang="EN-US" xml:lang="EN-US">B</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">页，对于客户端来说一直都在访问</span><span lang="EN-US" xml:lang="EN-US">A</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">页，不知道有个</span><span lang="EN-US" xml:lang="EN-US">B</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">页存在（客户端地址栏看不到</span><span lang="EN-US" xml:lang="EN-US">B</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">页地址，它一直显示</span><span lang="EN-US" xml:lang="EN-US">A</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">页的地址）。</span></p>
<p style="text-indent: 21pt"><span lang="EN-US" xml:lang="EN-US">Forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">是服务器请求资源，服务器直接访问目标地址的</span><span lang="EN-US" xml:lang="EN-US">URL</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，把那个</span><span lang="EN-US" xml:lang="EN-US">URL</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的响应内容读取过来，然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的，</span><span style="color: red; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">所以它的地址栏还是原来的地址。</span></p>
<p style="text-indent: 21pt"><span lang="EN-US" xml:lang="EN-US">Forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">是在</span><span lang="EN-US" xml:lang="EN-US">web</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">应用程序之内进行的，可以访问</span><span lang="EN-US" xml:lang="EN-US">web</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">应用程序所设定的内部目录，像是</span><span lang="EN-US" xml:lang="EN-US">WEB-INF</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">目录，只能在</span><span lang="EN-US" xml:lang="EN-US">Web</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">应用程序中进行，不能指定至其它的</span><span lang="EN-US" xml:lang="EN-US">Web</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">应用程序的地址。</span></p>
<p style="text-indent: 21pt"><span lang="EN-US" style="color: red" xml:lang="EN-US">Forward</span><span style="color: red; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">跳转的页面中</span><span lang="EN-US" style="color: red" xml:lang="EN-US">,request</span><span style="color: red; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">作用域的变量都能生效，因为无论</span><span lang="EN-US" style="color: red" xml:lang="EN-US">forward</span><span style="color: red; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">多少次，都是同一个</span><span lang="EN-US" style="color: red" xml:lang="EN-US">request</span><span style="color: red; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">。</span></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">Redirect</span></strong></p>
<p style="text-indent: 21pt"><span lang="EN-US" xml:lang="EN-US">Redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">就容易理解的多了，从</span><span lang="EN-US" xml:lang="EN-US">A</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">页</span><span lang="EN-US" xml:lang="EN-US">forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">到</span><span lang="EN-US" xml:lang="EN-US">B</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">页，服务端告诉客户端，你要从</span><span lang="EN-US" xml:lang="EN-US">A</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">跳到</span><span lang="EN-US" xml:lang="EN-US">B</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，由客户端发出指挥，所以客户端地址栏看到从</span><span lang="EN-US" xml:lang="EN-US">A</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">页变成</span><span lang="EN-US" xml:lang="EN-US">B</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">页了。</span></p>
<p style="text-indent: 21pt"><span lang="EN-US" xml:lang="EN-US">Redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">是服务端根据逻辑，发送一个状态码，告诉浏览器重新去请求那个地址。所以地址栏显示的是新的</span><span lang="EN-US" xml:lang="EN-US">URL</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">。</span></p>
<p style="text-indent: 21pt"><span lang="EN-US" xml:lang="EN-US">Redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的请求由浏览器发出，所以不能访问</span><span lang="EN-US" xml:lang="EN-US">Web</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">应用程序中的隐藏目录，像是</span><span lang="EN-US" xml:lang="EN-US">WEB-INF</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，重新是由浏览器重新要求一个网页，可以指定至其他的</span><span lang="EN-US" xml:lang="EN-US">Web</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">应用程序地址。</span></p>
<p style="text-indent: 21pt"><span lang="EN-US" xml:lang="EN-US">Reirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">是由客户端指挥的，所以</span><span lang="EN-US" xml:lang="EN-US">redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">以后就已经是</span><span style="color: red; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">第二次</span><span lang="EN-US" xml:lang="EN-US">request</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">了。</span></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">&nbsp;<wbr></span></strong></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">A.2</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" style="color: red" xml:lang="EN-US">forward</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: red; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">方法和</span><span lang="EN-US" style="color: red" xml:lang="EN-US">include</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: red; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的区别</span></strong></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">Forward</span></strong></p>
<p style="margin-left: 21pt"><span lang="EN-US" xml:lang="EN-US">forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">方法调用后在响应中的没有提交的内容被自动消除。将请求转发给其他的</span><span lang="EN-US" xml:lang="EN-US">Servlet</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后，由被调用的</span><span lang="EN-US" xml:lang="EN-US">Servlet</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">负责对请求做出响应，而原先</span><span lang="EN-US" xml:lang="EN-US">Servlet</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的执行则终止</span></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">Include</span></strong></p>
<p style="margin-left: 21pt"><span lang="EN-US" xml:lang="EN-US">include</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">方法使原先的</span><span lang="EN-US" xml:lang="EN-US">Servlet</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和转发到的</span><span lang="EN-US" xml:lang="EN-US">Servlet</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">都可以输出响应信息，即原先的</span><span lang="EN-US" xml:lang="EN-US">Servlet</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">还可以继续输出响应信息。</span></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">&nbsp;<wbr></span></strong></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">A.3</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、三者区别</span> </strong></p>
<p><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">三个都可以对用户的</span><span lang="EN-US" xml:lang="EN-US">request</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">进行转发，但是还是有许多的不同，差别最主要集中在如下几个方面：</span></p>
<p style="margin-left: 10.5pt; mso-para-margin-left: 1.0gd"><span lang="EN-US" xml:lang="EN-US">1</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">与</span><span lang="EN-US" xml:lang="EN-US">include</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">共享</span><span lang="EN-US" xml:lang="EN-US">Request</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">范围内的对象，而</span><span lang="EN-US" xml:lang="EN-US">redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">则不行，即：如果一个</span><span lang="EN-US" xml:lang="EN-US">javabean</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">被声明为</span><span lang="EN-US" xml:lang="EN-US">request</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">范围的话，则被</span><span lang="EN-US" xml:lang="EN-US">forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">到的资源也可以访问这个</span><span lang="EN-US" xml:lang="EN-US">javabean</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，而</span><span lang="EN-US" xml:lang="EN-US">redriect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">则不行。</span></p>
<p style="margin-left: 10.5pt; mso-para-margin-left: 1.0gd"><span lang="EN-US" xml:lang="EN-US">2</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">与</span><span lang="EN-US" xml:lang="EN-US">include</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">基本上都是转发到</span><span lang="EN-US" xml:lang="EN-US">context</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">内部的资源，而</span><span lang="EN-US" xml:lang="EN-US">redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">可以重定向到外部的资源</span><span lang="EN-US" xml:lang="EN-US">,</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">如：</span><span lang="EN-US" xml:lang="EN-US">req.sendRedriect(http://www.mocuai.com);</span></p>
<p style="margin-left: 10.5pt; mso-para-margin-left: 1.0gd"><span lang="EN-US" xml:lang="EN-US">3</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">RequestDispatcher.forward()</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">仅是容器中控制权的转向，在客户端浏览器地址栏中不会显示出转向后的地址，他是不会改变</span><span lang="EN-US" xml:lang="EN-US">Request</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的值，如果你需要在下一个页面中能从中获取新的信息的话，你可以</span><span lang="EN-US" xml:lang="EN-US">Request.setAttribute()</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">来放置一些标志，这样从下一个页面中获取；</span><span lang="EN-US" xml:lang="EN-US">HttpServletResponse.sendRedirect()</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">方法则是完全的跳转，浏览器将会得到跳转的地址，并重新发送请求链接。这样，从浏览器的地址栏中可以看到跳转后的链接地址。所以，前者更加高效，在前者可以满足需要时，尽量使用</span><span lang="EN-US" xml:lang="EN-US">RequestDispatcher.forward()</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">方法，并且，这样也有助于隐藏实际的链接。</span></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">&nbsp;<wbr></span></strong></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">B</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">Redirect</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US" xml:lang="EN-US">Forward</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">Include</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的应用</span></strong></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">B.1</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、在</span><span lang="EN-US" xml:lang="EN-US">JAVA</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中应用</span></strong></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">B.1.1</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">Forward</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US" xml:lang="EN-US">Include</span></strong></p>
<p><span lang="EN-US" xml:lang="EN-US">forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">include</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">由</span><span lang="EN-US" xml:lang="EN-US">javax.servlet.RequestDispatcher</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">来封装的，其中声明如下：</span></p>
<p style="margin-left: 10.5pt; mso-para-margin-left: 1.0gd"><span lang="EN-US" xml:lang="EN-US">void forward(ServletRequest req,ServletResponse res)</span></p>
<p style="margin-left: 10.5pt; mso-para-margin-left: 1.0gd"><span lang="EN-US" xml:lang="EN-US">void include(ServeltRequest req,ServletResponse res)</span></p>
<p><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">可以通过两种方式得到</span><span lang="EN-US" xml:lang="EN-US">RequestDispatcher:</span></p>
<p style="margin-left: 10.5pt; mso-para-margin-left: 1.0gd"><span lang="EN-US" xml:lang="EN-US">ServletContext.getRequestDispatcher(String path);</span></p>
<p style="margin-left: 10.5pt; mso-para-margin-left: 1.0gd"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">其中这里的</span><span lang="EN-US" xml:lang="EN-US">path</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">必须开始为</span><span lang="EN-US" xml:lang="EN-US">"/"</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，即这里的</span><span lang="EN-US" xml:lang="EN-US">path</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">必须相对于</span><span lang="EN-US" xml:lang="EN-US">context</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的</span><span lang="EN-US" xml:lang="EN-US">root.</span></p>
<p style="margin-left: 10.5pt; mso-para-margin-left: 1.0gd"><span lang="EN-US" xml:lang="EN-US">ServeltRequest.getRequestDispatcher(String path)</span></p>
<p style="margin-left: 10.5pt; mso-para-margin-left: 1.0gd"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">这里的</span><span lang="EN-US" xml:lang="EN-US">path</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">可以为相对路径</span><span lang="EN-US" xml:lang="EN-US">,</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">如果</span><span lang="EN-US" xml:lang="EN-US">path</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">开始为</span><span lang="EN-US" xml:lang="EN-US">"/",</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">则也认为是从</span><span lang="EN-US" xml:lang="EN-US">context</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的</span><span lang="EN-US" xml:lang="EN-US">root</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">开始的。</span></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">B.1.2</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">Redirect</span></strong></p>
<p><span lang="EN-US" xml:lang="EN-US">Redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">由</span><span lang="EN-US" xml:lang="EN-US">HttpServletResponse.sendRedirect(String location)</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">来支持</span></p>
<p><span lang="EN-US" xml:lang="EN-US">&nbsp;<wbr></span></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">B.2</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、在</span><span lang="EN-US" xml:lang="EN-US">Spring</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中应用</span></strong></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">B.2.1</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">Forward</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US" xml:lang="EN-US">Include</span></strong></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">在</span><span lang="EN-US" xml:lang="EN-US">Spring mvc</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">框架中一个控制器通常返回一个视图名，然后视图解析器把它解析到某种视图技术上实现。对于使用</span><span lang="EN-US" xml:lang="EN-US">JSP/Servlet</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">视图技术时，其实就是使用</span><span lang="EN-US" xml:lang="EN-US">RequestDispatcher.forward()</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">或</span><span lang="EN-US" xml:lang="EN-US">RequestDispatcher.include()</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">方法。比如当客户在浏览器中输入一个</span><span lang="EN-US" xml:lang="EN-US">URL</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">（如：</span><span lang="EN-US" xml:lang="EN-US">http://xxx/1.html</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">），视图解析器把它解析到一个</span><span lang="EN-US" xml:lang="EN-US">jsp</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">资源上，显示给客户的是</span><span lang="EN-US" xml:lang="EN-US">jsp</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">资源的数据，而客户浏览器中的地址没有变化。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">比如有些时候我们处理表单提交时，若使用</span><span lang="EN-US" xml:lang="EN-US">Spring</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">内部</span><span lang="EN-US" xml:lang="EN-US">forward</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">机制，一个控制器将接收请求并进行处理，处理完成后它可能返回一个视图名，这时这个视图就会有一个问题就是返回的视图会得到之前</span><span lang="EN-US" xml:lang="EN-US">POST</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的数据，这容易造成混淆。还有一个问题是若用户刷新页面会导致数据重复提交。若使用</span><span lang="EN-US" xml:lang="EN-US">Redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">机制，返回的视图是</span><span lang="EN-US" xml:lang="EN-US">GET</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">等到的，是不同的请求，故可以避免多次提交的问题。</span></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">forward:</span></strong> <strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">前缀</span></strong></p>
<p><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">使用</span><span lang="EN-US" xml:lang="EN-US">UrlBasedViewResolver</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的</span><span lang="EN-US" xml:lang="EN-US">redirect:</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">前缀。</span></p>
<p><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" xml:lang="EN-US">B.2.2</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US" xml:lang="EN-US">Redirect</span></strong></p>
<p><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">方法一：</span><span lang="EN-US" xml:lang="EN-US">RedirectView</span></strong></p>
<p style="text-indent: 21pt"><span lang="EN-US" xml:lang="EN-US">Spring</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中</span><span lang="EN-US" xml:lang="EN-US">Redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">实现方法之一是让控制器（</span><span lang="EN-US" xml:lang="EN-US">Controller</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">）创建和返回一个</span><span lang="EN-US" xml:lang="EN-US">RedirectView</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，这种情况下，</span><span lang="EN-US" xml:lang="EN-US">DispatcherServlet</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">不会使用通常的视图解析机制，而是让控制器指定的</span><span lang="EN-US" xml:lang="EN-US">RedirectView</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">视图来处理表单提交后的工作。</span></p>
<p style="text-indent: 21pt"><span lang="EN-US" xml:lang="EN-US">RedirectView</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">会调用</span><span lang="EN-US" xml:lang="EN-US">HttpServletResponse.sendRedirect()</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，其中的</span><span lang="EN-US" xml:lang="EN-US">model</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">值将被转化为</span><span lang="EN-US" xml:lang="EN-US">String</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">传递给</span><span lang="EN-US" xml:lang="EN-US">redirect</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的视图。</span></p>
<p><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">方法二：</span><span lang="EN-US" xml:lang="EN-US">redirect:</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">前缀</span></strong></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">第二种方法是使用</span><span lang="EN-US" xml:lang="EN-US">UrlBasedViewResolver</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的</span><span lang="EN-US" xml:lang="EN-US">redirect:</span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">前缀。</span></p>
<p><span lang="EN-US" xml:lang="EN-US"><span style="mso-tab-count: 1">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span></span> <span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">从设计理念上来讲第二种方法比较合理，它减少了耦合。</span></p></div><img src ="http://www.blogjava.net/jimingminlovefly/aggbug/387672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2012-09-13 19:13 <a href="http://www.blogjava.net/jimingminlovefly/articles/387672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>案例-在jsp页面 实现ArrayList结果集循环成两行两列</title><link>http://www.blogjava.net/jimingminlovefly/articles/372086.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Sat, 17 Mar 2012 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/372086.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/372086.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/372086.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/372086.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/372086.html</trackback:ping><description><![CDATA[&lt;s:iterator value="#request.hkList" id="hkh" status="hkhindex"&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;s:if test="#hkhindex.index%7==0"&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&lt;tr&gt;</span><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;/s:if&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;a href="javascript:addHotel(&lt;s:property value="u.id"/&gt;,&lt;s:property value="#hkh.id"/&gt;)" class="atag"&gt;&lt;s:property value="#hkh.name"/&gt;&lt;/a&gt;&lt;/td&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;s:if test="#hkhindex.index%7==0"&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&lt;/td&gt;</span><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;/s:if&gt;<br />&nbsp;&nbsp;&nbsp;&lt;/s:iterator&gt;&nbsp;&nbsp;&nbsp; &nbsp;  <img src ="http://www.blogjava.net/jimingminlovefly/aggbug/372086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2012-03-17 10:29 <a href="http://www.blogjava.net/jimingminlovefly/articles/372086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>案例-jspSmartUpload上传下载2</title><link>http://www.blogjava.net/jimingminlovefly/articles/369310.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Fri, 03 Feb 2012 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/369310.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/369310.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/369310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/369310.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/369310.html</trackback:ping><description><![CDATA[<div class="posthead"><img height="1" alt="" src="http://www.cnblogs.com/mdxdjh/aggbug/2227360.html?type=1&amp;webview=1" width="1" /><span style="font-size: 24pt">&nbsp;</span><font color="#ff0000" size="7"><span style="font-size: 24pt">注意：在struts2项目中只能用</span><span style="font-size: 24pt; color: #0000ff">自身</span><span style="font-size: 24pt">的上传功能，该jsp上传功能不行</span></font><br /></div>
<div class="postbody">
<div id="cnblogs_post_body"><br />
<div class="cnblogs_code" style="width: 900px"><pre> <span style="color: #0000ff">&lt;</span><span style="color: #800000">form </span><span style="color: #ff0000">name </span><span style="color: #0000ff">="Form1"</span><span style="color: #ff0000"> enctype</span><span style="color: #0000ff">="multipart/form-data"</span><span style="color: #ff0000"> method</span><span style="color: #0000ff">="post"</span><span style="color: #ff0000"> action</span><span style="color: #0000ff">="jspsmart.jsp"</span><span style="color: #0000ff">&gt;</span><br />       <span style="color: #0000ff">&lt;</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span>上传文件1：<span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type </span><span style="color: #0000ff">="file"</span><span style="color: #ff0000"> name </span><span style="color: #0000ff">="File1"</span><span style="color: #ff0000"> size</span><span style="color: #0000ff">="20"</span><span style="color: #ff0000"> maxlength</span><span style="color: #0000ff">="20"</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type </span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000"> value</span><span style="color: #0000ff">="上传"</span><span style="color: #0000ff">/&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type </span><span style="color: #0000ff">="reset"</span><span style="color: #ff0000"> value</span><span style="color: #0000ff">="清除"</span><span style="color: #0000ff">/&gt;</span><br />   <span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a onclick="copyCnblogsCode(this)" href="javascript:void(0);"><font color="#1d58d1">复制代码</font></a></span></div></div>
<p>&nbsp;</p>
<p>jspsmart.jsp中代码：</p>
<div class="cnblogs_code" style="width: 900px"><pre><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">@ page language</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">java</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5"> import</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">java.util.*</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5"> pageEncoding</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">gb2312</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><br /><br /><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">h2</span><span style="color: #0000ff">&gt;</span>文件上传规范-jspSmart<span style="color: #0000ff">&lt;/</span><span style="color: #800000">h2</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">jsp:useBean </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="mySmartUpload"</span><span style="color: #ff0000"> scope</span><span style="color: #0000ff">="page"</span><span style="color: #ff0000"> class</span><span style="color: #0000ff">="com.jspsmart.upload.SmartUpload"</span><span style="color: #0000ff">/&gt;</span><br />  <span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5"><br />  </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">计算文件上传个数<br />  </span><span style="color: #0000ff; background-color: #f5f5f5">int</span><span style="color: #000000; background-color: #f5f5f5"> count</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800080; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">;<br />  <br />  </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">SmartUpload的初始化，使用这个jspsmart一定要在一开始就这样声明<br />  mySmartUpload.initialize(pageContext);<br />  <br />  </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">声明限制上传的文件的大小5MB<br />  mySmartUpload.setMaxFileSize(</span><span style="color: #800080; background-color: #f5f5f5">5</span><span style="color: #000000; background-color: #f5f5f5">*</span><span style="color: #800080; background-color: #f5f5f5">1024</span><span style="color: #000000; background-color: #f5f5f5">*</span><span style="color: #800080; background-color: #f5f5f5">1024</span><span style="color: #000000; background-color: #f5f5f5">);<br />  <br />  </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">依据form的内容上传<br />  mySmartUpload.upload();<br />  <br />  </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">将上传的文件一个一个取出来处理<br />  </span><span style="color: #0000ff; background-color: #f5f5f5">for</span><span style="color: #000000; background-color: #f5f5f5"> (</span><span style="color: #0000ff; background-color: #f5f5f5">int</span><span style="color: #000000; background-color: #f5f5f5"> i</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800080; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">;i</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">mySmartUpload.getFiles().getCount();i</span><span style="color: #000000; background-color: #f5f5f5">++</span><span style="color: #000000; background-color: #f5f5f5">)<br />  {<br />      </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">取出一个文件<br />      com.jspsmart.upload.File myFile </span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5"> mySmartUpload.getFiles().getFile(i);<br />      <br />      </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">如果文件存在，则做存档操作<br />      </span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5"> (!myFile.isMissing()){<br />          </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">将文件存放在绝对路径的位置<br />          myFile.saveAs(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">C:\\upload\\</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">myFile.getFileName(),mySmartUpload.SAVE_PHYSICAL);<br />          <br />          </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">显示此上传文件的详细信息<br />          out.println(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">FieldName=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">myFile.getFieldName()</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />          out.println(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">Size=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">myFile.getSize()</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />          out.println(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">FileName=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">myFile.getFileName()</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />          out.println(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">FileExt=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">myFile.getFileExt()</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />          out.println(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">FilePathName=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">myFile.getFilePathName()</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />          out.println(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">ContentType=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">myFile.getContentType()</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />          out.println(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">ContentDisp=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">myFile.getContentDisp()</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />          out.println(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">TypeMIME=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">myFile.getTypeMIME()</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />          out.println(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">SubTypeMIME=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">myFile.getSubTypeMIME()</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />          count</span><span style="color: #000000; background-color: #f5f5f5">++</span><span style="color: #000000; background-color: #f5f5f5">;<br />      }<br />  }<br />  <br />  </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">显示应该上产的文件数目<br />  out.println(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">mySmartUpload.getFiles().getCount()</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">file could be uploaded.&lt;BR&gt;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />  <br />  </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">显示成功上传的文件数目<br />  out.println(count</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">file(s) upload.</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />  </span><span style="color: #000000; background-color: #ffff00">%&gt;</span><br />  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a onclick="copyCnblogsCode(this)" href="javascript:void(0);"><font color="#1d58d1">复制代码</font></a></span></div></div>
<p>&nbsp;</p>
<p>downlload.jsp</p>
<div class="cnblogs_code" style="width: 900px"><pre><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">@ page language</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">java</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5"> import</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">java.util.*</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5"> pageEncoding</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">UTF-8</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><br /><br /><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><br />  <br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">h2</span><span style="color: #0000ff">&gt;</span>文件下载<span style="color: #0000ff">&lt;/</span><span style="color: #800000">h2</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">jsp:useBean </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="mySmartUpload"</span><span style="color: #ff0000"> scope</span><span style="color: #0000ff">="page"</span><span style="color: #ff0000"> class</span><span style="color: #0000ff">="com.jspsmart.upload.SmartUpload"</span><span style="color: #0000ff">/&gt;</span><br />  <span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5"><br />      </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">SmartUpload的初始化<br />      mySmartUpload.initialize(pageContext);<br />  <br />    </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">必须如此声明，否则将会把文件显示与浏览器中<br />    mySmartUpload.setContentDisposition(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">inline;</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />    <br />    </span><span style="color: #000000; background-color: #f5f5f5">//</span><span style="color: #000000; background-color: #f5f5f5">将sample.zip下载 下载默认名称为download.zip<br />    mySmartUpload.downloadFile(</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">C:\\upload\\aa.txt</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">,</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">application/x-zip-compressed</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">,</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #800000; background-color: #f5f5f5">downloaded.zip</span><span style="color: #800000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />  </span><span style="color: #000000; background-color: #ffff00">%&gt;</span><br />  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a onclick="copyCnblogsCode(this)" href="javascript:void(0);"><font color="#1d58d1">复制代码</font></a></span></div></div></div></div> <img src ="http://www.blogjava.net/jimingminlovefly/aggbug/369310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2012-02-03 11:14 <a href="http://www.blogjava.net/jimingminlovefly/articles/369310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>案例-jspSmartUpload上传下载1</title><link>http://www.blogjava.net/jimingminlovefly/articles/362705.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Fri, 04 Nov 2011 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/362705.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/362705.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/362705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/362705.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/362705.html</trackback:ping><description><![CDATA[<span class="t18"><span class="myp11"><font id="zoom"><span class="t18"><span class="myp11"><font id="zoom"><span class="t18"><span class="myp11"><font id="zoom"><span class="t18"><span class="myp11"><font id="zoom"><span class="t18"><span class="myp11"><font id="zoom"><pre><pre>&lt;FORM <span style="color: red">METHOD="POST" </span><span style="color: red">ENCTYPE="multipart/form-data" </span>
ACTION="/jspSmartUpload/upload.jsp"&gt;
&lt;INPUT TYPE="FILE" NAME="MYFILE"&gt;
&lt;INPUT TYPE="SUBMIT"&gt;
&lt;/FORM&gt;</pre><pre>&nbsp;</pre><pre><span style="color: #ff0000">上传</span><span style="color: #0000ff">+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre><pre><strong></strong><span class="t18"><span class="myp11"><font id="zoom"><pre>&lt;%
	// 新建一个SmartUpload对象
	SmartUpload su = new SmartUpload();
	// 上传初始化
	su.initialize(pageContext);
	// 设定上传限制
	// 1.限制每个上传文件的最大长度。
	// su.setMaxFileSize(10000);
	// 2.限制总上传数据的长度。
	// su.setTotalMaxFileSize(20000);
	// 3.设定允许上传的文件（通过扩展名限制）,仅允许doc,txt文件。
	// su.setAllowedFilesList("doc,txt");
	// 4.设定禁止上传的文件（通过扩展名限制）,禁止上传带有exe,bat,
	jsp,htm,html扩展名的文件和没有扩展名的文件。
	// su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
	// 上传文件
	su.upload();
	// 将上传文件全部保存到指定目录
	int count = su.save("/upload");
	out.<a href="http://pr.knowsky.com/">pr</a>intln(count+"个文件上传成功！&lt;br&gt;");
	
	// 利用Request对象获取参数之值
	out.println("TEST="+su.getRequest().getParameter("TEST")
	+"&lt;BR&gt;&lt;BR&gt;");

	// 逐一提取上传文件信息，同时可保存文件。
	for (int i=0;i&lt;su.getFiles().getCount();i++)
	{
		com.jspsmart.upload.File file = su.getFiles().getFile(i);
		
		// 若文件不存在则继续
		if (file.isMissing()) continue;

		// 显示当前文件信息
		out.println("&lt;TABLE BORDER=1&gt;");
		out.println("&lt;TR&gt;&lt;TD&gt;表单项名（FieldName）&lt;/TD&gt;&lt;TD&gt;"
		+ file.getFieldName() + "&lt;/TD&gt;&lt;/TR&gt;");
		out.println("&lt;TR&gt;&lt;TD&gt;文件长度（Size）&lt;/TD&gt;&lt;TD&gt;" + 
		file.getSize() + "&lt;/TD&gt;&lt;/TR&gt;");
		out.println("&lt;TR&gt;&lt;TD&gt;文件名（FileName）&lt;/TD&gt;&lt;TD&gt;" 
		+ file.getFileName() + "&lt;/TD&gt;&lt;/TR&gt;");
		out.println("&lt;TR&gt;&lt;TD&gt;文件扩展名（FileExt）&lt;/TD&gt;&lt;TD&gt;" 
		+ file.getFileExt() + "&lt;/TD&gt;&lt;/TR&gt;");
		out.println("&lt;TR&gt;&lt;TD&gt;文件全名（FilePathName）&lt;/TD&gt;&lt;TD&gt;"
		+ file.getFilePathName() + "&lt;/TD&gt;&lt;/TR&gt;");
		out.println("&lt;/TABLE&gt;&lt;BR&gt;");

		// 将文件另存
		// file.saveAs("/upload/" + myFile.getFileName());
		// 另存到以WEB应用程序的根目录为文件根目录的目录下
		// file.saveAs("/upload/" + myFile.getFileName(), 
		su.SAVE_VIRTUAL);
		// 另存到操作系统的根目录为文件根目录的目录下
		// file.saveAs("c:\\temp\\" + myFile.getFileName(), 
		su.SAVE_PHYSICAL);

	}
%&gt;
</pre><pre><span style="color: #0000ff">下载+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre><pre>&nbsp;</pre><pre><span class="t18"><span class="myp11"><font id="zoom"><pre>&lt;%@ page contentType="text/html;charset=gb2312" 
import="com.jspsmart.upload.*" %&gt;&lt;%
		// 新建一个SmartUpload对象
	SmartUpload su = new SmartUpload();
		// 初始化
	su.initialize(pageContext);
		// 设定contentDisposition为null以禁止浏览器自动打开文件，
		//保证点击链接后是下载文件。若不设定，则下载的文件扩展名为
		//doc时，浏览器将自动用word打开它。扩展名为pdf时，
		//浏览器将用acrobat打开。
	su.setContentDisposition(null);
		// 下载文件
	su.downloadFile("/upload/如何赚取我的第一桶金.doc");
%&gt;</pre></font></span></span></pre><pre>&nbsp;</pre><pre><span style="color: #0000ff">下载 中文处理+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre><pre><span class="t18"><span class="myp11"><font id="zoom"><pre>public void downloadFile(String s, String s1, String s2, int i)
	throws ServletException, IOException, SmartUploadException
    {
	if(s == null)
	    throw new IllegalArgumentException("File '" + s +
	    "' not found (1040).");
	if(s.equals(""))
	    throw new IllegalArgumentException("File '" + s +
	    "' not found (1040).");
	if(!isVirtual(s) &amp;&amp; m_denyPhysicalPath)
	    throw new SecurityException("Physical path is
	    denied (1035).");
	if(isVirtual(s))
	    s = m_<a href="http://www.knowsky.com/tag-9.html">application</a>.getRealPath(s);
	java.io.File file = new java.io.File(s);
	FileInputStream fileinputstream = new FileInputStream(file);
	long l = file.length();
	boolean flag = false;
	int k = 0;
	byte abyte0[] = new byte[i];
	if(s1 == null)
	    m_response.setContentType("application/x-msdownload");
	else
	if(s1.length() == 0)
	    m_response.setContentType("application/x-msdownload");
	else
	    m_response.setContentType(s1);
	m_response.setContentLength((int)l);
	m_contentDisposition = m_contentDisposition != null ?
	m_contentDisposition : "attachment;";
	if(s2 == null)
	    m_response.setHeader("Content-Disposition", 
	    m_contentDisposition + " filename=" + 
	    toUtf8String(getFileName(s)));
	else
	if(s2.length() == 0)
	    m_response.setHeader("Content-Disposition", 
	    m_contentDisposition);
	else
	    m_response.setHeader("Content-Disposition", 
	    m_contentDisposition + " filename=" + toUtf8String(s2));
	while((long)k &lt; l)
	{
	    int j = fileinputstream.read(abyte0, 0, i);
	    k += j;
	    m_response.getOutputStream().write(abyte0, 0, j);
	}
	fileinputstream.close();
    }

    /**
     * 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.
     * 纵横软件制作中心雨亦奇2003.08.01
     * @param s 原文件名
     * @return 重新编码后的文件名
     */
    public static String toUtf8String(String s) {
	StringBuffer sb = new StringBuffer();
	for (int i=0;i&lt;s.length();i++) {
	    char c = s.charAt(i);
	    if (c &gt;= 0 &amp;&amp; c &lt;= 255) {
		sb.append(c);
	    } else {
		byte[] b;
		try {
		    b = Character.toString(c).getBytes("utf-8");
		} catch (Exception ex) {
		    System.out.println(ex);
		    b = new byte[0];
		}
		for (int j = 0; j &lt; b.length; j++) {
		    int k = b[j];
		    if (k &lt; 0) k += 256;
		    sb.append("%" + Integer.toHexString(k).
		    toUpperCase());
		}
	    }
	}
	return sb.toString();
    }</pre></font></span></span></pre><pre>&nbsp;</pre><pre><span style="color: #0000ff">+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></font></span></span>&nbsp;</pre></pre></font></span></span></font></span></span></font></span></span></font></span></span></font></span></span>  <img src ="http://www.blogjava.net/jimingminlovefly/aggbug/362705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2011-11-04 17:31 <a href="http://www.blogjava.net/jimingminlovefly/articles/362705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>