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"><div class="hljs-ln-line">System.out.println(name+<span class="hljs-string"><span class="hljs-string">":"</span></span>+Arrays.toString(values));}</div></div></li></ol></code></pre><code class="hljs vbscript has-numbering"><span class="hljs-built_in"></span></code><code class="hljs vbscript has-numbering"><span class="hljs-built_in"></span></code><code class="hljs vbscript has-numbering"><span class="hljs-built_in"></span></code><code class="hljs vbscript has-numbering"><span class="hljs-built_in"></span></code>            </div>
            </div>
		</article>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值