美文网首页
J2EE--HttpServletResponse

J2EE--HttpServletResponse

作者: RicherYY | 来源:发表于2020-08-21 15:12 被阅读0次
    1. 什么是Responese对象?
    2. 怎么使用Response对象?
    3. 重定向
    4. ServletContext对象
    5. 文件下载

    1. 什么是Responese对象?

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

    服务器-->客户端 的返回的响应就是response对象。

    2. 怎么使用Response对象?

    2.1 设置响应内容

    @WebServlet("/failServlet")
    public class FailServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
            //设置编码
            resp.setContentType("text/html;charset=utf-8");
    
            //获取存放数据
            //String data =(String) req.getAttribute("shareData");
            //设置响应内容
            resp.getWriter().write("登录失败,用户名或密码错误");
        }
    }
    

    3. 重定向

    重定向之前页面设置

    @WebServlet("/demo")
    public class ServletDemo extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.sendRedirect("/JavaWEB/servletDemo2");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            this.doGet(req,resp);
        }
    }
    

    重定向完成后页面设置

    @WebServlet("/servletDemo2")
    public class ServletDemo2 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //设置响应内容
            response.getWriter().write("欢迎,demo2");
        }
    }
    

    效果展示

    image.png

    处理中文乱码设置

    //设置响应编码格式
    response.setContentType("text/html;charset=utf-8");
    
    image.png

    4.ServletConetext对象

    4.1 什么是ServletConetext对象?

    ServletContext用来存放全局变量,每个Java虚拟机每个Web项目只有一个ServletContext,这个ServletContext是由Web服务器创建的。所以ServletContext的作用范围是整个应用。

    4.2 怎么使用ServletConetext对象?

    示例代码

    ServletDemo1
    @WebServlet("/demo1")
    public class ServletDemo1 extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置响应编码
            resp.setContentType("text/html;charset=utf-8");
            //设置servletContext对象
            ServletContext servletContext = this.getServletContext();
            //共享数据
            servletContext.setAttribute("code","999");
            //设置提示信息
            resp.getWriter().write("demo1的code信息已经写入");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doGet(req,resp);
        }
    
    ServletDemo2
    @WebServlet("/demo2")
    public class ServletDemo2 extends HttpServlet {
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置编码格式
            resp.setContentType("text/html;charset=utf-8");
           
            ServletContext servletContext = this.getServletContext();
    
            String code = (String)servletContext.getAttribute("code");
    
            //设置响应内容
            resp.getWriter().write("demo中的code信息为:"+code);
        }
    }
    

    运行结果

    image.png image.png

    4.3 ServletConetext有什么功能?

    1. 多个Servlet通过ServletContext对象实现数据共享
    2. 实现Servlet的请求转发
    3. 利用ServletContext对象读取资源文件
    String getRealPath(String path)  
    String b = context.getRealPath("/b.txt");//web目录下资源访问
    System.out.println(b);
            
    String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
    System.out.println(c);
            
    String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
    System.out.println(a);
    

    5.文件下载

    文件下载需求:

    1. 页面显示超链接
    2. 点击超链接后弹出下载提示框
    3. 完成图片文件下载

    分析:

    1. 超链接指向的资源如果能够被浏览器解析,则在浏览器中展示,如果不能解析,则弹出下载提示框。不满足需求
    2. 任何资源都必须弹出下载提示框
    3. 使用响应头设置资源的打开方式:

    content-disposition:attachment;filename=xxx

    步骤:

    1. 定义页面,编辑超链接href属性,指向Servlet,传递资源名称filename
    2. 定义Servlet:
      1. 获取文件名称
      2. 使用字节输入流加载文件进内存
      3. 指定response的响应头: content-disposition:attachment;filename=xxx
      4. 将数据写出到response输出流
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>youbao三岁</title>
    </head>
    <body>
    
    <a href="/Web/download?filename=2019.jpg">图片</a>
    <a href="/Web/download?filename=2018.mp4">视频</a>
    
    </body>
    </html>
    
    @WebServlet("/download")
    public class DownloadServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doGet(req, resp);
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //1.获取请求参数,文件名称
            String filename = req.getParameter("filename");
            //2.使用字节输入流加载文件进内存
            //2.1找到文件服务器路径
            ServletContext servletContext = this.getServletContext();
            String realPath = servletContext.getRealPath("/WEB-INF/classes/" + filename);
            //2.2用字节流关联
            FileInputStream fis = new FileInputStream(realPath);
    
            //3.设置response的响应头
            //3.1设置响应头类型:content-type
            String mimeType = servletContext.getMimeType(filename);//获取文件的mime类型
            resp.setHeader("content-type",mimeType);
            //3.2设置响应头打开方式:content-disposition
    
            resp.setHeader("content-disposition","attachment;filename="+filename);
            //4.将输入流的数据写出到输出流中
            ServletOutputStream sos = resp.getOutputStream();
            byte[] buff = new byte[1024 * 8];
            int len = 0;
            while((len = fis.read(buff)) != -1){
                sos.write(buff,0,len);
            }
    
            fis.close();
        }
    }
    

    相关文章

      网友评论

          本文标题:J2EE--HttpServletResponse

          本文链接:https://www.haomeiwen.com/subject/kdwcjktx.html