飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

JavaWeb知识梳理-

时间:2022-05-19  作者:Alaskaboo  

**JavaWeb相关知识 **

1、Servlet

1.1 Status Code(Http状态码)

1、1xx 请求信息

Http状态码 Http Status Code Http状态码含义中文说明
100 100 Continue 请继续请求
101 101 Switching Protocols 请切换协议
102 102 Processing 将继续执行请求

2、2xx 成功状态

这一组状态码表明客户端的请求已经被服务器端成功接收并正确解析。

Http状态码 Http Status Code Http状态码含义中文说明
200 200 OK 请求成功
201 201 Created 请求已被接受,等待资源响应
202 202 Accepted 请求已被接受,但尚未处理
203 203 Non-Authoritative Information 请求已成功处理,结果来自第三方拷贝
204 204 No Content 请求已成功处理,但无返回内容
205 205 Reset Content 请求已成功处理,但需重置内容
206 206 Partial Content 请求已成功处理,但仅返回了部分内容
207 207 Multi-Status 请求已成功处理,返回了多个状态的XML消息
208 208 Already Reported 响应已发送
226 226 IM Used 已完成响应

3、3xx 重定向状态

这一组状态码表示客户端需要采取更进一步的行动来完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。

Http状态码 Http Status Code Http状态码含义中文说明
300 300 Multiple Choices 返回多条重定向供选择
301 301 Moved Permanently 永久重定向
302 302 Found 临时重定向
303 303 See Other 当前请求的资源在其它地址
304 304 Not Modified 请求资源与本地缓存相同,未修改
305 305 Use Proxy 必须通过代理访问
306 306 (已废弃)Switch Proxy (已废弃)请切换代理
307 307 Temporary Redirect 临时重定向,同302
308 308 Permanent Redirect 永久重定向,且禁止改变http方法

4、4xx 客户端错误

这一组状态码表示客户端的请求存在错误,导致服务器无法处理。除非响应的是一个HEAD请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。

Http状态码 Http Status Code Http状态码含义中文说明
400 400 Bad Request 请求错误,通常是访问的域名未绑定引起
401 401 Unauthorized 需要身份认证验证
402 402 Payment Required -
403 403 Forbidden 禁止访问
404 404 Not Found 请求的内容未找到或已删除
405 405 Method Not Allowed 不允许的请求方法
406 406 Not Acceptable 无法响应,因资源无法满足客户端条件
407 407 Proxy Authentication Required 要求通过代理的身份认证
408 408 Request Timeout 请求超时
409 409 Conflict 存在冲突
410 410 Gone 资源已经不存在(过去存在)
411 411 Length Required 无法处理该请求
412 412 Precondition Failed 请求条件错误
413 413 Payload Too Large 请求的实体过大
414 414 Request-URI Too Long 请求的URI过长
415 415 Unsupported Media Type 无法处理的媒体格式
416 416 Range Not Satisfiable 请求的范围无效
417 417 Expectation Failed 无法满足的Expect
418 418 I\'m a teapot 愚人节笑话
421 421 There are too many connections from your internet address 连接数超限
422 422 Unprocessable Entity 请求的语义错误
423 423 Locked 当前资源被锁定
424 424 Failed Dependency 当前请求失败
425 425 Unordered Collection 未知
426 426 Upgrade Required 请切换到TLS/1.0
428 428 Precondition Required 请求未带条件
429 429 Too Many Requests 并发请求过多
431 431 Request Header Fields Too Large 请求头过大
449 449 Retry With 请重试
451 451 Unavailable For Legal Reasons 访问被拒绝(法律的要求)
499 499 Client Closed Request 客户端主动关闭了连接

5、5xx 服务器错误状态

这一组状态码说明服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。

Http状态码 Http Status Code Http状态码含义中文说明
500 500 Internal Server Error 服务器端程序错误
501 501 Not Implemented 服务器不支持的请求方法
502 502 Bad Gateway 网关无响应
503 503 Service Unavailable 服务器端临时错误
504 504 Gateway Timeout 网关超时
505 505 HTTP Version Not Supported 服务器不支持的HTTP版本
506 506 Variant Also Negotiates 服务器内部配置错误
507 507 Insufficient Storage 服务器无法存储请求
508 508 Loop Detected 服务器因死循环而终止操作
509 509 Bandwidth Limit Exceeded 服务器带宽限制
510 510 Not Extended 获取资源策略未被满足
511 511 Network Authentication Required 需验证以许可连接
599 599 Network Connect Timeout Error 网络连接超时

1.2 web服务器调用

在收到请求之后,服务器会进行如下工作:

**JavaWeb相关知识 **

1、Servlet

1.1 Status Code(Http状态码)

1、1xx 请求信息

Http状态码 Http Status Code Http状态码含义中文说明
100 100 Continue 请继续请求
101 101 Switching Protocols 请切换协议
102 102 Processing 将继续执行请求

2、2xx 成功状态

这一组状态码表明客户端的请求已经被服务器端成功接收并正确解析。

Http状态码 Http Status Code Http状态码含义中文说明
200 200 OK 请求成功
201 201 Created 请求已被接受,等待资源响应
202 202 Accepted 请求已被接受,但尚未处理
203 203 Non-Authoritative Information 请求已成功处理,结果来自第三方拷贝
204 204 No Content 请求已成功处理,但无返回内容
205 205 Reset Content 请求已成功处理,但需重置内容
206 206 Partial Content 请求已成功处理,但仅返回了部分内容
207 207 Multi-Status 请求已成功处理,返回了多个状态的XML消息
208 208 Already Reported 响应已发送
226 226 IM Used 已完成响应

3、3xx 重定向状态

这一组状态码表示客户端需要采取更进一步的行动来完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。

Http状态码 Http Status Code Http状态码含义中文说明
300 300 Multiple Choices 返回多条重定向供选择
301 301 Moved Permanently 永久重定向
302 302 Found 临时重定向
303 303 See Other 当前请求的资源在其它地址
304 304 Not Modified 请求资源与本地缓存相同,未修改
305 305 Use Proxy 必须通过代理访问
306 306 (已废弃)Switch Proxy (已废弃)请切换代理
307 307 Temporary Redirect 临时重定向,同302
308 308 Permanent Redirect 永久重定向,且禁止改变http方法

4、4xx 客户端错误

这一组状态码表示客户端的请求存在错误,导致服务器无法处理。除非响应的是一个HEAD请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。

Http状态码 Http Status Code Http状态码含义中文说明
400 400 Bad Request 请求错误,通常是访问的域名未绑定引起
401 401 Unauthorized 需要身份认证验证
402 402 Payment Required -
403 403 Forbidden 禁止访问
404 404 Not Found 请求的内容未找到或已删除
405 405 Method Not Allowed 不允许的请求方法
406 406 Not Acceptable 无法响应,因资源无法满足客户端条件
407 407 Proxy Authentication Required 要求通过代理的身份认证
408 408 Request Timeout 请求超时
409 409 Conflict 存在冲突
410 410 Gone 资源已经不存在(过去存在)
411 411 Length Required 无法处理该请求
412 412 Precondition Failed 请求条件错误
413 413 Payload Too Large 请求的实体过大
414 414 Request-URI Too Long 请求的URI过长
415 415 Unsupported Media Type 无法处理的媒体格式
416 416 Range Not Satisfiable 请求的范围无效
417 417 Expectation Failed 无法满足的Expect
418 418 I\'m a teapot 愚人节笑话
421 421 There are too many connections from your internet address 连接数超限
422 422 Unprocessable Entity 请求的语义错误
423 423 Locked 当前资源被锁定
424 424 Failed Dependency 当前请求失败
425 425 Unordered Collection 未知
426 426 Upgrade Required 请切换到TLS/1.0
428 428 Precondition Required 请求未带条件
429 429 Too Many Requests 并发请求过多
431 431 Request Header Fields Too Large 请求头过大
449 449 Retry With 请重试
451 451 Unavailable For Legal Reasons 访问被拒绝(法律的要求)
499 499 Client Closed Request 客户端主动关闭了连接

5、5xx 服务器错误状态

这一组状态码说明服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。

Http状态码 Http Status Code Http状态码含义中文说明
500 500 Internal Server Error 服务器端程序错误
501 501 Not Implemented 服务器不支持的请求方法
502 502 Bad Gateway 网关无响应
503 503 Service Unavailable 服务器端临时错误
504 504 Gateway Timeout 网关超时
505 505 HTTP Version Not Supported 服务器不支持的HTTP版本
506 506 Variant Also Negotiates 服务器内部配置错误
507 507 Insufficient Storage 服务器无法存储请求
508 508 Loop Detected 服务器因死循环而终止操作
509 509 Bandwidth Limit Exceeded 服务器带宽限制
510 510 Not Extended 获取资源策略未被满足
511 511 Network Authentication Required 需验证以许可连接
599 599 Network Connect Timeout Error 网络连接超时

1.2 web服务器调用

在收到请求之后,服务器会进行如下工作:

image

1.3 servlet注册

 <!--注册服务器name =  "HelloServet"-->
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>域名域名oServlet</servlet-class>
    </servlet>
    <!--Servlet的请求路径 urlPatterns = "/Aason",loadOnStartup = 15-->
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/Aaron</url-pattern>
    </servlet-mapping>

域名匹配文件

<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://域名/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<web-app xmlns="http://域名/xml/ns/javaee"
         xmlns:xsi="http://域名/2001/XMLSchema-instance"
         xsi:schemaLocation="http://域名/xml/ns/javaee
                      http://域名/xml/ns/javaee/web-域名"
         version="4.0"
         metadata-complete="true">
   
</web-app>

             
             
             
             
   pom依赖          
         <dependency>
            <groupId>域名let</groupId>
            <artifactId>域名let-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>域名</groupId>
            <artifactId>域名-api</artifactId>
            <version>2.3.3</version>
        </dependency>

2.2 Mapping问题

如果启动Tomcat后文件运行正常,但是单独运行文件JSP显示代码,那么就是xml文件配置了Servlet,可以在Java文件中单独写头部。如下图

image

  1. 一个Servlet可以指定一个映射路径

        <servlet-mapping>
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/Aaron</url-pattern>
        </servlet-mapping>
    
  2. 一个Servlet可以指定多个个映射路径

        <servlet-mapping>
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/Aaron</url-pattern>
           
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/Aaron1</url-pattern>
           
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/Aaron2</url-pattern>
           
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/Aaron3</url-pattern>
            
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/Aaron4</url-pattern>
            
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/Aaron5</url-pattern>
        </servlet-mapping>
    
  3. 一个Servlet可以指定通用映射路径(/*权限很高)

        <servlet-mapping>
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/Aaron/*</url-pattern>权限很高
        </servlet-mapping>
    
  4. 默认请求路径路径

<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/*</url-pattern>

</servlet-mapping>
  1. 指定一些前后缀

        <servlet-mapping>
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>*.Aaron</url-pattern>  <!-- 可以自定义后缀请求映射,但是前面*不可加/ -->
        </servlet-mapping>
    
  2. 优先级问题

    指定了固有的映射路径优先级最高,如果找不到就会走默认的请求;

    <!--Error错误服务器注册-->
    <servlet>
        <servlet-name>ErrorServlet</servlet-name>
        <servlet-class>域名域名rServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ErrorServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

2、 ServletContext

2.3.1 共享数据

​ web容器在启动的时候,他会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web容器;

  • 共享数据,保存数据,达到共享;

image

2.3.2 setAttribute转发

测试访问结果,先访问set ,获取值后在访问get,强转换String

​ String username = (String)域名ttribute("username");

package 域名let; /**
 * @Author: Alskaboo
 * @Date: 2022-03-29 19:40
 **/

import 域名let.*;
import 域名.*;
import 域名tation.*;
import 域名ception;

//@WebServlet(name = "HelloServlet", value = "/HelloServlet")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//        域名nitParameter();初始化值
//        域名ervletConfig();servlet配置
//        域名ervletContext();servlet上下文衔接对象
        ServletContext context = 域名ervletContext();

        String username = "菜菜";//数据
        域名ttribute("username", username);//键值对的形式,将数据保存在了ServletContext中,名字叫username;与后面的key名必须相同
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}


package 域名let;

import 域名域名Timestamper;

import 域名letContext;
import 域名letException;
import 域名域名ervlet;
import 域名.HttpServlet;
import 域名.HttpServletRequest;
import 域名.HttpServletResponse;
import 域名ception;
import 域名tWriter;

/**
 * @Author: Alskaboo
 * @Date: 2022-03-29 21:13
 **/

public class getServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = 域名ervletContext();
        String username = (String)域名ttribute("username");

        域名ontentType("text/html");
        域名haracterEncoding("UTF-8");
        域名riter().print("名字"+username);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}



<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://域名/xml/ns/javaee"
         xmlns:xsi="http://域名/2001/XMLSchema-instance"
         xsi:schemaLocation="http://域名/xml/ns/javaee http://域名/xml/ns/javaee/web-域名"
         version="4.0"
         metadata-complete="true">
    <!--注册服务器name =  "HelloServet"-->
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>域名域名oServlet</servlet-class>
    </servlet>
    <!--Servlet的请求路径 urlPatterns = "/Aason",loadOnStartup = 15-->
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/Aaron</url-pattern>
    </servlet-mapping>

    <!--Error错误服务器注册-->
    <servlet>
        <servlet-name>getc</servlet-name>
        <servlet-class>域名域名ervlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getc</servlet-name>
        <url-pattern>/getc</url-pattern>
    </servlet-mapping>
</web-app>

2.3.3 请求转发

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = 域名ervletContext();
        域名equestDispatcher("/Demo_02").forward(req,resp);//请求转发的路径并且调用forward实现请求转发
    }

image

重定向:A找B要东西,B没有,但是B告诉A,C那里有你需要的,那么A直接根据路径找C(路径改变);

2.3.4 读取资源文件

properties类:

生成在classpath路径中

    <!--在build中配置resources,来防止我们资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

3、 HttpServletResponse

web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse;

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要给客户端响应一些信息:找HttpservletResponse

2.4.1. 简单分类

负责向浏览器发送数据的方法

servletoutputstream getoutputstream() throws IOException;
Printwriter getwriter() throws IOException;

Http相应

Cache-Control: private    缓存控制
Connection:Keep-Alive     连接
Content-Encoding:gzip     编码
Content-Type:text/html    类型

2.4.2 文件下载

  1. 向浏览器输出消息
  2. 下载文件
    1. 要获取下载文件的路径
    2. 下载的文件名是啥?
    3. 设置想办法让浏览器能够支持下载我们需要的东西
    4. 获取下载文件的输入流
    5. 创建缓冲区
    6. 获取OutputStream对象
    7. 将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端!
    8. 关流
package 域名n;

import 域名letException;
import 域名letOutputStream;
import 域名.HttpServlet;
import 域名.HttpServletRequest;
import 域名.HttpServletResponse;
import 域名;
import 域名InputStream;
import 域名ception;
import 域名ncoder;

/**
 * @Author: Alskaboo
 * @Date: 2022-03-30 17:39
 **/
public class FileServelet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //1. 要获取下载文件的路径,realpath是用来将参数path所指的相对路径转换成绝对路径,然后存于参数resolved_path所指的字符串数组或指针中的一个函数
//        String realPath = 域名ervletContext().getRealPath("/域名");
        String realPath = "F:\\Code\\ideacode\\JavaClassWeb\\Maven02\\response_01\\src\\main\\resources\\域名";
        域名tln("下载文件路径:" + realPath);
    //2. 下载的文件名是啥?
        String fielname = 域名tring(域名IndexOf("\\") + 1);//直接截取字符串,截取最后一个"/"的下一个就是那个文件名
    //3. 设置想办法让浏览器能够支持下载我们需要的东西
        域名eader("Content-Disposition", "attachment;filename=" + 域名de(fielname,"UTF-8"));
    //4. 获取下载文件的输入流
        FileInputStream fileInputStream = new FileInputStream(realPath);
    //5. 创建缓冲区
        int len = 0;
        byte[] buffer = new byte[1024];
    //6. 获取OutputStream对象
        ServletOutputStream outputStream = 域名utputStream();
    //7. 将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端
        while ((len = 域名(buffer)) != -1) {
            域名e(buffer, 0, len);
        }
    //8.关闭流
        域名e();
        域名e();

    }

    <servlet>
        <servlet-name>filedown</servlet-name>
        <servlet-class>域名Servelet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>filedown</servlet-name>
        <url-pattern>/filedown</url-pattern>
    </servlet-mapping>

2.4.3 验证码功能

  1. 验证怎么来的?

    • 前端实现

    • 后端实现,需要用到Java的图片类,生产一个图片

package 域名n;

import 域名eIO;
import 域名letException;
import 域名.HttpServlet;
import 域名.HttpServletRequest;
import 域名.HttpServletResponse;
import 域名.*;
import 域名域名eredImage;
import 域名ception;
import 域名om;

/**
 * @Author: Alskaboo
 * @Date: 2022-03-30 22:06
 **/
public class ImageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //如何让浏览器5秒自动刷新一次
        域名eader("refresh", "3");
        //在内存中创建一个图片
        BufferedImage bufferedImage = new BufferedImage(80, 20, 域名_INT_RGB);
        //得到一张图片
        Graphics2D graphics = (Graphics2D) 域名raphics();
        //设置图片颜色
        域名olor(域名e);
        域名Rect(0, 0, 80, 20);
        //给图片写数据
        域名olor(域名);
        域名ont(new Font(null, 域名, 20));//BOLD粗体
        域名String(setRandom(), 0, 20);
        //告诉浏览器这个请求用图片的形式打开
        域名ontentType("image/jpg");
        //网站是有缓存的,不让浏览器缓存
        域名ateHeader("expires", -1);
        域名eader("Cache-Control", "no-Cache");
        域名eader("Pragma", "no-Cache");
        //把图片写给浏览器
        boolean write = 域名e(bufferedImage, "jpg", 域名utputStream());


    }

    //生成随机数
    private String setRandom() {
        Random random = new Random();
        String num = 域名Int(999_9999) + " ";
        StringBuffer stringBuffer = new StringBuffer();//StringBuffer 字符串拼接
        for (int i = 0; i < 7 - 域名th(); i++) {
            域名nd("0");//保证输出七位数,不足用0填充
        }
        String s = 域名ring() + num;
        return num;
    }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

    <servlet>
        <servlet-name>ImageServlet</servlet-name>
        <servlet-class>域名eServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ImageServlet</servlet-name>
        <url-pattern>/img</url-pattern>
    </servlet-mapping>

2.4.4 重定向

定义:B一个web资源收到客户端A请求后,B他会通知A客户端去访问另外一个web资源,这个过程叫重定向

image

常见场景:

  • 用户登录

测试

&l
标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。