1. 程式人生 > >Servlet詳解(第二篇)

Servlet詳解(第二篇)

																				<div class="tags-box space">

						</div>
																							</div>
			<div class="operating">
													</div>
		</div>
	</div>
</div>
<article>
	<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-e2445db1a8.css">
					<div class="htmledit_views">
            <h2><a name="t0"></a>servlet訪問路徑</h2><p><img src="https://img-blog.csdn.net/20160422215855388" alt="這裡寫圖片描述" title=""></p><h2><a name="t1"></a><a target="_blank"></a>servletConfig的作用</h2><p><img src="https://img-blog.csdn.net/20160422215926326" alt="這裡寫圖片描述" title=""></p><h2><a name="t2"></a><a target="_blank"></a>使用者相應請求流程圖</h2><p><img src="https://img-blog.csdn.net/20160422220028177" alt="這裡寫圖片描述" title=""></p><h1><a name="t3"></a><a target="_blank"></a>response</h1><h3><a name="t4"></a><a target="_blank"></a>1,response概述</h3><pre onclick="hljs.copyCode(event)"><code class="hljs css"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-selector-tag">response</span>是<span class="hljs-selector-tag">Servlet</span><span class="hljs-selector-class">.service</span>方法的一個引數,型別為<span class="hljs-selector-tag">javax</span><span class="hljs-selector-class">.servlet</span><span class="hljs-selector-class">.http</span><span class="hljs-selector-class">.HttpServletResponse</span>。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">在客戶端發出每個請求時,伺服器都會建立一個<span class="hljs-selector-tag">response</span>物件,並傳入給<span class="hljs-selector-tag">Servlet</span><span class="hljs-selector-class">.service</span>()方法。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-selector-tag">response</span>物件是用來對客戶端進行響應的,這說明在<span class="hljs-selector-tag">service</span>()方法中使用<span class="hljs-selector-tag">response</span>物件可以完成對客戶端的響應工作。</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h4><a target="_blank"></a>response物件的功能分為以下四種:</h4><pre onclick="hljs.copyCode(event)"><code class="hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">設定響應頭資訊;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">傳送狀態碼;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">設定響應正文;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  重定向;</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h3><a name="t5"></a><a target="_blank"></a>2 response響應正文</h3><h4><a target="_blank"></a>response是響應物件,向客戶端輸出響應正文(響應體)可以使用response的響應流,repsonse一共提供了兩個響應流物件:</h4><pre onclick="hljs.copyCode(event)"><code class="hljs vbscript"><ol class="hljs-ln" style="width:886px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">PrintWriter out=<span class="hljs-built_in">response</span>.getWriter():獲取字元流;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">ServletOutputStream out=<span class="hljs-built_in">response</span>.getOutputStream():獲取位元組流;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    當然,如果響應正文內容為字元,那麼使用<span class="hljs-built_in">response</span>.getWriter(),如果響應內容是位元組,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  例如:下載時,那麼可以使用<span class="hljs-built_in">response</span>.getOutputStream()。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    注意,在一個請求中,不能同時使用這兩個流!</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    也就是說,要麼你使用repsonse.getWriter(),</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">             要麼使用<span class="hljs-built_in">response</span>.getOutputStream(),但不能同時使用這兩個流。不然會丟擲IllegalStateException異常。</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h4><a target="_blank"></a>2.1字元響應流</h4><h5><a target="_blank"></a>字元編碼</h5><pre onclick="hljs.copyCode(event)"><code class="hljs vbscript"><ol class="hljs-ln" style="width:847px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">在使用<span class="hljs-built_in">response</span>.getWriter()時需要注意預設字元編碼為ISO<span class="hljs-number">-8859</span><span class="hljs-number">-1</span>,如果希望設定字元流的字元編碼為utf<span class="hljs-number">-8</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">可以使用<span class="hljs-built_in">response</span>.setCharaceterEncoding(“utf<span class="hljs-number">-8</span>”)來設定。這樣可以保證輸出給客戶端的字元都是使用UTF<span class="hljs-number">-8</span>編碼的!</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">但客戶端瀏覽器並不知道響應資料是什麼編碼的!如果希望通知客戶端使用UTF<span class="hljs-number">-8</span>來解讀響應資料,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">那麼還是使用<span class="hljs-built_in">response</span>.setContentType(<span class="hljs-string">"text/html;charset=utf-8"</span>)方法比較好,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">因為這個方法不只會呼叫<span class="hljs-built_in">response</span>.setCharaceterEncoding(“utf<span class="hljs-number">-8</span>”),還會設定content-type響應頭,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">客戶端瀏覽器會使用content-type頭來解讀響應資料。</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h5><a target="_blank"></a>緩衝區</h5><pre onclick="hljs.copyCode(event)"><code class="hljs css"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-selector-tag">response</span><span class="hljs-selector-class">.getWriter</span>()是<span class="hljs-selector-tag">PrintWriter</span>型別,所以它有緩衝區,緩衝區的預設大小為8<span class="hljs-selector-tag">KB</span>。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">也就是說,在響應資料沒有輸出8<span class="hljs-selector-tag">KB</span>之前,資料都是存放在緩衝區中,而不會立刻傳送到客戶端。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">當<span class="hljs-selector-tag">Servlet</span>執行結束後,伺服器才會去重新整理流,使緩衝區中的資料傳送到客戶端。</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h6><a target="_blank"></a>如果希望響應資料馬上傳送給客戶端:</h6><pre onclick="hljs.copyCode(event)"><code class="hljs css"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">向流中寫入大於8<span class="hljs-selector-tag">KB</span>的資料;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">呼叫<span class="hljs-selector-tag">response</span><span class="hljs-selector-class">.flushBuffer</span>()方法來手動重新整理緩衝區;</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h3><a name="t6"></a><a target="_blank"></a>3設定響應頭資訊</h3><pre onclick="hljs.copyCode(event)"><code class="hljs vbscript"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">可以使用<span class="hljs-built_in">response</span>物件的setHeader()方法來設定響應頭!使用該方法設定的響應頭最終會發送給客戶端瀏覽器!</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">response</span>.setHeader(“content-type”,“text/html;charset=utf<span class="hljs-number">-8</span>”):設定content-type響應頭,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">該頭的作用是告訴瀏覽器響應內容為html型別,編碼為utf<span class="hljs-number">-8</span>。而且同時會設定<span class="hljs-built_in">response</span>的字元流編碼為utf<span class="hljs-number">-8</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">即<span class="hljs-built_in">response</span>.setCharaceterEncoding(“utf<span class="hljs-number">-8</span>”);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">response</span>.setHeader(<span class="hljs-string">"Refresh"</span>,<span class="hljs-string">"5;URL=http://www.itcast.cn"</span>):<span class="hljs-number">5</span>秒後自動跳轉到傳智主頁。</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h3><a name="t7"></a><a target="_blank"></a>4設定狀態碼及其他方法</h3><pre onclick="hljs.copyCode(event)"><code class="hljs vbscript"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">response</span>.setContentType(<span class="hljs-string">"text/html;charset=utf-8"</span>):</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">等同與呼叫<span class="hljs-built_in">response</span>.setHeader(“content-type”,“text/html;charset=utf<span class="hljs-number">-8</span>”);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">response</span>.setCharacterEncoding(“utf<span class="hljs-number">-8</span>”):設定字元響應流的字元編碼為utf<span class="hljs-number">-8</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">response</span>.setStatus(<span class="hljs-number">200</span>):設定狀態碼;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">response</span>.sendError(<span class="hljs-number">404</span>,“您要查詢的資源不存在”):當傳送錯誤狀態碼時,Tomcat會跳轉到固定的錯誤頁面去,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">      但可以顯示錯誤資訊。</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h3><a name="t8"></a><a target="_blank"></a>5重定向</h3><h4><a target="_blank"></a>5.1什麼是重定向</h4><p>當你訪問<a href="http://www.sun.com" rel="nofollow" target="_blank">http://www.sun.com</a>時,你會發現瀏覽器位址列中的URL會變成<a href="http://www.oracle.com/us/sun/index.htm" rel="nofollow" target="_blank">http://www.oracle.com/us/sun/index.htm</a>,這就是重定向了。 <br>重定向是伺服器通知瀏覽器去訪問另一個地址,即再發出另一個請求。 <br><img src="https://img-blog.csdn.net/20160422221129707" alt="這裡寫圖片描述" title=""><br>響應碼為200表示響應成功,而響應碼為302表示重定向。所以完成重定向的第一步就是設定響應碼為302。 <br>因為重定向是通知瀏覽器再第二個請求,所以瀏覽器需要知道第二個請求的URL,所以完成重定向的第二步是設定Location頭,指定第二個請求的URL地址。</p><h4><a target="_blank"></a>5.2重定向的方法</h4><pre class="prettyprint" name="code" onclick="hljs.copyCode(event)"><code class="hljs java has-numbering"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword"><span class="hljs-keyword">public</span></span> <span class="hljs-class"><span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span class="hljs-class"> </span><span class="hljs-title"><span class="hljs-class"><span class="hljs-title">AServlet</span></span></span><span class="hljs-class"> </span><span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword">extends</span></span></span><span class="hljs-class"> </span><span class="hljs-title"><span class="hljs-class"><span class="hljs-title">HttpServlet</span></span></span>{</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="hljs-function"> </span><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span><span class="hljs-function"> </span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">doGet</span></span></span><span class="hljs-function"><span class="hljs-params">(HttpServletRequest request,HttpServletResponse response)</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">throws</span></span></span><span class="hljs-function"> ServletException,IOException</span>{response.sendRedirect(<span class="hljs-string"><span class="hljs-string">"/hello/BServlet"</span></span>);}}</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h4><a target="_blank"></a>5.3重定向小結</h4><pre onclick="hljs.copyCode(event)"><code class="hljs css"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">重定向是兩次請求;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">重定向的<span class="hljs-selector-tag">URL</span>可以是其他應用,不侷限於當前應用;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">重定向的響應頭為302,並且必須要有<span class="hljs-selector-tag">Location</span>響應頭;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">重定向就不要再使用<span class="hljs-selector-tag">response</span><span class="hljs-selector-class">.getWriter</span>()或<span class="hljs-selector-tag">response</span><span class="hljs-selector-class">.getOutputStream</span>()輸出資料,不然可能會出現異常;</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h1><a name="t9"></a><a target="_blank"></a>request</h1><h5>request是Servlet.service()方法的一個引數,型別為javax.servlet.http.HttpServletRequest。在客戶端發出每個請求時,伺服器都會建立一個request物件,並把請求資料封裝到request中,然後在呼叫Servlet.service()方法時傳遞給service()方法,這說明在service()方法中可以通過request物件來獲取請求資料。</h5><h3><a name="t10"></a><a target="_blank"></a>1request的功能可以分為以下幾種:</h3><pre onclick="hljs.copyCode(event)"><code class="hljs vbscript"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">封裝了請求頭資料;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">封裝了請求正文資料,如果是<span class="hljs-keyword">GET</span>請求,那麼就沒有正文;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">request</span>是一個域物件,可以把它當成Map來新增獲取資料;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">request</span>提供了請求轉發和請求包含功能。</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h5>request是域物件!在JavaWeb中一共四個域物件,其中ServletContext就是域物件,它在整個應用中只建立一個ServletContext物件。request其中一個,request可以在一個請求中共享資料。</h5><h3><a name="t11"></a><a target="_blank"></a>2下面是request的域方法:</h3><pre onclick="hljs.copyCode(event)"><code class="hljs delphi"><ol class="hljs-ln" style="width:927px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">void setAttribute(<span class="hljs-keyword">String</span> <span class="hljs-keyword">name</span>,<span class="hljs-keyword">Object</span> value):用來儲存一個物件,也可以稱之為儲存一個域屬性,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">例如:servletContext.setAttribute(“xxx”,“XXX”),在request中儲存了一個域屬性,域屬性名稱為xxx,域屬性的值為XXX。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">請注意,如果多次呼叫該方法,並且使用相同的<span class="hljs-keyword">name</span>,那麼會覆蓋上一次的值,這一特性與Map相同;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">Object</span> getAttribute(<span class="hljs-keyword">String</span> <span class="hljs-keyword">name</span>):用來獲取request中的資料,當前在獲取之前需要先去儲存才行,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">例如:<span class="hljs-keyword">String</span> value=(<span class="hljs-keyword">String</span>)request.getAttribute(“xxx”);,獲取名為xxx的域屬性;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">void removeAttribute(<span class="hljs-keyword">String</span> <span class="hljs-keyword">name</span>):用來移除request中的域屬性,如果引數<span class="hljs-keyword">name</span>指定的域屬性不存在,那麼本方法什麼都不做;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">Enumeration getAttributeNames():獲取所有域屬性的名稱;</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h3><a name="t12"></a><a target="_blank"></a>3 request獲取請求頭資料</h3><pre onclick="hljs.copyCode(event)"><code class="hljs vbscript"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">request</span>與請求頭相關的方法有:</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getHeader(<span class="hljs-built_in">String</span> name):獲取指定名稱的請求頭;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">Enumeration getHeaderNames():獲取所有請求頭名稱;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">int</span> getIntHeader(<span class="hljs-built_in">String</span> name):獲取值為<span class="hljs-built_in">int</span>型別的請求頭。</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h3><a name="t13"></a><a target="_blank"></a>4 request獲取請求相關的其它方法</h3><pre onclick="hljs.copyCode(event)"><code class="hljs javascript"><ol class="hljs-ln" style="width:893px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">request中還提供了與請求相關的其他方法,有些方法是為了我們更加便捷的方法請求頭資料而設計,有些是與請求URL相關的方法。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">int getContentLength():獲取請求體的位元組數,GET請求沒有請求體,沒有請求體返回<span class="hljs-number">-1</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getContentType():獲取請求型別,如果請求是GET,那麼這個方法返回<span class="hljs-literal">null</span>;如果是POST請求,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">                          那麼預設為application/x-www-form-urlencoded,表示請求體內容使用了URL編碼;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getMethod():返回請求方法,例如:GET</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">Locale getLocale():返回當前客戶端瀏覽器的Locale。java.util.Locale表示國家和言語,這個東西在國際化中很有用;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getCharacterEncoding():獲取請求編碼,如果沒有setCharacterEncoding(),</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">                                那麼返回<span class="hljs-literal">null</span>,表示使用ISO<span class="hljs-number">-8859</span><span class="hljs-number">-1</span>編碼;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">void</span> setCharacterEncoding(<span class="hljs-built_in">String</span> code):設定請求編碼,只對請求體有效!</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">                              注意,對於GET而言,沒有請求體!!!所以此方法只能對POST請求中的引數有效!</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getContextPath():返回上下文路徑,例如:/hello</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getQueryString():返回請求URL中的引數,例如:name=zhangSan</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getRequestURI():返回請求URI路徑,例如:/hello/oneServlet</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">StringBuffer getRequestURL():返回請求URL路徑,例如:http:<span class="hljs-comment">//localhost/hello/oneServlet,</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">                               即返回除了引數以外的路徑資訊;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getServletPath():返回Servlet路徑,例如:/oneServlet</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getRemoteAddr():返回當前客戶端的IP地址;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getRemoteHost():返回當前客戶端的主機名,但這個方法的實現還是獲取IP地址;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getScheme():返回請求協議,例如:http;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">String</span> getServerName():返回主機名,例如:localhost</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> int getServerPort():返回伺服器埠號</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><p><img src="https://img-blog.csdn.net/20160422221706887" alt="這裡寫圖片描述" title=""></p><h3><a name="t14"></a><a target="_blank"></a>5 request獲取請求引數</h3><h5><a target="_blank"></a>最為常見的客戶端傳遞引數方式有兩種:</h5><pre onclick="hljs.copyCode(event)"><code class="hljs vbscript"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  瀏覽器位址列直接輸入:一定是<span class="hljs-keyword">GET</span>請求;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">超連結:一定是<span class="hljs-keyword">GET</span>請求;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">表單:可以是<span class="hljs-keyword">GET</span>,也可以是POST,這取決與&lt;form&gt;的method屬性值;</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h5><a target="_blank"></a>GET請求和POST請求的區別:</h5><h6><a target="_blank"></a>GET請求::</h6><pre onclick="hljs.copyCode(event)"><code class="hljs vbscript"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">請求引數會在瀏覽器的位址列中顯示,所以不安全;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">請求引數長度限制長度在<span class="hljs-number">1</span>K之內;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">GET</span>請求沒有請求體,無法通過<span class="hljs-built_in">request</span>.setCharacterEncoding()來設定引數的編碼;</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h6><a target="_blank"></a>POST請求:</h6><pre onclick="hljs.copyCode(event)"><code class="hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">請求引數不會顯示瀏覽器的位址列,相對安全;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  請求引數長度沒有限制;</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><pre class="prettyprint" name="code" onclick="hljs.copyCode(event)"><code class="hljs xml has-numbering"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"><span class="hljs-tag">&lt;</span><span class="hljs-title"><span class="hljs-tag"><span class="hljs-name">a</span></span></span><span class="hljs-tag"> </span><span class="hljs-attribute"><span class="hljs-tag"><span class="hljs-attr">href</span></span></span><span class="hljs-tag">=</span><span class="hljs-value"><span class="hljs-tag"><span class="hljs-string">"/hello/ParamServlet?p1=v1&amp;p2=v2"</span></span></span><span class="hljs-tag">&gt;</span></span>超連結<span class="hljs-tag"><span class="hljs-tag">&lt;/</span><span class="hljs-title"><span class="hljs-tag"><span class="hljs-name">a</span></span></span><span class="hljs-tag">&gt;</span></span><span class="hljs-tag"><span class="hljs-tag">&lt;</span><span class="hljs-title"><span class="hljs-tag"><span class="hljs-name">hr</span></span></span><span class="hljs-tag">/&gt;</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"><span class="hljs-tag">&lt;</span><span class="hljs-title"><span class="hljs-tag"><span class="hljs-name">form</span></span></span><span class="hljs-tag"> </span><span class="hljs-attribute"><span class="hljs-tag"><span class="hljs-attr">action</span></span></span><span class="hljs-tag">=</span><span class="hljs-value"><span class="hljs-tag"><span class="hljs-string">"/hello/ParamServlet"</span></span></span><span class="hljs-value"><span class="hljs-tag"><span class="hljs-attr">method</span>=<span class="hljs-string">"post"</span></span></span><span class="hljs-tag">&gt;</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">   引數1:<span class="hljs-tag"><span class="hljs-tag">&lt;</span><span class="hljs-title"><span class="hljs-tag"><span class="hljs-name">input</span></span></span><span class="hljs-tag"> </span><span class="hljs-attribute"><span class="hljs-tag"><span class="hljs-attr">type</span></span></span><span class="hljs-tag">=</span><span class="hljs-value"><span class="hljs-tag"><span class="hljs-string">"text"</span></span></span><span class="hljs-value"><span class="hljs-tag"><span class="hljs-attr">name</span>=<span class="hljs-string">"p1"</span></span></span><span class="hljs-tag">/&gt;</span></span><span class="hljs-tag"><span class="hljs-tag">&lt;</span><span class="hljs-title"><span class="hljs-tag"><span class="hljs-name">br</span></span></span><span class="hljs-tag">/&gt;</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">   引數2:<span class="hljs-tag"><span class="hljs-tag">&lt;</span><span class="hljs-title"><span class="hljs-tag"><span class="hljs-name">input</span></span></span><span class="hljs-tag"> </span><span class="hljs-attribute"><span class="hljs-tag"><span class="hljs-attr">type</span></span></span><span class="hljs-tag">=</span><span class="hljs-value"><span class="hljs-tag"><span class="hljs-string">"text"</span></span></span><span class="hljs-value"><span class="hljs-tag"><span class="hljs-attr">name</span>=<span class="hljs-string">"p2"</span></span></span><span class="hljs-tag">/&gt;</span></span><span class="hljs-tag"><span class="hljs-tag">&lt;</span><span class="hljs-title"><span class="hljs-tag"><span class="hljs-name">br</span></span></span><span class="hljs-tag">/&gt;</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">          <span class="hljs-tag">&lt;</span><span class="hljs-title"><span class="hljs-tag"><span class="hljs-name">input</span></span></span><span class="hljs-tag"> </span><span class="hljs-attribute"><span class="hljs-tag"><span class="hljs-attr">type</span></span></span><span class="hljs-tag">=</span><span class="hljs-value"><span class="hljs-tag"><span class="hljs-string">"submit"</span></span></span><span class="hljs-value"><span class="hljs-tag"><span class="hljs-attr">value</span>=<span class="hljs-string">"提交"</span></span></span><span class="hljs-tag">/&gt;</span></span><span class="hljs-tag"></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;/</span><span class="hljs-title"><span class="hljs-tag"><span class="hljs-name">form</span></span></span><span class="hljs-tag">&gt;</span></div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h4><a target="_blank"></a>下面是使用request獲取請求引數的API:</h4><pre class="prettyprint" name="code" onclick="hljs.copyCode(event)"><code class="hljs vbscript has-numbering"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{<span class="hljs-built_in"> <span class="hljs-built_in">String</span></span> v1=<span class="hljs-built_in"><span class="hljs-built_in">request</span></span>.getParameter(<span class="hljs-string"><span class="hljs-string">"p1"</span></span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">  <span class="hljs-built_in">String</span></span> v2=<span class="hljs-built_in"><span class="hljs-built_in">request</span></span>.getParameter(<span class="hljs-string"><span class="hljs-string">"p2"</span></span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  System.out.println(<span class="hljs-string"><span class="hljs-string">"p1="</span></span>+v1);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  System.out.println(<span class="hljs-string"><span class="hljs-string">"p2="</span></span>+v2);} </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{<span class="hljs-built_in"> <span class="hljs-built_in">String</span></span> v1=<span class="hljs-built_in"><span class="hljs-built_in">request</span></span>.getParameter(<span class="hljs-string"><span class="hljs-string">"p1"</span></span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">  <span class="hljs-built_in">String</span></span> v2=<span class="hljs-built_in"><span class="hljs-built_in">request</span></span>.getParameter(<span class="hljs-string"><span class="hljs-string">"p2"</span></span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  System.out.println(<span class="hljs-string"><span class="hljs-string">"p1="</span></span>+v1);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  System.out.println(<span class="hljs-string"><span class="hljs-string">"p2="</span></span>+v2);       }</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h4><a target="_blank"></a>一次性獲取多個引數</h4><pre class="prettyprint" name="code" onclick="hljs.copyCode(event)"><code class="hljs avrasm has-numbering cs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{String[]names=request<span class="hljs-preprocessor">.getParameterValues</span>(<span class="hljs-string"><span class="hljs-string">"name"</span></span>)<span class="hljs-comment">;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">[<span class="hljs-meta">獲取所有名為name的引數值</span>]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">System<span class="hljs-preprocessor">.<span class="hljs-keyword">out</span></span><span class="hljs-preprocessor">.println</span>(Arrays<span class="hljs-preprocessor">.toString</span>(names))<span class="hljs-comment">;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">[<span class="hljs-meta">列印陣列,輸出結果為:[zhangSan, liSi</span>]]}</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h4><a target="_blank"></a>一次性獲取所有引數</h4><pre class="prettyprint" name="code" onclick="hljs.copyCode(event)"><code class="hljs ocaml has-numbering javascript"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&lt;form action=<span class="hljs-string"><span class="hljs-string">"/hello/ParamServlet"</span></span><span class="hljs-keyword">method</span>=<span class="hljs-string"><span class="hljs-string">"post"</span></span>&gt;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">   引數<span class="hljs-number"><span class="hljs-number">1</span></span>:&lt;input <span class="hljs-class"><span class="hljs-keyword">type</span>=</span><span class="hljs-string"><span class="hljs-string">"text"</span></span>name=<span class="hljs-string"><span class="hljs-string">"p1"</span></span>/&gt;<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">br</span>/&gt;</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">   引數<span class="hljs-number"><span class="hljs-number">2</span></span>:&lt;input <span class="hljs-class"><span class="hljs-keyword">type</span>=</span><span class="hljs-string"><span class="hljs-string">"text"</span></span>name=<span class="hljs-string"><span class="hljs-string">"p2"</span></span>/&gt;<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">br</span>/&gt;</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">         &lt;input <span class="hljs-class"><span class="hljs-keyword">type</span>=</span><span class="hljs-string"><span class="hljs-string">"submit"</span></span><span class="hljs-keyword">value</span>=<span class="hljs-string"><span class="hljs-string">"提交"</span></span>/&gt;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">form</span>&gt;</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{Enumeration names=request.getParameterNames()</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">[獲取所有引數名稱,輸出結果為:p1和p2];</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword"><span class="hljs-keyword">while</span></span>(names.hasMoreElements()){System.out.println(names.nextElement());}}</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><h4><a target="_blank"></a>Map getParameterMap():</h4><p>獲取所有引數封裝到Map中,其中key為引數名,value為引數值,因為一個引數名稱可能有多個值,所以引數值是String[],而不是String。</p><pre class="prettyprint" name="code" onclick="hljs.copyCode(event)"><code class="hljs vbscript has-numbering"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">&lt;a href=<span class="hljs-string"><span class="hljs-string">"/day05_1/ParamServlet?p1=v1&amp;p1=vv1&amp;p2=v2&amp;p2=vv2"</span></span>&gt;超連結&lt;/a&gt;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">Map&lt;<span class="hljs-built_in"><span class="hljs-built_in">String</span></span>,<span class="hljs-built_in"><span class="hljs-built_in">String</span></span>[]&gt;paramMap=<span class="hljs-built_in"><span class="hljs-built_in">request</span></span>.getParameterMap();</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword"><span class="hljs-keyword">for</span></span>(<span class="hljs-built_in"><span class="hljs-built_in">String</span></span> name:paramMap.keySet()){<span class="hljs-built_in"></span></div></div></li></ol></code><code class="hljs vbscript has-numbering"><span class="hljs-built_in"></span></code><div class="hljs-button" data-title="複製"></div></pre><pre class="prettyprint" name="code"><code class="hljs vbscript has-numbering"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in"><span class="hljs-built_in">String</span></span>[]values=paramMap.<span class="hljs-keyword"><span class="hljs-keyword">get</span></span>(name);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code">&l