继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

response以及request概述

慕UI4062818
关注TA
已关注
手记 348
粉丝 97
获赞 552

一、HttpServletResponse response————响应对象

1、重定向

1)格式

//设置重定向响应状态码302

response.setStatus(302); 

//设置响应头 location

response.setHeader("location","http://127.0.0.1:8080/MyServlet/index.jsp");

//上两部合成一步

response.sendRedirect("http://www.baidu.com");

2)重定向特点

a:两次请求,两次响应。存在请求域中信息不可再用;

b:地址栏发生变化

c:可以跳转到外表站点的资源,也可以跳转到内部站点的资源(如上)

2、设置响应头

setHeader(String headName,String headValue); 设置响应头的名称和值

setDateHeader(String name,long date); 设置日期头

setIntHeader(String name,int count); 设置数字头

3、设置响应体————响应的是数据

PrintWriter getWriter();发送字符数据的对象

ServletOutputStream getOutputStream();发送字节数据的对象

4、设置服务器对字符流的编码

//作用:设置字符打印输出流的编码,并告诉浏览器用相应的编码去解码

response.setCharacterEncoding("utf-8");

response.setHeader("content-type","text/html;charset=utf-8");

//以上两个方法可以合二为一

response.setContentType("text/html;charset=utf-8");

egg:简易验证码

int width = 100;		int height = 50;		//1.创建图片		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);		//2.修饰图片		//2.1设置背景色		Graphics g = image.getGraphics();//获取画笔		g.setColor(Color.PINK);//设置颜色		g.fillRect(0, 0, width, height);//填充背景色		//2.2画边框		g.setColor(Color.BLUE);		g.drawRect(0, 0, width - 1, height - 1);		//2.3写入验证码		g.setColor(Color.RED);		String msg = "abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789";		Random ran = new Random();		for (int i = 1; i <= 4; i++) {			int index = ran.nextInt(msg.length());//获取msg的随机角标			g.drawString(String.valueOf(msg.charAt(index)), width/5 * i, height/2);		}		//2.4画干扰线		g.setColor(Color.GREEN);		//g.drawLine(0, 0, width, height);		for (int i = 0; i < 5; i++) {			int x1 = ran.nextInt(width);			int x2 = ran.nextInt(width);			int y1 = ran.nextInt(height);			int y2 = ran.nextInt(height);			g.drawLine(x1, y1, x2, y2);		}		//3.将图片数据写入response输出流中		ImageIO.write(image, "jpg", response.getOutputStream());		//jsp:<img src="/MyServlet/mydemo"></img>   //页面上的路径和重定向需要加上项目名称


二、HttpServletRequest request————请求对象

1、请求转发

request.getRequestDispatcher("/虚拟路径").forward(request, response);//服务器内部跳转路径,不需要加项目名称

特点:

1)一次请求一次响应

2)地址栏不发生变化

3)只能访问内部站点资源

2、获取请求行

//请求行:请求方式 访问的资源 协议/版本 egg:GET /myhtml.html HTTP/1.1

request.getMethod();//获取请求方式

request.getContextPath();//获取项目名称

request.getRequestURI();//获取URI

request.getRequestURL();//获取URL

request.getRemoteAddr();//获取IP地址

request.getQueryString();//获取请求参数

request.getProtocol();//获取协议版本

3、获取请求头

request.getHeader("user-agent");//获取请求头的值

request.getDateHeader(name);//获取日期头

request.getIntHeader(name)//获取数字头

4、获取请求体

只有post才有请求体:放请求参数

获取字符数据: getReader(); 返回一个高效的字符流 我们通过一次读取一行的 方法来获取请求参数数据  然后 拆分字符串获取我们想要的数据

获取字节数据: getInputStream();用于上传文件

//一般获取请求参数的方法:

request.getParameter("key");  通过请求参数的名称来获取值

request.getParameterValues("hobby"); 通过请求参数的名称,来获取值的数组 一般用于复选框

request.getParameterMap();  获取所有参数的map集合

//有两个beanutils的jar包可以之间把map集合封装成Javabean对象

Map map = request.getParameterMap();

User user = new User();

BeanUtils.populate(user, map);

request.getParameterNames(); 获取所有参数的名称 枚举 不常用

5、处理中文乱码问题

request.setCharacterEncoding("utf-8");

6、操作请求域对象内数据

request 是一个请求对象,用来封装请求消息;

还是一个域对象 既然是域对象 就可以在他的范围内共享数据

request.setAttribute("name","zhangsan");

request.getAttribute("name");

request.removeAttribute("name");

//ServletContext()在一个资源间共享数据

this.getServletContext().setAttribute(key,value);


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP