Request对象
1.request对象和response对象的原理
- 原理:
1.tomcat服务器会根据请求url(http://localhost/day14/demo1)中的资源路径/demo1,创建对应的Demo01Servlet的对象
2.tomcat服务器,会创建request和response对象,request对象中封装请求消息数据
3.tomcat将request和response两个对象传递给service方法,并且调用service方法
4.程序员可以通过request对象获取请求消息数据,可以通过response对象设置响应消息数据
5.服务器在给浏览器做出响应之前,会从response对象中拿程序员设置的响应消息数据
- 重点:
1.request和response对象是由服务器创建的。我们来使用它们
2.request对象是来获取请求消息,response对象是来设置响应消息
2.request对象继承体系结构:
ServletRequest -- 接口
|
HttpServletRequest -- 接口
| 实现
org.apache.catalina.connector.RequestFacade -- 类(tomcat)
3.request功能:
1.获取请求消息数据
1.获取请求行数据
- GET /day14/demo1?name=zhangsan HTTP/1.1
- 方法:
1.获取请求方式:GET
String getMethod() String method = request.getMethod();
*2.获取虚拟目录:/day14
String getContextPath() String contextPath = request.getContextPath();
3.获取Servlet路径:/demo1
String getServletPath() String servletPath = request.getServletPath();
4.获取get方式请求参数:name=zhangsan
String getQueryString() String queryString = request.getQueryString();
*5.获取请求URI:/day14/demo1
String getRequestURI() /day14/demo1 String requestURI = request.getRequestURI();
StringBuffer getRequestURL() http://localhost/day14/demo1 StringBuffer requestURL = request.getRequestURL();
- URL:统一资源定位符 http://localhost/day14/demo1 类似中华人民共和国
- URI:统一资源标识符 /day14/demo1 类似共和国
6.获取协议及版本:HTTP/1.1
String getProtocol() String protocol = request.getProtocol();
7.获取客户机的IP地址:
String getRemoteAddr() String remoteAddr = request.getRemoteAddr();//0:0:0:0:0:0:0:1
2.获取请求头数据
- 方法:
*1.String getHeader(String name):通过请求头的名称获取请求头的值
- 演示获取请求头数据:user-agent
String agent = request.getHeader("user-agent");
//判断agent的浏览器版本
if(agent.contains("Chrome")){
//谷歌
System.out.println("谷歌来了...");
}else if(agent.contains("Firefox")){
//火狐
System.out.println("火狐来了...");
}
- 演示获取请求头数据:referer
需在web/login.html中写:<a href="/day14/demo04Servlet">demo4.....</a>
String referer = request.getHeader("referer");
System.out.println(referer);//http://localhost/day14/login.html
//防盗链
if(referer != null){
if(referer.contains("/day14")){
//正常访问
//System.out.println("播放电影...");
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("播放电影...");
}else{
//盗链
//System.out.println("想看电影吗?来优酷吧...");
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("想看电影吗?来优酷吧...");
}
2.Enumeration<String> getHeaderNames():获取所有的请求头名称
//演示获取请求头数据
//1,获取所有请求头名称
Enumeration<String> headerNames = request.getHeaderNames();
//2.遍历
while(headerNames.hasMoreElements