zoukankan      html  css  js  c++  java
  • Java学习之Response篇

    Java学习之Response篇

    0x00 前言

    续上篇文章内容,这篇本章来更新Response。

    0x01 Response

    常用方法:

    setStatus(int sc)  : 设置响应状态码
    
    setHeader(String name, String value)   设置响应头
    
    resp.sendRedirect(String Redirect);      302跳转
    
    
    

    这里的转发和重定向不一样,来看看两者的区别。

    重定向:
    
    1. 地址栏发生变化
    2. 重定向可以访问其他站点(服务器)的资源
    3. 重定向是两次请求。不能使用request对象来共享数据
    			
    转发:
    
    1. 转发地址栏路径不变
    2. 转发只能访问当前服务器下的资源
    3. 转发是一次请求,可以使用request对象来共享数据
    

    重定向代码:

    Response类:

    
    @WebServlet("/response")
    public class Response extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setStatus(302);
            resp.setHeader("location","/demo1");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    }
    
    

    ServletDemo类:

    
    @WebServlet("/demo1")
    public class ServeletDemo1 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("已跳转");
            resp.sendRedirect("http://www.baidu.com");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    }
    
    

    writer方法使用:

    @WebServlet("/response")
    public class Response extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setCharacterEncoding("gbk");   //设置编码
            PrintWriter writer = resp.getWriter();  //获取输出对象
            writer.write("response");//输出内容
            writer.println("1235");
    
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    }
    
    

    输出字节流

    ServletOutputStream outputStream = resp.getOutputStream();
            outputStream.write("abc".getBytes());
            
    
    
    

    0x02 ServletContext

    ServletContext: 代表整个web应用,可以和程序的容器(服务器)来通信

    常用方法:

    
    request.getServletContext();   : 通过request对象获取
    this.getServletContext();     : 通过HttpServlet获取
    
    String getMimeType(String file)  : 获取MIME对象
    
    
    域对象:共享数据
    
    1. setAttribute(String name,Object value)
    2. getAttribute(String name)
    3. removeAttribute(String name)
    
    获取文件的真实(服务器)路径:
    
    String getRealPath(String path) 
    
    
    
    

    文件下载小案例:

    编写一个html页面,里面写一个超链接对图片进行下载。

    HTML:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>downlaod</title>
    </head>
    <body>
    
    <a href="/demo/img/1.jpg">图片查看</a>
    
    <a href="downloadServlet?filename=1.jpg">图片下载</a>
    
    </body>
    </html>
    
    

    downloadSerlet类:

    @WebServlet("/downloadServlet")
    public class downloadServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            this.doGet(request,response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            String filename = request.getParameter("filename");  //接收filename传参的值
                ServletContext servletContext = this.getServletContext();   //创建servletContext 对象
                String Path = servletContext.getRealPath("/img/" + filename);  //获取文件真实路径
    
            String mimeType = servletContext.getMimeType(filename);//获取mimel类型
    
    
    
    
    
            FileInputStream fis = new FileInputStream(Path);   //路径参数文件输入流对象中
            response.setHeader("content-type",mimeType);  //响应头设置mime类型
            response.setHeader("content-disposition","attachment;filename="+filename); //设置为附件类型
                ServletOutputStream outputStream = response.getOutputStream();   //获取文件输出流
                byte[] buff = new byte[1024];   //设置每次读取的字节大小
                int len =0;
                while ((len = fis.read(buff))!=-1){     
    
                    outputStream.write(buff,0,len);  
                }
    
        }
    }
    

    这里简单的一个案例就完成了。

    0x03 结尾

    这里的几个内容无非就是几个方法的一个使用,这就体现了Java面向对象语言的强大。

  • 相关阅读:
    CQUOJ 10819 MUH and House of Cards
    CQUOJ 9920 Ladder
    CQUOJ 9906 Little Girl and Maximum XOR
    CQUOJ 10672 Kolya and Tandem Repeat
    CQUOJ 9711 Primes on Interval
    指针试水
    Another test
    Test
    二分图匹配的重要概念以及匈牙利算法
    二分图最大匹配
  • 原文地址:https://www.cnblogs.com/nice0e3/p/13532864.html
Copyright © 2011-2022 走看看