java_web初学笔记之<Servlet中的request和response对象详解>

Web服务器收到客户端的http请求,会针对 每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

request和response对象既然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。


请求行、请求头、请求体包含在request对象中

①获得客户机请求头
getHeader(string name)方法:String 
getHeaders(String name)方法:Enumeration 
getHeaderNames()方法 
②获得客户机请求参数(客户端提交的数据)
getParameter(String)方法
getParameterValues(String name)方法
getParameterNames方法+BeanUtils框架

③获得客户机信息
getRequestURL方法返回客户端发出请求时的完整URL。
getRequestURI方法返回请求行中的资源名部分。
getQueryString 方法返回请求行中的参数部分。
getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
getRemoteAddr方法返回发出请求的客户机的IP地址。
getRemoteHost方法返回发出请求的客户机的完整主机名。
getRemotePort方法返回客户机所使用的网络端口号。
getLocalAddr方法返回WEB服务器的IP地址。
getLocalName方法返回WEB服务器的主机名。


同时request是一个域对象,转发时域有效。(转发就是将请求转给另外一个地方处理,所以使用request对象)

转发方法

request.getRequestDispatcher(path).forward(request,response);   (由于转发时服务器内部的事情,所以path路径/表示web应用)此request对象未发生变化,为同一个request对象,而response对象是去掉了响应体的对象。


状态行、响应头、响应体包含在response对象中

①设置状态

setStatus(int sc);

②设置响应头

setHeader(name, value);

③输出响应体

getPrintWriter().write();


重定向方法

response.sendRedirect(location)  (给浏览器响应,让浏览器重新向服务器提交location地址的请求   由于客户端访问的,所以/表示webapps



-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

中文乱码问题:



request:浏览器向web服务器提交HTTP请求,HTTP请求以浏览器默认编码方式编码成字节传送(HTTP请求包含请求行,请求头,请求体),web服务器默认以ISO8859-1解码方式解码。①对于请求体(POST方法),调用setCharacterEncoding()方法(该方法只对请求体有效)通知服务器以指定的解码方式解码(替代了默认的解码方式) ②对于请求头(GET方法),解决方法是先让服务器采用默认的ISO8859-1编码,然后获得该请求头中的参数,然后再用ISO8859-1编码,最后用指定解码方式解码正确恢复参数。


response:response对象向web服务器输出字符,字符输出流默认采用ISO8859-1编码。①对于响应体,调用setContentType("text/html;charset=UTF-8")来指定web服务器编码方式,同时也通知了浏览器端以该种方式解码。②对于响应头,只能调用URLEncoding.encode()方法将中文变成%ab%cd%ef...的形式,然后以默认的编码方式编码,浏览器端会正确显示。


request:

public class Request extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//获取HTTP请求参数,因为是GET请求,所以参数不在请求体,不能使用setCharacterEncoding()方法。
		//因此必须对于刚开始获得的参数先用ISO8895-1编码再用UTF-8解码的方式获得原来的参数。
		String virtualName = request.getParameter("name");
		String realName = new String(virtualName.getBytes("ISO8859-1"), "UTF-8");
		
		//设置服务器编码方式及浏览器端解码方式
		response.setContentType("text/html;charset=UTF-8");
		response.getWriter().write(realName);
		
	}

}

response:

public class Response extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//设置为下载方式,默认下载名称为小王.jpg。由于这是响应头信息,因此只能使用URLEncoder.encode()方法
		String name = URLEncoder.encode("小王.jpg", "UTF-8");
<span style="white-space:pre">		</span>//fileName指的是默认下载的名称
		response.setHeader("Content-Disposition", "attachment;fileName="+name);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值