response && request

今天内容:
1.response
2.request

-------------------------------------
昨天内容:
	1.servlet模板
		在myeclipse10下的common下的plugins下查找文件com.genuitec.eclipse.wizards_9.0.0.me201108091322.jar
		将jar文件使用压缩工具打开,在下面有一个templates下查找Servlet.java文件
		
	2.关于默认的servlet
		如果某个Servlet的映射路径它是 "/" 那么它就是默认Servlet.
		默认的Servlet是用于处理不能处理的请求。
		
		
		在tomcat中conf/web.xml文件,我们自己工程的所有的web.xml相当于继承了这个xml.
		
		
		当我们去访问web工程下内容时,都是通过web.xml文件中的<url-pattern>去查找到资源。
		而我们在访问  a.txt  a.html时在xml文件中没有与其对应的资源,这时,是默认的servlet进行处理。
		
----------------------------------------------------------------------------
1.了解request与response
	
	request:请求对象   HttpServletRequest
	response:响应对象  HttpServletResponse
	
	
	对于请求与响应对象,是每一次请求都会创建新的对象。当响应结束,请求与响应对象自动消失。
	它们是由服务器创建的。
	
	request与response的作用:
		request可以处理所有的http请求.  简单说:request可以获取我们http请求信息。
		response可以处理所有的http响应。简单说:response可设置http响应信息。
		
2.关于request与response体系
	
--------------------------------------------------------------------------------
3.response对象.
	1.response对象,它是在service方法中接收到的。
	
	resposne对象它是用于设置http响应的。
	
	2.response操作响应信息.
		1.响应状态行的状态码   setStatus
		2.响应头  setHeader  setDateHeader  setIntHeader
		3.响应正文  是通过流操作   getOutputStream()   getWriter();
		
4.示例1
	通过response实现重定向
	
		服务器端要做两件事:
			1.状态码  302
			2.响应头   location
			
		重定时,可以访问站内资源,也可以访问站外资源。	
		
		开发中要想重定向   respons.sendRedirect(String location);
	
5.示例 2发送http头,控制浏览器定时跳转网页
	
	response.setHeader("refresh", "5;url=/day8_1/refresh.html");

	通知浏览器5秒后跳转到url指定的路径。
	
	扩展:在实际操作中,很少使用服务器端进行定时跳转,一般都是在浏览端完成。
	
	可以通过js完成数字变化
	<script type="text/javascript">
		var time=5;
		function change(){
			var span=document.getElementById("s");
			
			span.innerHTML=time;
			time--;
			
			setTimeout("change()", 1000);
		}
		
	</script>
	<meta http-equiv="refresh" content="5;url=/day8_1/index.jsp">
	
	<body "change();">
		页面会在<span id="s"></span>后跳转到index.jsp。
	</body>
-----------------------------------------------------------------------
6.示例 3发送http头,控制浏览器禁止缓存当前文档内容
	只需要在服务器端设置这三项就可能,控制缓存。
	
	在开发中要想禁用缓存,都是在显示页面上操作.也就是jsp上。
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="-1">    
	
	如果要在servlet上禁用缓存
	response.setHeader("pragma","no-cache");
	response.setHeader("cache-control", "no-cache");
	response.setDateHeader("expires", -1);
	
==============================================================
响应正文是在浏览器上真正显示的内容。
在servlet中要想操作响应正文,需要通过response对象获取输出流来操作。

getWriter()  字符流
getOutputStream(); 字节流.

问题1: 什么时候使用字节流,什么时候使用字符流?
	如果是纯文本使用字符流,如果二进制文件,使用字节流。
	
	如果只是得到信息,原样不动,不进行修改操作,这时就使用字节流。
	如果要操作的是自定义信息,这时使用字符流。
	
问题2:通过response获取的输出流它的真实类型是什么?
	ServletOutputStream 	response.getOutputStream();
	PrintWriter     response.getWriter();
	
	打印流有两个特点:
		1.可以设置自动刷新
		2.可以将信息原样输出
		
关于输出流的简单应用:servlet是可以完成显示操作的。

关于responset获取输出流在使用时的注意事项:
	1.通过response获取输出流时,字节流与字符流只能选择一个,不能一起使用。互相排斥.
	2.通过response获取输出流时,可以不关闭,tomat会自动关闭。
	
关于响应信息乱码问题:
	response.setCharacterEncoding(String code);它不能通知浏览器解析时使用什么编码。只能设置响应正文编码。
	
	response.setContentType(String mimeType);它不仅设置响应编码,也通知浏览器怎样解析。
	
	response.setHeader("content-Type","text/html;charset=utf-8");
	
------------------------------------------	
复习
	1.response与request作用
	2.request与response它体系
	3.response对象
		1.可以操作状态码  setStatus()
		2.可以操作响应头  setHeader()
		3.可以操作响应正文  通过流  getOutputStream()    getWriter()
		
	校验码:	
		作用:可以防止恶意注册.校验码它是一个图片。
		
	服务器响应回来的是一张图片,我们将这个图片显示出来。
	这张图片我们是通过程序生成的。
	
----------------------------------------------------------------------
request对象:
	作用:用于获取http请求信息.
	
	关于post请求与get请求区别?
		1.post请求可以提交大数据   get请求只能提交1kb
		2.post请求它的数据不会在浏览器上显示(安全)
		  get请求请求的参数会在浏览器上显示。
		3.post请求,请求参数是在请求正文中.
          get请求,它是资源路径上。


	=====================================
	1.关于获取请求行信息
		1.请求方式
			request.getMethod();
		2协议
			request.getProtocol();
		3.获取请求资源路径
			request.getRequestURI(); 它返回的是一个URI
			request.getRequestURL(); 它返回的是一个URL
			
			URI包含URL
				
		4.get请求时参数
			request.getQueryString();
			
		关于request获取客户机信息:
			request.getRemoteAddr();获取客户机ip地址
			request.getLocalAddress();获取服务器ip地址.
			request.getContextPath(); 获取虚拟目录名称.(就是工程名)
			
		我们通过getRequestURI()-getContextPath()就可以得到访问的资源路径。
			
			
	2.关于获取请求头信息.
		String getHeader(String name); 获取一个请求头信息
		Enumeration getHeaders(); 获取多个请求头信息
		getDateHeader();
		getIntHeader();
		
		重点头信息
			1.referer  它可以防止盗链。
			2.user-agent 可以获取浏览器信息.
			
	=====================================================
	3.关于获取请求参数
		request获取请求参数:
			1.getParameter();
				public String getParameter(String name);
				
			2.getParameterValues();
				对于值不是一个的控制,在获取时要使用这个方法,例如  checkbox
				
				public String[] getParameterValues(String name);
				
				
			3.getParameterNames();
			
				public Enumeration getParameterNames();
					它获取的是表单中所有的name值.
					
					
			4.getParameterMap();
				public Map<String,String[]> getParameterMap();
				它将请求参数的name做为了key,以输入的值或选定的值做为value。
				注意:value是一个String[];
				
	-----------------------------------------------------------------
		问题1:得到请求参数后,我们就可以直接操作吗?
			在得到请求参数后,需要对数据进行校验。这是服务器端的校验,通过java代码实现。
			
			校验无非就做两件事:
				1.非空校验
					String.trim().length()>0
				2.规则校验
					正则进行规则校验。
					
		问题2:关于中文乱码问题	
			
			乱码出现的原因:汉字在各个编码表中的码值不一样。
			
			对于我们的程序,为什么出现的乱码:页面上使用的是utf-8进行编码,而tomcat使用了iso8859-1进行了解码。
											我们通过request获取信息就是乱码。
											
			解决方案:
					将得到信息使用iso8859-1进行编码   msg.getBytes("iso8859-1");
					在使用utf-8进行解码   new String( msg.getBytes("iso8859-1"),"utf-8");
					
					
			如果请求方式是post,我们可以通过  request.setCharacterEncoding(String charsetname);	来解决乱码问题.
			
	=====================================================================
	request域对象
		
		request生命周期;
			1.当请求来时创建request对象.
			2.当响应结束时,request就销毁。
			
			每次请求都是一个新的request对象.
			
		只要是域对象就有  setAttribute()    getAttribute() removeAttribute()操作.
		
	重要概念:请求转发
			它代表的是服务器的内部跳转.
			
			
		请求转发:
			RequestDispatcher rd=request.getRequestDispatcher(String path);
			rd.forward(ServletRequest sr,ServletResponse ss);
			
	注意;对于forward或sendRedirect后,它会清空response缓冲区,那么执行任何操作就无效。
	    养成习惯在执行这两个操作后,直接加上return.
		
   ================================
	请求转发与重定向区别?
		
		1.请求转发它是服务器内部跳转,只有一次请求,一次响应。
		  重定向它是两次请求,两次响应。
		  
		2.请求转发,是服务器内部操作,它不会影响到地址的路径。
                      重定向是两次请求,地址栏会变化。
		
		3.请求转发只能在当前站点内跳转。
		  重定向可以跳出站内。
		  
		4.请求转发是由request发起的。  request.getRequestDispatcher("").forward();
		  重定向  response.sendRedirect();
		
		5.请求转发时,它的路径  "/" 代表的是当前工程.  服务器端路径
		  重定向 它的路径  "/" 代表的是服务器要目录。  客户端路径.
		  
		  request.getRequestDispatcher("/").forward(); 
		 这时的/相当于当前虚拟目录名称   http://localhost:8080/day8_2
		   response.sendRedirect("/");它相当于是  http://localhost:8080
		6.请求转发中存在request域.
		  重定向它不存在request域。
		  
====================================================================		  
	作业:
		Response
		通过response输出中文  setContextType()   getWriter()
		通过response实现请求重定向    
		
		Request
		看request文档,查看获取请求方式getMethod、请求资源getRequestURI、请求头getHeader、请求参数getParameter的方法
		如何向客户机输出不同类型的表单,以收集客户机的数据,并在服务器端获取(必做)
		获取中文数据
		理解请求转发和重定向区别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值