响应体response和请求体request----学习笔记

response对象和request对象

response对象(响应对象)

想要获取客户端的内容,使用request对象。对客户端做出响应使用response对象

响应

响应行
	状态码:
		void setStatus(int sc)  	设置状态码
		
响应头(key:value的形式,1个key1个value/多个value)
	设置头信息
		 void setHeader(String name, String value)  1对1(经常使用)
			setHeader("aa","bb");
			setHeader("aa","cc");
			结果aa:cc

		 void setIntHeader(String name, int value) 
		 void setDateHeader(String name, long date) 值是毫秒值(一般int 秒   long  毫秒)


		 void addHeader(String name, String value) 1对多
			addHeader("aa","bb");
			addHeader("aa","cc");
			结果aa:bb,cc

		void addIntHeader(String name, int value) 
		void addDateHeader(String name, long date)  


响应体

	ServletOutputStream getOutputStream()	字节输出流
	PrintWriter getWriter()					字符输出流

案例:

重定向(登陆界面)

		登陆界面重定向
		状态码302	响应头location
		需求:登陆界面,用户名和密码的登陆界面,用户名和密码都是admin。用户名和密码都是admin	
			如果有一个不是,重定向到登陆界面,重新登陆

			//设置302的状态码
			response.setStatus(302);
			//设置地址
			response.setHeader("location", "/day10/response/login.html");

			//response提供了一个方法,可以完成重定向
			response.sendRedirect("/day10/response/login.html");

页面定时刷新(页面读秒操作)

		响应头	refresh

禁用浏览器缓存(三个头信息)

		应用:网银。页面的数据是发送变化的
		
		Cache-Control:no-cache
		Expires:-1		值是日期类型(setDateHeader)
		Pragma:no-cache				

	向页面输出中文(乱码问题)
		ServletOutputStream getOutputStream()	字节输出流

字节输出流

/*
 * 字节输出中文的乱码
 * 	输出  你好啊  是否乱码呢?
 * 		不一定乱码
 * 	解决办法
 * 		设置浏览器打开文件时所采用的编码
 * 			response.setHeader("Content-Type", "text/html;charset=UTF-8");
 * 		获取字符串byte数组时的编码和打开文件时编码一致
 * */


		PrintWriter getWriter()					字符输出流

字符输出流

/*
 * 字符输出中文是否乱码
 * 	肯定乱码
 * 		response缓冲区,编码的默认值是ISO-8859-1不支持中文
 * 设置response缓冲区编码
 * response.setCharacterEncoding("UTF-8");
 * 设置浏览器打开文件时的编码
 * 
 * */
		
	
	实现验证码

总结:response对象输出中文产生乱码

字节
	解决方案:
		设置浏览器打开文件时的编码
			response.setHeader("Content-Type", "text/html;charset=UTF-8");
		获取字符串byte数组采用的编码
			os.write("你好啊".getBytes("UTF-8"));
字符
	解决方案
		设置浏览器打开文件时的编码
			response.setHeader("Content-Type", "text/html;charset=UTF-8");
		设置response缓冲区编码
			response.setCharacterEncoding("UTF-8");

		简写方式 response.setContentType("text/html;charset=UTF-8");

实现文件下载(初级的下载)

超链接,浏览器可以解析就直接打开
弹出下载窗口
	前提条件:先准备一个文件。
	读取文件,读入到输入流中
	通过response读出到浏览器端
	设置头信息
		Content-Disposition		attachment;filename=文件名称
		以附件形式下载

验证码

现在内存中生成一张图片(画步,纸)
	BufferedImage对象			
	BufferedImage​(int width, int height, int imageType)构造方法
获取画笔对象
	Graphics getGraphics()
随机生成,但是数据是准备的
	随机生成4个字符		Random类
通过画笔对象把数字画到图片上
	drawString​(String str, int x, int y)
画干扰线
	drawLine​(int x1, int y1, int x2, int y2)
需要把内存中的图片输出到客户端上
	ImageIO.write​(RenderedImage im, String formatName, OutputStream output)

		BufferedImage
		"jpg"
		response.getOutputStream()

request对象(请求对象)

ServletRequest
		|
HttpServletRequest

获取客户机的信息

	getRemoteAddr(****)	获取ip地址
	getMethod()		获取请求方式
	getContextPath()	获取虚拟路径(默认和项目名称相同)

	getQueryString()(了解)

	/day10/demo?username=zhangsan?password=123

获取请求头信息

String getHeader(String name)
long getDateHeader(String name)
int getIntHeader(String name)

请求头
	referer		记住网页的来源
	User-Agent	判断浏览器哦
	if-modified-since	控制缓存

获取请求参数(****)

String getParameter(String name) (****)
String[] getParameterValues(String name) (****)

Map getParameterMap() (****)

Enumeration getParameterNames()  (用的比较少)

解决request乱码问题

post请求

	 * 	void setCharacterEncoding(String env) 		//设置request缓冲区的编码

get请求

	 * 		解决方案三(****):简写的方式
	 * 			username = new String(username.getBytes("ISO8859-1"),"utf-8");
	 * 		
	 * 		解决方案一:修改tomcat/conf/server.xml
	 * 			<Connector port="80"....>....URLEncoding="utf-8"/>
	 * 
	 * 		解决方案二:逆向编解码
	 * 			username = URLEncoder.encode(username,"ISO8859-1:);
	 * 			username = URLDecoder.decode(username,"utf-8");
	 * 			

利用请求域传递对象(request域对象)

域对象 
	ServletContext :服务器一启动,为每个web应用创建一个ServletContext对象,所有的
					servlet实例共享对象
	request:一次请求的范围
	
setAttribute("","")
getAttribute("")
removeAttribute("")


RequestDispatcher getRequestDispatcher(String path)
RequestDispatcher: 
	void forward(ServletRequest request, ServletResponse response) 转发的方法
	void include(ServletRequest request, ServletResponse response) (了解)包含

重定向和转发的区别(转发)

重定向两次请求,两次响应
转发是一次请求,一次响应

重定向地址发生了变化
转发地址栏没有变化

重定向不能使用request域传递数据

转发传递数据

重定向可以定向其他系统
转发只能在系统内部
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值