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面向对象语言的强大。

  • 相关阅读:
    POJ
    POJ
    HDU——1027Ignatius and the Princess II(next_permutation函数)
    HDU——1106排序(istringstream的使用、STLvector练习)
    HDU——2054A==B?
    HDU——2087剪花布条
    HDU——2064汉诺塔III
    HDU——2068RPG的错排(错排公式)
    HDU——1789Doing Homework again(贪心)
    HDU——2067小兔的棋盘(卡特兰数&递推DP)
  • 原文地址:https://www.cnblogs.com/nice0e3/p/13532864.html
Copyright © 2011-2022 走看看