JavaWeb-03-Servlet-08-Http状态码

JavaWeb-03-Servlet-08-Http状态码

1.状态码介绍

1.状态码是由三位数字组成的符号。

2.Http服务器在推送响应包前,根据本次请求处理情况,将Http状态码写入到响应包里的【状态行】上。

3.如果Http服务器针对本次请求,返回了对应的资源文件,那么就通过Http状态码通知浏览器该如何处理这个结果;

如果Http服务器针对本次请求,没有返回对应的资源文件,那么就通过Http状态码向浏览器解释不能返回的原因。

2.状态码分类

2.1状态码分为五个大类

状态码的组成:[100-599],以第一个数字为区分,分为5个大类。

2.2 【1XX】

其中最具特征的是:100

作用:通知浏览器,本次返回的资源文件并不是一个独立的完整资源文件,需要浏览器在接收到响应包后,继续向Http服务器请求所依赖的其他资源文件。

例:

比如百度的页面,在发送请求时,服务器返回一个html文件。

这个html中包含很多图片等其他元素,而这些元素是作为独立的资源文件保存在网站中的,只是在html中引用它们。所以,在服务器发送响应包时,会在状态行中写入100。

浏览器在接收到响应包后,发现状态码为100,就会得知接收到的不是一个完整的资源文件。

然后会根据命令自动向服务器索要缺失的图片文件。

2.3【2XX】

最具特征的是:200

作用:通知浏览器,本次返回的资源文件是一个完整的独立资源文件。浏览器在接收到之后,不需要再索要其他关联文件。

2.4【3XX】

最具特征的是:302

作用:通知浏览器,本次返回的不是一个资源文件,而是一个资源文件地址,需要浏览器根据这个地址自动发起请求。

如何实现:

response.sendRedirect("资源文件地址"); ------> 【响应头】location

这个行为会导致服务器将302状态码写入到状态行。

演示:

新建一个网站MyWeb,新建一个Servlet接口实现类OneServlet,在该类中,重写doGet方法

在该方法中,调用响应对象,将百度地址写入响应头中的【location】属性。

package com.tsccg.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Author: TSCCG
 * @Date: 2021/08/16 16:59
 */
public class OneServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String address = "http://www.baidu.com";
        response.sendRedirect(address);
    }
}

Tomcat在推送响应包之前,发现响应体中内容为空,但是响应头的location中却存放了一个地址,
Tomcat就会把302状态码写入到响应包的状态行中

发布网站,开启Tomcat服务器,在浏览器中访问OneServlet类,打开F12,查看网络:

浏览器在接收到响应包后,发现状态码为302,就不会读取响应体中的内容。

会根据location中的地址发起第二次请求。

2.5【4XX】

2.5.1【404】

作用:通知浏览器,服务端没有定位到被访问的资源文件,无法提供帮助。

2.5.2【405】

作用:通知浏览器,在服务端已经定位到被访问的资源文件【必须是Servlet】了,但是这个Servlet对于浏览器的【请求方式】无法处理。

就比如在Servlet接口实现类里只重写了doPost方法,这个类只能处理post方式的请求。

如果此时,在浏览器中通过get方式请求访问这个Servlet接口实现类,这个类就无法处理这个请求。

Tomcat服务器就会在响应包的状态行里写入405。

2.6【5XX】

最具特征的:500

作用:通知浏览器,在服务端已经定位到了被访问的资源文件【Servlet】。但是在Servlet处理当前请求时,由于Java异常而导致处理失败。

演示:

新建一个网站MyWeb,新建一个Servlet接口实现类OneServlet,在该类中,重写doGet方法

在该方法中,放入一个异常。

package com.tsccg.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author: TSCCG
 * @Date: 2021/08/16 17:41
 */
public class OneServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Map map = new HashMap();
        int num = (int)map.get("key1");//空指针异常,int类型无法存储null
        /*
        修改方案:
        Integer num2 = (Integer)map.get("key1");//所有引用类型都可以存储null
        response.getWriter().print(num2);
        */

    }
}

posted @ 2021-08-16 17:51  TSCCG  阅读(46)  评论(0编辑  收藏  举报