服务器端以/开始就代表当前项目名
客户端必须以 /项目名/资源 才能定位到资源

软件与软件之间,以字符为标准传递,传递字节,接收端自己按原来的编码集编码之后再按照自己的编码集解码编码(如果没有对应字符,将会丢失数据)
软件与文件或者浏览器之间,以字节为标准传递,传递字节,接收端直接将字节按照自己的编码集进行编码(不会丢失数据)
数据丢失发生在解码的时候

servlet一定要初始化之后才能对里面的对象赋值,否则对象为null
  加载----初始化----执行----消亡
如何实现数据共享
  方案1(了解):静态变量(耗费内存,特别是服务器端)
  方案2(ServletContext):
    A、服务器为我们提供了一个内置的 ServletContext 对象
      this.getServletContext();
    B、这个对象可以实现不同Servlet 之间的数据共享
    C、设置数据的API: setAttribute("键","值");
      获取数据的API: getAttribute("键");
      删除数据的API:removeAttribute("键");
      such as:浏览量统计(每一个客服端请求时的servlet得到的都是用的同一个ServletContext)

response
  作用:服务器通过这个对象向浏览器发送数据
  servlet向tomcat传递消息:
    response.setCharacterEncoding("UTF-8"); //告诉Tomcat用UTF-8进行编码

  response设置响应行:
    A:设置状态码:(默认是又tomcat管理)
      setStatus(int i); //响应行出现的状态码
      setError(int i,String s); //响应行出现的错误提示的状态码,后面是错误提示的信息

    response设置响应头:
      A:设置的响应头最好是HTTP协议规定的,不然没有具体用处
      B:setHeader("键","值")
        多次设置,键重复时,会覆盖
      C:addHeader("键","值")
        多次设置,追加
        such as: 键:refresh
              值:秒数;url=路径 ---- 以项目名开始(值中出现多个属性时用分号)
              键:content-type //简化版:response.setContentType("text/html;charset=utf-8");
              值:text/html;charset=utf-8

    response 设置响应体
      getWriter() ---- 获取字符流
      getOutputStream() ---- 获取字节流
        注意:
          1、二者不能同时开启
          2、流可以不关,因为是 Tomcat 管理的(自己创建的流需要关闭)

文件的下载操作:
  提交到服务器的时候:在url后面直接用get方式的形式跟上要下载的文件名
  <a href="/day3504/DownLoad?name=hello.txt">hello.txt</a>
  在Servlet中解析请求行:
    String fileName = request.getParameter("name");
    byte[] buffer = fileName.getBytes("ISO-8859-1");
    fileName = new String(buffer,"UTF-8");
    System.out.println(fileName);
  设置响应头,文件的类型
    response.setHeader("Content-Type", this.getServletContext().getMimeType("/" + fileName));
  设置响应头,告诉浏览器使用正确的打开方式,不要直接显示,而是执行下载操作
    response.setHeader("Content-Disposition", "attachment; filename =" + fileName);
向浏览器传送文件名时的编码乱码问题:(文件名需要单独编码解码)
  eclipse:GBK
  Tomcat:unicode
  浏览器:GBK
    eclipse和tomcat之间,以字符为标准
    Tomcat与浏览器之间,以字节为标准
      1:byte[] buffer = fileName.getBytes("GBK");
        String newName = new String(buffer,"ISO-8859-1");
        response.setHeader("Content-Disposition", "attachment; filename =" + newName);
      2:调用DownLoadUtils
        String agent = request.getHeader("user-agent");
        String downName = DownLoadUtils.getName(agent, fileName);
        response.setHeader("Content-Disposition", "attachment; filename =" + downName);

项目中的文件读写操作:
  获取读取当前文件的流:(获取到相对路径中文件的读取流)
    InputStream in = this.getServletContext().getResourceAsStream("/" + fileName);("/"定位到当前webapps目录)
  获取字节输出流
    ServletOutputStream out = response.getOutputStream();
  读的同时写
    byte[] buffer2 = new byte[1024];
    int length;
    while((length = in.read(buffer2)) != -1){
      out.write(buffer2, 0, length);
    }
    in.close();
  读取绝对路径中的文件
    String s = this.getServletContext().getRealPath("文件"); //得到的是Tomcat服务器下的文件路径,而不是eclipse下的文件路径
    FileInputStream in = new FileInputStream("s");

获取文件读取流时的三种方法:
  1:获取绝对路径的文件读取流
    FileInputStream in = new FileInputStream("绝对路径");
  2:获取WebContent中文件的读取流
    InputStream in = this.getServletContext().getResourceAsStream("webContent下的绝对路径")
  3:获取src目录下的文件读取流(常用于读取配置文件)
    类名.class.getClassLoader().getResourceAsStream("src目录下的文件名");

验证码中点击一次验证码更换一次图片:(原理,点击一次图片由servlet重新动态发送一次图片)
图片是通过服务器穿过来的
  <script type="text/javascript">
    $(function(){
      $("#show").click(function(){
        $(this).prop("src","/day3505/Code?test=" + new Date()); //new Date():让每一次访问时提交的数据变化,不读取本地缓存
      });
    });
  </script>

response和ServletContext和乱码问题的更多相关文章

  1. Response ServletContext 中文乱码 Request 编码 请求行 共享数据 转发重定向

    Day35  Response 1.1.1 ServletContext概念 u 项目的管理者(上下文对象),服务器启动时,会为每一个项目创建一个对应的ServletContext对象. 1.1.2  ...

  2. Response与ServletContext对象

    HTTP协议: 请求消息:客户端发送给服务器端的数据 数据格式: 请求行: 格式: 请求方式 请求url 请求协议/版本 请求头:告诉服务器,当前访问的浏览器自身的一些信息 格式: 请求头名称: 请求 ...

  3. PrintWriter out = response.getWriter() 输出中文乱码问题

    HttpServletResponse response = ServletActionContext.getResponse();        response.setCharacterEncod ...

  4. response.getWriter().write()产生乱码

    Struts1中通过action, return到页面的时候,如果代码中使用到response.getWriter().write(),那么有可能jsp页面中汉字会变成乱码.百度上有人说改为respo ...

  5. 解决response.setHeader("Content-disposition" 中文乱码问题

    Content-Disposition中文乱码 Response.setHeader(”Content-Disposition”, “attachment; filename=” + fileName ...

  6. Response attachment filename 中文乱码

    Response.setHeader("Content-Disposition", "attachment; filename=" + fileName+&qu ...

  7. response.getWriter().write("中文");乱码问题

    起初遇到这个问题,网上几乎所有的建议都是: response.setHeader("Content-type", "text/html;charset=UTF-8&quo ...

  8. 关于使用response.addHeader下载中文名乱码问题

    介绍下我项目中遇到的问题:在数据库导出Excel文件的过程中,导出文件中文名始终异常,最终结果发现需要在response.addHeader 中的 filename = "xxxx" ...

  9. 解决response在controller返回乱码的解决方式

    乱码的代码 @RequestMapping(value = "/readbook", method = RequestMethod.GET) 加入 produces = " ...

随机推荐

  1. 研究一下phpspider

    官方文档 1.下载 官方github下载地址: https://github.com/owner888/phpspider 下载地址可能无法访问,这里提供一个网盘下载地址: 链接: https://p ...

  2. 用scp实现多服务器文件分发

    需要安装expect环境 yum install expect -y vi ip.txt #主机地址池 192.168.1.1 192.168.1.2 192.168.3.3 #如果是同一网段也可以不 ...

  3. Newline required at end of file but not found

    在启动vue项目中遇到 解决方法 在main.js文件的最后一行加一个空行就可以了

  4. 在VMware下创建windows2008虚拟机

    1.创建新的虚拟机 打开VMware软件,点击主页内创建新的虚拟机 2.进入新建虚拟机向导 点击典型,点击下一步 3.在下一步中单击稍后安装操作系统 点击下一步 4.选择操作系统类型 客户机操作系统选 ...

  5. 使用Pandas读取大型Excel文件

    import os import pandas as pd HERE = os.path.abspath(os.path.dirname(__file__)) DATA_DIR = os.path.a ...

  6. 微服务-技术专区-链路追踪(pinpoint)-部署使用

    https://naver.github.io/pinpoint/ https://github.com/naver/pinpoint 背景 随着项目微服务的进行,微服务数量逐渐增加,服务间的调用也越 ...

  7. 分布式-技术专区-Redis并发竞争key的解决方案详解

    Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:缓存击穿.缓存雪崩.缓存和数据一致性,以及今天要谈到的缓存并发竞争.这里的并发指的是多个redis的clie ...

  8. 函数节流及手机端点击延迟200ms解决方法

    不论是H5开发还是微信小程序,手机端点击都会有300ms的延迟,在实际项目中,会到此频繁触发,如有接口会频繁的请求接口,除了会引起不必要的多次请求还会导致数据有问题.下面有二种方式来处理这个问题: 1 ...

  9. Java中super关键字的位置

    1.子类的构造函数如果要引用super的话,必须把super放在函数的首行. 例如: class Base  { Base()  {  System.out.println("Base&qu ...

  10. Shell 脚本的编码规范