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

it2022-05-09  20

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)