今天同昨天的一样,又加深的学习了用idea做javaweb项目,笔记部分如下

中文乱码解决方案

POST:设置输入流的编码

req.setCharacterEncoding("UTF-8");

 

通用方式(GET/POST):先解码,再编码

new String(username.getBytes(ISO-8859-1),"UTF-8");

 

请求转发

request.getRequestDispatcher("/资源B路径").forward(request,response);

 

请求转发间共享数据

存储数据

 request.setAttribute("name","刘柏");

获取数据

request.getAttribute("name");

删除数据

request.removeAttribute("name")

 

请求转发特点

  • 浏览器地址栏路径不发生改变

  • 只能转发到当前服务器的内部资源

  • 一次请求,可以在转发的资源间使用request共享数据

 

重定向

 

特点:

  • 浏览器地址栏路径发生改变

  • 可以重定向到任意位置的资源(服务器内部,外部均可)

  • 两次请求,不能在多个资源使用request共享数据

response.sendRedirect("资源B的路径");

 

路径问题
  • 浏览器使用:需要加虚拟目录(项目访问路径)

  • 服务端使用:不需要加虚拟目录

 

Response响应字符数据

获取字符输出流(resp.getWriter())

        response.setContentType("text/html;charset=utf-8");
       PrintWriter writer = response.getWriter();
       writer.write("你好~");
       writer.write("<h1>aaa</h1>");

 

  • 该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭

    • 会出现中文乱码问题:原因通过Response获取的字符输出流默认编码:ISO-8859-1

 

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

 

字节输出流

IOUtils工具类使用

1.pom.xml加入(导入坐标)

    <dependency>
     <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>2.6</version>
   </dependency>

2.使用

 IOUtils.copy(输入流,输出流);

 

获取数据

response.getOutputStream();

 

写数据

outputStream.write(字节数据);

 

        //读取文件
       FileInputStream fis = new FileInputStream("C:/Users/bai/Desktop/image/00.png");
       //获取response字节输出流
       ServletOutputStream os = response.getOutputStream();
       //完成流的copy
       IOUtils.copy(fis,os);

       fis.close();