/*
*response对象
*想要获取客户端的内容,使用request对象,对客户端做出响应使用response对象
*响应:
*响应行
*状态码:void setStatus(int sc) 设置状态码
*响应头
*设置头信息
*void setHeader(name,value);
*eg:setHeader("aa","bb")
aa:bb
*void setIntHeader(name,value);
*void setDateHeader(name,value);int value是秒,long value是毫秒
*void addHeader(name,value);
*eg:setHeader("aa","cc");
aa:bb,cc,即add是追加。
*响应体
*ServletOutputStream getOutputStream() 字节输出流
*PrintWriter getWriter() 字符输出流
*案例:
*重定向:状态码302 响应头location
*登录页面重定向
// 设置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
*向页面输出中文
*字节输出流:不一定会产生乱码
*设置浏览器打开文件时采用的编码
response.setHeader("Content-type","text/html;charset=utf-8" );
*获取字符串byte数组时编码和打开文件时编码一致
*字符输出流:一定会产生乱码,因为response缓冲区编码,默认ISO-8859-1,这个编码方式不支持中文,所以一定乱码
*解决:
*设置response缓冲区编码
response.setCharacterEncoding("utf-8");
*设置浏览器打开文件时的编码
response.setHeader("Content-type","text/html;charset=utf-8" );
*简写,下面这一句等于上面的两句
response.setContentType("text/html;charset=utf-8");
*输出
response.getWriter().write("大家好");
*实现文件的下载
*超链接,浏览器可以解析直接打开
*弹出下载窗口
*前提条件:先准备一个文件
通过输入流读取文件
通过response读出到浏览器端
设置头信息:Content-Disposition attachment;filename=文件名
*以附件的形式打开
*实现验证码
*在内存中生产一张图片(画布)。
*BufferedImage(width,height,imageType)
*获取画笔
*Graphics getGraphics()
*随机生产数字或者字母的组合,但是数据是准备好的
*随机生产四个字符 Math.Random类
*通过画笔对象数据画到图片上
*drawString()
*画干扰线
*drawLine()
*需要把内存中的图片输出到客户端
*ImafeIO.write()
*request对象
*ServletRequest
|
HttpServletReqsuest
*获取客户机信息
****getRemoteAddr 获取IP地址
*用法:网上的游客用户投票,根据id判断是否投过票
****getMethod() 获取请求方式
****getContextPath() 获取虚拟路径(默认是项目名称)
*getQueryString()(不常用)
*获取请求头信息
*String getHeader(name)
*long getDateHeader(name)
*int getIneHeader(name)
*请求头:
*referer 当前网页的来源
*User-Agent 判断是什么浏览器
*if-modified-since 控制缓存
*获取请求参数
*String getParameter(name)
*String [] getParameterValues(name):复选框,可以选多个值
*Map getParameterMap():
*Enumeration getParameterNames():用得少
*request中文乱码
*post:
*response.setCharacterEncoding("utf-8"); 设置request缓冲区的编码
*但是必须在获取前端数据之前做这个操作,不然无效
*get:
*修改tomcat/conf/server.xml下面的服务器编码方式(不要轻易修改这个)
*必须有修改服务器配置文件的权限
*逆向编解码
*username=URLEncoder.encode(username,"iso8859-1");
*username=URLDecoder.decode(username,"utf-8");
*简写形式,string构造方式
*username=new String(username.getBytes("iso8859-1"),"utf-8");
*利用请求域传递对象(request域对象)
*域对象:ServletContext:
request:一次请求的范围
*getAttribute()
*setAttribute()
*removeAttribute()
*重定向和转发的区别
*getRequestDispatcher();返回的是一个RequestDispatcher对象
*RequestDispatcher:
*forward()
*include()
*1)转发:是在请求的资源没有的情况下,服务器内部帮你从其他地方找到资源,给予客户端响应,
期间客户端只发了一次请求(304)
*2)重定向:是在请求的资源没有的情况下,服务器返回客户端一个信息,里面包含客户端需要资源的地址,然后客户端自行发起请求去寻找资源
期间客户端需要两次请求(302)
*区别:
*重定向两次请求,两次响应
转发一次请求,一次响应
*重定向地址栏发生改变
转发地址栏没有发生改变
*转发可以通过request传递数据
重定向不能使用request传递数据
*重定向可以定向到其他系统
转发只能转到自己系统内部
*/
笔记--servlet基础复习2
最新推荐文章于 2024-09-24 15:24:57 发布