[原创]java WEB学习笔记08:HttpServletRequest & ServletRequest
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.HttpServletRequest 简介
1)Servlet API 中定义的 ServletRequest 接口类用于封装请求消息
2)HttpServletRequest 是专用于HTTP协议的ServletRequest 子接口,它用于封装 HTTP 请求消息
3)在 service() 方法内部调用 HttpServletRequest 对象的各种方法来获取请求消息。每次请求都会调用servece()方法
2.获取请求行的相关信息:ServletRequest,HttpServletRequest
本部分值列举出部分的API,详细参考 ServletRequest ,HttpServletRequest
1)ServletRequest
获取参数
① ServletRequest:封装了请求信息,可以获取到任何的请求信息。这两个接口的实现类都是服务器给予实现的,并在服务器调用service方法时候传入
② String getParameter(String name):根据请求参数的名字,返回参数值
③ String[] getParameterValues(String name):根据请求参数的名字,返回请求参数对应的字符串数组。在例如“checkbox”比较方便
④ Map getParametrMap():返回请求参数的键值对:key->参数名 值:->参数值,String类型数组
⑤ Enumeration getParameterNames():返回参数名对应的enumeration对象,类似于ServletConfig(或ServletContext )的getInitPrameterNames()方法
2)HttpServletRequest
获取请求行的相关信息
① String getMethod():返回HTTP请求消息中的请求方式
② String getRequestURI():返回请求行中的资源名部分。
③ String getQueryString():返回请求行中的参数部分。
④ String getProtocol():返回请求行中的协议名和版本
⑤ String getContextPath():返回请求资源所属于的WEB应用程序的路径
⑥ String getPathInfo():返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头
⑦ String getPathTranslated():返回URL中的额外路径信息所对应的资源的真实路径
⑧ String getServletPath():Servlet的名称或Servlet所映射的路径
获取网络连接信息
① String getRemoteAddr():返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。 (*)
② String getRemoteHost():返回发出请求的客户机的完整主机名,即“pc1.atguigu.com”这种格式
③ String getRemotePort():返回发出请求的客户机所使用的网络接口的端口号
④ String getLocalAddr():返回WEB服务器上接收当前请求的网络接口的IP地址
⑤ String getLocalName():返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。
⑥ String getLocalPort():返回WEB服务器上接收当前请求的网络接口的端口号
⑦ String getServerName():返回当前请求所指向的主机名
⑧ String getServerPort():返回当前请求所连接的服务器端口号
⑨ String getScheme():返回请求的协议名,例如http、https或ftp
⑩ String getRequestURL():返回客户端发出请求时的完整URL
获取请求头信息
getHeader方法
getHeaders方法
getHeaderNames方法
getIntHeader方法
getDateHeader方法
getContentType方法
getContentLength方法
getCharacterEncoding方法
请求域属性
存储在ServletRequest对象中的对象称之为请求域属性,属于同一个请求的多个处理模块之间可以通过请求域属性来传递对象数据
setAttribute方法 getAttribute方法 removeAttribute方法 getAttributeNames方法
代码一:login.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <title>Insert title here</title>
6 </head>
7 <body>
8 <form action="LoginServlet" method="get">
9
10 user:<input type="text" name="user"/>
11 password:<input type="password" name="password"/>
12
13 <br><br>
14
15 interesting:
16 <input type="checkbox" name="interesting" value="reading">Reading
17 <input type="checkbox" name="interesting" value="game">Game
18 <input type="checkbox" name="interesting" value="party">Party
19 <input type="checkbox" name="interesting" value="shopping">Shopping
20 <input type="checkbox" name="interesting" value="sport">Sport
21 <input type="checkbox" name="interesting" value="tv">Tv
22 <input type="checkbox" name="interesting" value="run">Run
23
24 <input type="submit" value="submit"/>
25
26 </form>
27 </body>
28 </html>
代码二:web.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
5 id="WebApp_ID" version="3.0">
6
7 <servlet>
8 <servlet-name>LoginServlet</servlet-name>
9 <servlet-class>com.jason.javaweb.LoginServlet</servlet-class>
10 </servlet>
11
12 <servlet-mapping>
13 <servlet-name>LoginServlet</servlet-name>
14 <url-pattern>/LoginServlet</url-pattern>
15
16 </servlet-mapping>
17 </web-app>
代码三:LoginServlet.java
1 package com.jason.javaweb;
2
3 import java.io.IOException;
4 import java.util.Arrays;
5 import java.util.Enumeration;
6 import java.util.Map;
7
8 import javax.servlet.Servlet;
9 import javax.servlet.ServletConfig;
10 import javax.servlet.ServletException;
11 import javax.servlet.ServletRequest;
12 import javax.servlet.ServletResponse;
13 import javax.servlet.http.HttpServletRequest;
14
15 public class LoginServlet implements Servlet {
16
17 @Override
18 public void destroy() {
19
20 }
21
22 @Override
23 public ServletConfig getServletConfig() {
24 // TODO Auto-generated method stub
25 return null;
26 }
27
28 @Override
29 public String getServletInfo() {
30 // TODO Auto-generated method stub
31 return null;
32 }
33
34 @Override
35 public void init(ServletConfig arg0) throws ServletException {
36 // TODO Auto-generated method stub
37
38 }
39
40 @Override
41 public void service(ServletRequest request, ServletResponse response)
42 throws ServletException, IOException {
43 // 获取请求参数 String getParameter(String name):根据请求参数的名字,返回参数值
44 String user = request.getParameter("user");
45 String password = request.getParameter("password");
46 System.out.println(user + " , " + password);// eee , eee
47
48 // String[] getParameterValues(String name):根据请求参数的名字,返回请求参数对应的字符串数组
49 String[] interestings = request.getParameterValues("interesting");
50 for (String interesting : interestings) {
51 System.out.println("checked-->" + interesting);
52 // checked-->reading checked-->game
53 }
54
55 // Enumeration
56 // getParameterNames():返回参数名对应的enumeration对象,类似于ServletConfig(或ServletContext)的getInitPrameterNames()方法
57 Enumeration<String> names = request.getParameterNames();
58 while (names.hasMoreElements()) {
59 String name = names.nextElement();
60 String value = request.getParameter(name);
61 System.out.println("~~~" + name + ":" + value);
62 // ~~~user:eee ~~~password:eee ~~~interesting:reading
63 }
64
65 // Map getParametrMap():返回请求参数的键值对:key->参数名 值:->参数值,String类型数组
66 Map<String, String[]> map = request.getParameterMap();
67 for (Map.Entry<String, String[]> entry : map.entrySet()) {
68 System.out.println("**" + entry.getKey() + " : "
69 + Arrays.asList(entry.getValue()));
70 // **user : [eee]
71 // **password : [eee]
72 // **interesting : [reading, game]
73 }
74
75 HttpServletRequest httpServletRequest = (HttpServletRequest) request;
76
77 // 获取请求的URL
78 String url = httpServletRequest.getRequestURI();
79 System.out.println("url : " + url);// url : /javaWEB/LoginServlet
80
81 // 获取请求方法
82 String method = httpServletRequest.getMethod();
83 System.out.println("method : " + method);// method : GET
84
85 // 获取字符串儿=
86 String queryString = httpServletRequest.getQueryString();
87 System.out.println(queryString);// user=eee&password=eee&interesting=reading&interesting=game
88
89 // 获取请求的servlet的映射路径
90 String servletPath = httpServletRequest.getServletPath();
91 System.out.println(servletPath);// /LoginServlet
92
93 }
94
95 }