zoukankan      html  css  js  c++  java
  • response

    一、response

    * 功能:设置响应消息
        1. 设置响应行
            1. 格式:HTTP/1.1 200 ok
            2. 设置状态码:setStatus(int sc) 
        2. 设置响应头:setHeader(String name, String value) 
            
        3. 设置响应体:
            * 使用步骤:
                1. 获取输出流
                    * 字符输出流:PrintWriter getWriter()
    
                    * 字节输出流:ServletOutputStream getOutputStream()
    
                2. 使用输出流,将数据输出到客户端浏览器


    二、response重定向

    1. 完成重定向
            * 重定向:资源跳转的方式
            * 代码实现:
                //1. 设置状态码为302
                response.setStatus(302);
                //2.设置响应头location
                response.setHeader("location","/day15/responseDemo2");
                //简单的重定向方法
                response.sendRedirect("/day15/responseDemo2");
    
            * 重定向的特点:redirect
                1. 地址栏发生变化
                2. 重定向可以访问其他站点(服务器)的资源
                3. 重定向是两次请求。不能使用request对象来共享数据
            * 转发的特点:forward
                1. 转发地址栏路径不变
                2. 转发只能访问当前服务器下的资源
                3. 转发是一次请求,可以使用request对象来共享数据
            
            * forward 和  redirect 区别
    
    ---------------------------------------
    package cn.itcast.web.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * 重定向
     */
    
    @WebServlet("/responseDemo1")
    public class ResponseDemo1 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            System.out.println("demo1........");
    
    
    
            //访问/responseDemo1,会自动跳转到/responseDemo2资源
           /* //1. 设置状态码为302
            response.setStatus(302);
            //2.设置响应头location
            response.setHeader("location","/day15/responseDemo2");*/
    
            request.setAttribute("msg","response");
    
            //动态获取虚拟目录
            String contextPath = request.getContextPath();
    
            //简单的重定向方法
            response.sendRedirect(contextPath+"/responseDemo2");
            //response.sendRedirect("http://www.itcast.cn");
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }
    
    
    ------------------------------
    package cn.itcast.web.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/responseDemo2")
    public class ResponseDemo2 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("demo2222222........");
    
            Object msg = request.getAttribute("msg");
            System.out.println(msg);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }


    路径写法:

    1. 路径分类
        1. 相对路径:通过相对路径不可以确定唯一资源
            * 如:./index.html
            * 不以/开头,以.开头路径
    
            * 规则:找到当前资源和目标资源之间的相对位置关系
                * ./:当前目录
                * ../:后退一级目录
        2. 绝对路径:通过绝对路径可以确定唯一资源
            * 如:http://localhost/day15/responseDemo2        /day15/responseDemo2
            * 以/开头的路径
    
            * 规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出
                * 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
                    * 建议虚拟目录动态获取:request.getContextPath()
                    * <a> , <form> 重定向...
                * 给服务器使用:不需要加虚拟目录
                    * 转发路径


    三、服务器输出数据到浏览器

    1、服务器输出字符数据到浏览器

    * 步骤:
        1. 获取字符输出流
        2. 输出数据
    
    * 注意:
        * 乱码问题:
            1. PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1
            2. 设置该流的默认编码
            3. 告诉浏览器响应体使用的编码
    
            //简单的形式,设置编码,是在获取流之前设置:
            response.setContentType("text/html;charset=utf-8");
    
    ----------------------------
    package cn.itcast.web.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/responseDemo4")
    public class ResponseDemo4 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            //获取流对象之前,设置流的默认编码:ISO-8859-1 设置为:GBK
           // response.setCharacterEncoding("utf-8");
    
            //告诉浏览器,服务器发送的消息体数据的编码。建议浏览器使用该编码解码
            //response.setHeader("content-type","text/html;charset=utf-8");
    
            //简单的形式,设置编码
            response.setContentType("text/html;charset=utf-8");
    
            //1.获取字符输出流
            PrintWriter pw = response.getWriter();
            //2.输出数据
            //pw.write("<h1>hello response</h1>");
            pw.write("你好啊啊啊 response");
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }


    2、服务器输出字节数据到浏览器

    * 步骤:
        1. 获取字节输出流
        2. 输出数据
    
    ------------------------------
    package cn.itcast.web.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/responseDemo5")
    public class ResponseDemo5 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
    
            //1.获取字节输出流
            ServletOutputStream sos = response.getOutputStream();
            //2.输出数据
            sos.write("你好".getBytes("utf-8"));
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }


    3、验证码

    1. 本质:图片
    2. 目的:防止恶意表单注册
    
    --------------------------------
    package cn.itcast.web.servlet;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;
    
    @WebServlet("/checkCodeServlet")
    public class CheckCodeServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            int width = 100;
            int height = 50;
    
            //1.创建一对象,在内存中图片(验证码图片对象)
            BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    
    
            //2.美化图片
            //2.1 填充背景色
            Graphics g = image.getGraphics();//画笔对象
            g.setColor(Color.PINK);//设置画笔颜色
            g.fillRect(0,0,width,height);
    
            //2.2画边框
            g.setColor(Color.BLUE);
            g.drawRect(0,0,width - 1,height - 1);
    
            String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
            //生成随机角标
            Random ran = new Random();
    
            for (int i = 1; i <= 4; i++) {
                int index = ran.nextInt(str.length());
                //获取字符
                char ch = str.charAt(index);//随机字符
                //2.3写验证码
                g.drawString(ch+"",width/5*i,height/2);
            }
    
    
            //2.4画干扰线
            g.setColor(Color.GREEN);
    
            //随机生成坐标点
    
            for (int i = 0; i < 10; i++) {
                int x1 = ran.nextInt(width);
                int x2 = ran.nextInt(width);
    
                int y1 = ran.nextInt(height);
                int y2 = ran.nextInt(height);
                g.drawLine(x1,y1,x2,y2);
            }
    
    
            //3.将图片输出到页面展示
            ImageIO.write(image,"jpg",response.getOutputStream());
    
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }
    
    
    --------------------------------
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <script>
            /*
                分析:
                    点击超链接或者图片,需要换一张
                    1.给超链接和图片绑定单击事件
    
                    2.重新设置图片的src属性值
    
             */
        window.onload = function(){
            //1.获取图片对象
            var img = document.getElementById("checkCode");
            //2.绑定单击事件
            img.onclick = function(){
                //加时间戳
                var date = new Date().getTime();
    
                img.src = "/day15/checkCodeServlet?"+date;
            }
    
        }
    
    
        </script>
    
    
    </head>
    <body>
    
    
        <img id="checkCode" src="/day15/checkCodeServlet" />
    
        <a id="change" href="">看不清换一张?</a>
    
    </body>
    </html>


    四、ServletContext对象

    1. 概念

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


    2. 获取

    1. 通过request对象获取
        request.getServletContext();
    
    2. 通过HttpServlet获取
        this.getServletContext();
    
    ----------------------------------
    package cn.itcast.web.servletcontext;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/servletContextDemo1")
    public class ServletContextDemo1 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            /*
    
                ServletContext对象获取:
                    1. 通过request对象获取
                        request.getServletContext();
                    2. 通过HttpServlet获取
                        this.getServletContext();
             */
            
            //1. 通过request对象获取
            ServletContext context1 = request.getServletContext();
            //2. 通过HttpServlet获取
            ServletContext context2 = this.getServletContext();
    
            System.out.println(context1);
            System.out.println(context2);
    
            System.out.println(context1 == context2);//true
    
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }


    3. 功能

    1. 获取MIME类型:
        * MIME类型:在互联网通信过程中定义的一种文件数据类型
            * 格式: 大类型/小类型   text/html        image/jpeg
    
        * 获取:String getMimeType(String file)  
    
    -----------------------------
    package cn.itcast.web.servletcontext;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/servletContextDemo2")
    public class ServletContextDemo2 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            /*
    
                ServletContext功能:
                   1. 获取MIME类型:
                    * MIME类型:在互联网通信过程中定义的一种文件数据类型
                        * 格式: 大类型/小类型   text/html        image/jpeg
    
                    * 获取:String getMimeType(String file)
                    2. 域对象:共享数据
                    3. 获取文件的真实(服务器)路径
             */
            
            //2. 通过HttpServlet获取
            ServletContext context = this.getServletContext();
    
            //3. 定义文件名称
            String filename = "a.jpg";//image/jpeg
    
    
            //4.获取MIME类型
            String mimeType = context.getMimeType(filename);
            System.out.println(mimeType);
    
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }
    
    
    
    2. 域对象:共享数据
        1. setAttribute(String name,Object value)
        2. getAttribute(String name)
        3. removeAttribute(String name)
    
        * ServletContext对象范围:所有用户所有请求的数据
    
    -----------------------------
    package cn.itcast.web.servletcontext;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/servletContextDemo3")
    public class ServletContextDemo3 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            /*
    
                ServletContext功能:
                   1. 获取MIME类型:
    
                    2. 域对象:共享数据
                    3. 获取文件的真实(服务器)路径
             */
            
            //2. 通过HttpServlet获取
            ServletContext context = this.getServletContext();
    
            //设置数据
            context.setAttribute("msg","haha");
    
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }
    
    -----------------------------
    package cn.itcast.web.servletcontext;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/servletContextDemo4")
    public class ServletContextDemo4 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            /*
    
                ServletContext功能:
                   1. 获取MIME类型:
    
                    2. 域对象:共享数据
                    3. 获取文件的真实(服务器)路径
             */
            
            //2. 通过HttpServlet获取
            ServletContext context = this.getServletContext();
    
            //获取数据
            Object msg = context.getAttribute("msg");
            System.out.println(msg);
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }
    
    
    3. 获取文件的真实(服务器)路径
        1. 方法: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);
    
    -----------------------------
    package cn.itcast.web.servletcontext;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.File;
    import java.io.IOException;
    
    @WebServlet("/servletContextDemo5")
    public class ServletContextDemo5 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            /*
    
                ServletContext功能:
                   1. 获取MIME类型:
    
                    2. 域对象:共享数据
                    3. 获取文件的真实(服务器)路径
             */
            
            // 通过HttpServlet获取
            ServletContext context = this.getServletContext();
    
    
            // 获取文件的服务器路径
            String b = context.getRealPath("/b.txt");//web目录下资源访问
            System.out.println(b);
           // File file = new File(realPath);
    
            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);
    
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }
  • 相关阅读:
    16. 3Sum Closest
    17. Letter Combinations of a Phone Number
    20. Valid Parentheses
    77. Combinations
    80. Remove Duplicates from Sorted Array II
    82. Remove Duplicates from Sorted List II
    88. Merge Sorted Array
    257. Binary Tree Paths
    225. Implement Stack using Queues
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/11607540.html
Copyright © 2011-2022 走看看