Response和ServletContext对象

Http响应协议

1. 服务器端向浏览器端发送的数据
2. 响应
    1. 响应行
        1. 格式:协议/版本 响应的状态码 状态码的描述 ——————> HTTP/1.1 200 OK
        2. 状态码都是三位数字 分类:1xx-5xx
        3. 1xx未完成(服务器端没有完成客户端的数据,等待)
        4. 2xx 成功
        5. 3xx重定向 --->(302) 304-->(访问缓存)
        6. 4xx 客户端出现错误 404 请求路径没有对应的资源,405 请求方法错误, get或者post出错
        7.  5xx 服务器错误 服务器出现异常


    2. 响应头
        1. 常见的响应头: Content——Type: text/html ; charset= utf-8-->服务器告诉客户端本次响应的格式和编码 
        2. Content-dispostion :服务器告诉客户端以什么样的格式打开响应数据 
        3. 默认值:in-line在当前页面打开 attachment 以附件的形式打开
    3. 响应空行

    4. 响应体:HTML页面的内容(传输的数据)

Response对象

1. 设置响应消息
2. response.setStatus(int sc) 设置响应码
3. 设置响应体:获得输出流 (字节输出流 和字符输出流)
4. getWriter() getOutputStream()

重定向(response.sendRedirect("资源路径"))

1. 告诉浏览器 状态码(302)
2.告诉浏览器的资源的路径 

` System.out.println("demo1 ");
    //设置状态码
   resp.setStatus(302);
   //设置响应头告诉资源路径
   resp.setHeader("location","/responseDemo2");
   /**
    *@描述 
    *@参数  只需要一个资源路径
    *@返回值  
    */
   resp.sendRedirect("/responseDemo2");
}

`

重定向的特点

# 转发的特点 #
1. 转发的路径不变 
2. 只能访问服务器内资源
3. 转发是一次请求
4. 

## 从定向的特点 ##

1.重定向地址栏发生变
2.可以访问任何资源路径
3.是两次请求 (不能使用request域对象 共享数据)】

路径的写法

·1. 路径的分类:
    1. 相对路径:不能够不可以确定唯一的资源,不以/开头 规则:当前资源和目标资源的相对的位置关系--->(./资源路径)(./可以省略不写)
    2. 绝对路径:通过绝对路径可以确定唯一资源 以/开头的就会绝对路径
        1. 给浏览器要加上虚拟目录(项目名)(重定向SendRedirect())
        2. 给服务器就不用(加上虚拟目录)(转发 forward)
        3.动态获取虚拟目录:request.getContextPath();

Response 输出字符数据

  1. 获取字符输出流

`@WebServlet(value = "/ResponseDemo5")
public class ResponseDemo5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("gbk");
    ServletOutputStream sos = response.getOutputStream();
    sos.write("helle".getBytes());
    sos.write("中国".getBytes());

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doPost(request, response);`

验证码

  1. 本质:图片 目的:是为了防止恶意注册
  2. 步骤:
    1. 创建一个画图的对象 2.美化图片 3.输出到客户端

    `@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);
    }
    }`

ServletContext对象 #

1. 代表整个web应用,可以程序地容器(服务器)进行通信
2. 功能:
    1. 获取MIME类型:可以用servletContext获取
        1. 在互联网通信过程中定义的一种文件数据类型()各种格式 text/html image/jpeg  
        2. String getMimeType(String file() (拓展名)
        3. 通过拓展名得到文件的类型
    2.域对象
    3.获取文件的真实路径 
3。获取ServletContext对象--- request.getServletContext() 或者 通过, getServletContext()方法直接获取对象

获取方式

`    @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //两种获取方式
    ServletContext servletContext = this.getServletContext();
    ServletContext servletContext1 = req.getServletContext();
    System.out.println(servletContext1==servletContext);// true
    System.out.println("----");
    System.out.println(servletContext);
    System.out.println("___");
    System.out.println(servletContext1);
}

`

获取MIME类型


`@WebServlet("/servletContextDemo2")
 public class servletContextDemo2 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //两种获取方式

    ServletContext context = this.getServletContext();
    String filename ="a.jpg";
    String mimeType = context.getMimeType(filename);
    System.out.println(mimeType);//image/jpeg
}

`## 获取文件的服务器路径 ##


` @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext context = this.getServletContext();
    String path = context.getRealPath("/b.txt");//web目录下的资源访问
    System.out.println(path);
    //F:\IDEAWORKSPACE\ResponseDemo\out\artifacts\ResponseDemo_war_exploded\b.txt
    System.out.println("-------------");
    String realPath = context.getRealPath("WEB-INF/c.txt");
    System.out.println(realPath);//访问WEB—INF目录下的
    //F:\IDEAWORKSPACE\ResponseDemo\out\artifacts\ResponseDemo_war_exploded\WEB-INF\c.txt
    System.out.println("))))))))))))))) ");
    //获取到src路径下的资源路径—————— 放在WEB-INF目录下的classes目录xia
    String realPath1 = context.getRealPath("WEB-INF/classes/a.txt");
    System.out.println(realPath1);
    //F:\IDEAWORKSPACE\ResponseDemo\out\artifacts\ResponseDemo_war_exploded\WEB-INF\classes\a.txt
}

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值