Servlet之Request对象与Response对象

概述

用户发送了一个HTTP请求到Web容器(一个Web应用对应一个Web容器),Web容器创建了一个HttpServletRequest的request对象,将用户发送的请求数据封装到了这个request对象当中;然后它又创建了一个HttpServletRequest的response对象,这个对象中还没有数据;之后又调用了HttpServlet这个servlet的service方法,将之前创建的request和response对象传了进去。service方法需要获取请求方式,由于用户是GET请求,所以调用doGet方法。doGet方法做处理的时候会尝试从request中拿数据,然后将处理完的逻辑结果放到response对象中。最后处理完了,控制权回到Web容器(方法结束,控制权要转回方法的调用者,比如A方法调用B方法,B方法执行完毕后控制权回到A方法),Web容器销毁request和response对象,在销毁response对象之前,Web容器会将response对象中的数据拿出来返回给用户。

由此我们可以看出request和response的生命历程:当一个请求到达Web容器,会创建request和response对象,处理这次请求所用的时间就是它存活的时间,在应答离开Web容器之前,request和response对象会被销毁。

Request

Request类抽象的是用户的一次请求,一个Request对象,与一个实际的用户请求相对应。

继承结构

ServletrRequest--通用的接口,定义了一个request应该具有的基本的方法,HttpServletRequest在ServletRequest基础上,增加很多和Http协议相关的方法

Request对象中,封装了一次用户请求的全部信息。

下面将介绍Request的API,主要是获取用户请求的信息,以及一些额外的功能。

1.获取用户相关信息

这里我们顺便说一下:我们在myeclipse中配置tomcat的时候选择的运行方式是Debug模式,所以我们在修改完Servlet之后不需要重启服务器,但是在修改完之后不要立即访问Servlet,我们需要给服务器一点时间让它来重新编译java文件来生成class文件。

getRequestURL方法 -- 返回客户端发出请求的完整URL

//由于该方法返回的是一个StringBuffer对象
//所以需要用toString来转为字符串
String url=req.getRequestURL().toString();

getRequestURI方法 -- 返回请求行中的资源名部分(请求行中间的部分)

String uri=req.getRequestURI();

getQueryString方法 -- 返回请求行中的参数部分(只限于GET请求)

String queryStr=req.getQueryString();

getRemoteAddr方法 -- 返回发出请求的客户机的IP地址(不同浏览器返回的ip地址的格式不同,但是都代表本机)

String ip=req.getRemoteAddr();

getMethod方法 -- 返回客户机的请求方式(GET请求或者POST请求)

String method=req.getMethod();

getContextPath方法*** -- 获得当前web应用的虚拟目录名称(用这个方法来动态获取虚拟路径,当项目需要修改虚拟路径时,这样就不需要在代码中修改路径了,所以不建议在代码中将路径写死

String contextPath=req.getContextPath();

2.获取请求头信息(学习查看源码中对方法的解释)

getHeader(name)方法 --- String(name表示请求头的名字,我们通过这个方法来获取请求头中的信息)

//查看源码发现解释说case insensitive(大小写不敏感)
//所以我们这里写host也可以获取Host请求头中的信息
String host=req.getHeader("host");

getHeaders(String name)方法 --- Enumeration<String>(同一个请求头如果有多个值,会以多个键相同而值不同的键值对显示,由于不同的浏览器显示的格式不同,所以在一个请求头有多个值的情况下用getHeader()拿不到所有数据,所以有了getHeaders()这个方法)

getHeaderNames方法 --- Enumeration<String>(获取所有的请求头的名字,这里我们顺便获取一下对应请求头的信息)

Enumeration<String> names= req.getHeaderNames();
		while(names.hasMoreElements()){
			String name=names.nextElement();
			System.out.println("name="+name+",value="+req.getHeader(name));
		}

getIntHeader(name)方法  --- int(如果你确定你要的请求头的值是int类型的值,就可以直接用这个方法得到int类型的请求头数据)

getDateHeader(name)方法 --- long(日期对应毫秒)(如果你确定你的请求头的值是日期类型,就可以用这个方法)

3.获取请求参数***

给大家提供一个param.html文件用来测试

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
	</head>
	<body>
		<h1>GET提交</h1>
		<form action="/day09/servlet/你写的servlet的名字" method="G
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值