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

  • 相关阅读:
    【转】Dalvik虚拟机的启动过程分析
    【转】Android 之ActivityThead、ActivityManagerService 与activity的管理和创建
    【转】应用程序的入口是ActivityThread
    【转】Android中Application类用法
    【转】360浏览器极速与兼容模式的解释
    操作系统学习(七)--操作系统之外设显示器和键盘
    操作系统学习(六)-- 虚拟内存(页面置换算法)
    操作系统学习(五)-- 操作系统之内存管理
    操作系统学习(四)-- 操作系统之进程同步和死锁
    数据库系统学习(八)-SQL语言与数据库完整性和安全性
  • 原文地址:https://www.cnblogs.com/nice0e3/p/13532864.html
Copyright © 2020-2023  润新知