http请求和响应(包含状态码)+过滤器

news2024/11/27 16:33:10

目录

一、http协议概述

二、http请求

三、http响应

 四、过滤器


一、http协议概述

1.http:超文本传输协议,是用于在网络上传输数据的应用层协议。是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程,基于TCP/IP通信协议来传递数据,属于应用层的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

二、http请求

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。

1.请求包括:请求行,请求头,请求体。

2.请求方式:get,post。

3.get方式请求:

        超链接,表单(form)默认提交方式。

4.post方式请求:

        表单(form)指定方式: method=“post”。

5.get方式与post方式的区别:

get方式主要是从服务器获取信息;post主要是想服务器提交信息;
get方式在通过URL提交数据,数据在URL中可以看到;post方式,数据放置在请求体中提交。
get方式提交的数据大小受限制一般1kb(不同浏览器也会有不同);而post则没有此限制。

示例

        启动服务器,复制网页地址栏的地址,将localhost 改为自己电脑的ip地址,自己电脑的ip地址可以在cmd中输入ipconfig查找,将改后的地址可以作为表单提交的转换页面或超链接。

这里启动的服务器和JavaEE程序基于文章,可详细查看web搭建服务器端+创建web后端项目详细步骤_小俱的一步步的博客-CSDN博客icon-default.png?t=N4P3https://blog.csdn.net/weixin_63541561/article/details/130786740?spm=1001.2014.3001.5501

创建web后端程序(servlet程序搭建)_小俱的一步步的博客-CSDN博客icon-default.png?t=N4P3https://blog.csdn.net/weixin_63541561/article/details/130901114?spm=1001.2014.3001.5501

 创建前端页面:

        下面超链接和表单提交后的页面都为http://192.168.138.11:8080/webBack2/login

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<a href="http://192.168.138.11:8080/webBack2/login?name=张三age=18">访问</a>
		<form action="http://192.168.138.11:8080/webBack2/login" method="post">
			用户<input type="text" name="account" value=""/><br />
			密码<input  type="password" name="password" value=""/><br />
			性别
			<input type="radio" name="gender" value="男"/>男
			<input type="radio" name="gender" value="女"/>女<br />
			爱好
			<input  type="checkbox" name="hobby" value="打篮球"/>打篮球
			<input  type="checkbox" name="hobby" value="跳"/>跳
			<input  type="checkbox" name="hobby" value="rap"/>rap<br />
			<input type="submit"/>
			
		</form>
	</body>
</html>

         点击页面“访问”

         get方式请求,将信息显示在地址栏中:

         填写表单: 

        提交后,鼠标右击检查 在Network中可查看提交数据

 

三、http响应

可以在service方法中响应,但太单一,使得响应方式只有一种,而使用doPost方法和doGet方法更加灵活。

用getWriter()获得一个PrintWriter字符输出流输出数据;

response.setContetnType("text/html;charset=utf-8");方法可以同时设定response所使用的字符集编码和浏览器打开所用的字符集编码。

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("Content-Type","text/html;charset=utf-8");
        PrintWriter pt = resp.getWriter();
        pt.write("<h1>你好客户端</h1>");
        System.out.println("service");
    }

doPost方法和doGet方法:

    @Override   
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求
        req.setCharacterEncoding("utf-8");
        String name = req.getParameter("account");
        String psd = req.getParameter("password");
        System.out.println(name);
        System.out.println(psd);
        String sex = req.getParameter("gender");
        System.out.println(sex);
        String[] hobbys = req.getParameterValues("hobby");
        System.out.println(Arrays.toString(hobbys));
//        Enumeration<String> parameterNames = req.getParameterNames();
//        while (parameterNames.hasMoreElements()){
//            System.out.println(parameterNames.nextElement());
//        }


//获得请求头中的数据和请求行中数据
        System.out.println(req.getMethod());
        System.out.println(req.getRequestURL());//请求地址
//        System.out.println(req.getScheme());
//        System.out.println(req.getServerName());//服务器自己的名字
//        System.out.println(req.getProtocol());//请求协议
        System.out.println(req.getRemoteAddr());//客户的ip
        System.out.println(req.getRemotePort());//客户端口

        //
        System.out.println(req.getHeader("Content-Type"));
        System.out.println(req.getHeader("Content-Length"));
        System.out.println(req.getHeader("User-Agent"));

        //响应
        resp.setHeader("Content-Type","text/html;charset=utf-8");

        //打印字符流
        PrintWriter pt = resp.getWriter();
        pt.write("<h1>你好客户端</h1>");
        // pt.print("提交成功");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        String age = req.getParameter("age");
        System.out.println(name);
        System.out.println(age);
    }

 状态码:服务器和浏览器用于确定状态的固定数字号码

200:请求成功

302:请求重定向

400:语义有误,当前请求无法被服务器理解或请求参数有误

404:请求资源不存在,通常是路径写错了或者服务器资源删除了

500:服务内部错误(代码异常)

        例如404:

 四、过滤器

Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Servlet, 从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

作用:对服务器web资源进行拦截(权限控制,通过拦截资源进行权限控制,是否可以访问)

 Servlet API 中,与过滤器有关的API共有三个接口: Filter、FilterChain、 FilterConfig

 Filter接口是过滤器类必须实现的接口,该接口中有三个方法: init(FilterConfig filterConfig)(该方法中仍然可以获取在web.xml中配置的参数)、 doFilter(ServletRequest request, ServletResponse response,FilterChain chain)、destroy()。

在com.yyds.webback1下创建filter包,在该包内下创建EncodFilter类,做编码过滤器,实现Filter接口:

import javax.servlet.*;
import java.io.IOException;

public class EncodFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//        System.out.println("编码过滤器");
        servletRequest.setCharacterEncoding("utf-8");//设置编码格式

//处理后的request和response对象传递到过滤链上的下一个资源,后一个目标可能是servlet,也可能是下一个过滤器
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

        配置过滤器:

                在web.xml中配置:

    <filter>
        <filter-name>encod</filter-name>
        <filter-class>com.yyds.webback1.filter.EncodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>encod</filter-name>
<!--        配置进入到过滤器的映射地址-->
        
<!--    <url-pattern>/login</url-pattern>  login 地址可以进入    -->
        <!--       /* 全部地址都可以进入  -->
        <url-pattern>/*</url-pattern> 
    </filter-mapping>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/577263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考A计划-试题模拟含答案解析-卷二

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

当我按下开关,震惊了一众答辩老师,乍一看,啊,就这?

基于机器视觉的爬行机器人&#xff08;毕业设计&#xff09; 零、实现功能一、关于本想法二、理论分析三、3D结构设计四、硬件设计主控板驱动板 五、软件设计控制程序机器视觉APP设计 六、结束语 零、实现功能 实现了爬行机器人的移动控制功能。采用三角步态控制机器人移动&am…

【技术分享】万字长文图文并茂读懂高性能无锁 “B-Tree 改”:Bw-Tree

【技术分享】万字长文图文并茂读懂高性能无锁 “B-Tree 改”&#xff1a;Bw-Tree 原文链接&#xff1a; https://mp.weixin.qq.com/s/I5TphQP__tHn6JoPcP–_w 参考文献可能需要科学上网才能下载。如果你获取不到这几篇论文&#xff0c;可以关注公众号 IT技术小密圈 回复 bw-tre…

类和对象初阶

目录 一、再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 注意 1.4 总结 二、拷贝对象时的一些编译器优化 三、static成员 3.1 静态成员变量 3.1.1 引入 3.1.2 特点 3.1.3 区别 3.2 静态成员函数 3.2.1 引入 3.2.2 特点 3.2.3 例题 四、友元 4.1 友元函…

数据结构与算法·第2章【线性表】

线性结构具有以下基本特征&#xff1a; 有唯一的一个被称为首元素&#xff08;或头元素&#xff09;的元素&#xff0c;没有直接前驱&#xff1b;有唯一的一个被称为尾元素&#xff08;或尾节点&#xff09;的元素&#xff0c;没有直接后继。 数据元素之间存在一对一的线性关…

python 实现单链表

链表 链表是一种在存储单元上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针链接次序实现。 链表是由一系列的结点组成&#xff0c;结点可以在运行时动态生成。每个结点包含两部分&#xff1a;数据域与指针域。数据域存储数据元素&#xff0c;指针域存储下一…

Yapi内网部署[CentOS7]

mongo安装 # 下载MongoDB https://www.mongodb.com/try/download/community4.2.24 RedHat/CentOS7.0 tgz# 安装MongoDB mkdir -p /home/jpge/devp-tools/tools cd /home/jpge/devp-tools/tools wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.24.tgz…

线性代数:线性方程求解、矩阵的逆、线性组合、线性独立

本文参考www.deeplearningbook.org一书第二章2.3 Identity and Inverse Matrices 2.4 Linear Dependence and Span 本文围绕线性方程求解依次介绍矩阵的逆、线性组合、线性独立等线性代数的基础知识点。 一、线性方程 本文主要围绕求解线性方程展开&#xff0c;我们先把线性…

揭秘Redis持久化原理,探索fork与Copy-on-Write的魔法!

大家好&#xff0c;我是小米&#xff0c;今天我将和大家一起探索Redis持久化原理中的两个关键概念&#xff1a;fork和Copy-on-Write。这两个概念对于理解Redis的数据持久化机制至关重要。让我们一起来揭开这些技术的神秘面纱吧&#xff01; Redis持久化简介 在开始之前&#…

组合数学第四讲

Generating Function&#xff08;生成函数&#xff09; 这里是一个普通生成函数例子&#xff0c;生成函数一般适用于根据递推关系式求出比较复杂的通项公式的 关键点&#xff1a; 1.项可转换成G(x)-,因为生成函数规定是从0到∞的 2.,当|x|<1时&#xff0c;最终可收敛为。这里…

基础算法(六):回溯算法

前言 Hello大家好&#xff0c;停了半个多月算法学习的荔枝又变菜了&#xff0c;最近决定认认真真地重新学习回溯&#xff0c;无意间看到Carl哥的代码随想录&#xff0c;感动之余也是跟着一步步走&#xff0c;后悔上车晚了呜呜呜~~~。之前自己摸索确实有点难受&#xff0c;在这篇…

YUM安装LNMP架构配置命令与搭建论坛

LNMP架构配置命令与搭建论坛 LNMP简介安装须知安装 Nginx配置yum源yum安装nginx并查看版本号开启服务并且设为开机自启 安装 MySQL 5.7 (mariadb)移除软件包下载安装mysql安装MySQL报错问题解决方案&#xff1a; 开启服务并设为开机自启在日志文件中找出root用户的初始密码登录…

数据结构 --- 树

1、二叉树 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 每个结点最多有两棵子树&#xff0c;即二叉…

CAPL(vTESTStudio) - CAPL控制RS232继电器

目录 为什么要使用CAPL控制继电器? 一、RS232继电器选择 二、继电器通信协议

AList 一个支持多种存储的文件列表程序,使用 Gin 和 Solidjs。

一个支持多种存储&#xff0c;支持网页浏览和 WebDAV 的文件列表程序&#xff0c;由 gin 和 Solidjs 驱动。 特点 使用简单 AList 从一开始就设计为易于安装&#xff0c;并且可以在所有平台上使用。 多种存储 AList 支持多个存储提供商&#xff0c;包括本地存储、阿里云盘、O…

大数据治理入门系列:数据治理

在信息经济时代&#xff0c;数据是企业的一大关键资产。为了制定科学、有效、合理的决策&#xff0c;企业需要收集大量的数据并进行各种数据分析&#xff0c;为决策提供依据。在此过程中&#xff0c;收集数据的速度、数据的质量和可靠性、对数据的分析过程、合适的分析工具等&a…

三十四、数学知识——约数(试除法 + 约数个数 + 约数之和 + 欧几里得算法)

约数相关算法主要内容 一、基本思路1、定义2、试除法——求一个数的所有约数3、约数个数4、约数之和5、欧几里得算法——辗转相除法&#xff08;求解最大公约数&#xff09; 二、Java、C语言模板实现三、例题题解 一、基本思路 1、定义 约数&#xff1a; 约数是指一个数&…

利用百度API进行植物识别

植物识别_拍照识别植物-百度AI开放平台百度AI植物识别,支持识别超过2万种通用植物和近8千种花卉&#xff0c;接口返回植物的名称&#xff0c;并获取百科信息&#xff0c;适用于拍照识图类APP中https://ai.baidu.com/tech/imagerecognition/plant 偶然看到的&#xff0c;不过真…

STM32F103C8T6+2.4寸SPI TFT触摸屏代码+标准库 项目开发

目录 模块清单&#xff1a; 模块介绍&#xff1a; 1&#xff1a;STM32F103C8T6 2&#xff1a;2.4寸SPI TFT触摸屏 项目结果展示 2.4寸 TFT SPI显示触摸屏 2.4寸 SPI TFT 显示触摸屏代码下载链接&#xff1a; (1条消息) 2.4寸SPITFT显示触摸屏资源-CSDN文库 模块清单&#x…