HttpServletRequest包详解
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息,包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内。java中HttpServletRequest专门处理GET/POST请求。
HTTP请求协议
a.请求地址(URL)
b.请求头(Request headers)
c.实体数据(Entity body)
//HTTP 1.1协议信息 POST /examples/default.jsp HTTP/1.1 Accept: text/plain; text/html Accept-Language: en-gb Connection: Keep-Alive Host: localhost User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98) Content-Length: 33 Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate lastName=Franks&firstName=Michael
HttpServletRequest封装了所有的http头部信息,java中就可以通过这个类很容易获取。
常用方法
1. 获得客户端信息
getMethod //返回HTTP请求消息中的请求方式。 getRequestURI //返回请求行中的资源名部分。 getQueryString //返回请求行中的参数部分。 getProtocol //返回请求行中的协议名和版本。 getContextPath //返回请求资源所属于的WEB应用程序的路径。 getPathInfo //返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。 getPathTranslated //返回URL中的额外路径信息所对应的资源的真实路径。 getServletPath //返回Servlet的名称或Servlet所映射的路径。获取网络连接信息 getRemoteAddr //返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。 (*) getRemoteHost //返回发出请求的客户机的完整主机名,即“pc1.it315.org”这种格式。 getRemotePort //返回发出请求的客户机所使用的网络接口的端口号。 getLocalAddr //返回WEB服务器上接收当前请求的网络接口的IP地址。 getLocalName //返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。 getLocalPort //返回WEB服务器上接收当前请求的网络接口的端口号。 getServerName //返回当前请求所指向的主机名。 getServerPort //返回当前请求所连接的服务器端口号。 getScheme //返回请求的协议名,例如http、https或ftp。 getRequestURL //返回客户端发出请求时的完整URL。
2. 获得客户端机器请求头部信息
getHeader(string name) //返回String getHeaders(String name) //返回Enumeration getHeaderNames方法 getIntHeader方法 getDateHeader方法 getContentType方法 getContentLength方法 getCharacterEncoding方法
3. 常用的方法
String getMethod() 返回这个请求使用的HTTP方法(例如:GET、POST、PUT) String getQueryString() 返回这个请求URL所包含的查询字符串。一个查询字串符在一个URL中由一个“?”代表。 String getRequestURI() 返回请求的路径 HttpSession getSession() 返回一个当前有效的session String getParameter(String key) 是从Get或者Post提交的数据中获取数据 setAttribute(String name,Object o) 将数据作为request对象的一个属性存放到request对象中,例如:request.setAttribute("data", data); getAttribute(String name) 返回获取request对象的name属性的属性值或是session内存在的对象尤服务器端设置,例如:request.getAttribute("data") removeAttribute(String name) 移除request对象的name属性,例如:request.removeAttribute("data") getAttributeNames 获取request对象的所有属性名,返回的是一个,例如:EnumerationattrNames = request.getAttributeNames(); String getHeader("referer") 则是获取上一次请求的url
4. 获得客户请求参数(客户端提交的数据)
getParameter(String)(常用) getParameterValues(String name)(常用) getParameterNames()(不常用) getParameterMap()(编写框架时常用)
GET/POST请求
1.他们都可以向服务器发送数据,Get是从服务器上获取数据,Post则是传输数据给服务器进行增删改等操作。
2.GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
3.POST提交:把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据 。因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变
4. Get限制form表单数据必须为ASCII字符,而Post支持整个ISO10646字符集
注意事项
1. 如果提交FORM表单的页面与处理表单请求的Servlet程序都是由同一个人或同一个项目组开发的,那么只要在处理表单提交的Servlet程序中将传递给setCharacterEncoding方法的字符集编码设置为该表单所在页面的字符集编码即可。
2. 如果Servlet程序可以接收来自多个其他站点的FORM表单提交的数据,而每个其他站点的页面所采用的字符集编码可能各不一样,要想让Servlet程序知道FORM表单内容的字符集编码,可以在FORM表单中增加一个隐藏字段来传递当前FORM内容的字符集编码名称。
3. 只要超链接、FORM表单的action属性设置、请求转发和重定向的URL等任何一种请求路径中要包含参数,就必须对参数部分进行URL编码。对参数进行URL编码时所选择的字符集编码应尽量与当前页面的字符集编码保持一致,也可以用一个参数来指定URL编码内容的字符集编码名称。
4. 所有标准的浏览器和客户机终端都支持UTF-8编码,如果WEB服务器要能兼容处理各个国家和地区版本的浏览器所传递的FORM表单信息,网页文档应当使用UTF-8编码格式。
5. 在编写应用程序时应该注意一些隐性的字符编码错误。有些程序在输出时有编码转换错误,在读取输入时返回的字符串也有转换错误,当该程序输出它所读取到的有问题的字符串时,显示的结果可能是正常的中文字符
6. HttpServletRequest对象处理所有客户端请求的数据是最重要的java类之一,一定要重点学好。
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。