Request类
在实现了servlet的方法后,可以看到service方法里面有Request和Response
Request和Response的原理
图解:
request对象和response对象的原理
- request和response对象是由服务器创建的。我们来使用它们
- request对象是来获取请求消息,response对象是来设置响应消息
Request的体系结构
ServletRequest -- 接口
| 继承
HttpServletRequest -- 接口
| 实现
org.apache.catalina.connector.RequestFacade 类
(tomcat编写,通过这个类来创建Request对象并传递给service方法)
首先我们可以试一下,继承了HttpServlet后,实现他的doGET方法,发现有一个req,我们尝试输出他这个req
得到如下
Request对象的作用
获取请求消息数据
获取请求行数据
GET /day14/demo1?name=abc HTTP/1.1
- 方法:
- 获取请求方式 :GET
String getMethod()
- (常用)获取虚拟目录:/request
String getContextPath()
- 获取Servlet路径: /demo1
String getServletPath()
- 获取get方式请求参数:name=zhangsan
String getQueryString()
- (常用)获取请求URI:/request/demo1
String getRequestURI()
:/request/demo1StringBuffer getRequestURL()
:http://localhost/request/demo1- URL:统一资源定位符 : http://localhost/request/demo1 例如中华人民共和国
- URI:统一资源标识符 :/request/demo1 例如共和国
- 获取协议及版本:HTTP/1.1
String getProtocol()
- 获取客户机的IP地址:
String getRemoteAddr()
- 获取请求方式 :GET
@WebServlet("/demo1")
public class Demo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求方式
String method = req.getMethod();
System.out.println(method);
// 获取虚拟目录
String contextPath = req.getContextPath();
System.out.println(contextPath);
// 获取Servlet目录
String servletPath = req.getServletPath();
System.out.println(servletPath);
// 获取get方式请求的参数
String queryString = req.getQueryString();
System.out.println(queryString);
// 获取请求URI
String requestURI = req.getRequestURI();
System.out.println(requestURI);
// 获取请求URL
StringBuffer requestURL = req.getRequestURL();
System.out.println(requestURL);
// 获取用户的ip
String remoteUser = req.getRemoteUser();
System.out.println(remoteUser);
}
}
获取请求头数据
方法:
- (常用)
String getHeader(String name)
:通过请求头的名称获取请求头的值 Enumeration<String> getHeaderNames()
:获取所有的请求头名称,封装了一下
@WebServlet