【Tomcat】第六站(最后一站啦!):数据的返回

news2024/12/21 7:31:34

1. 引言   

        前端资源比如html页面,进行返回。截止到目前我们写的项目架构不支持前端页面(静态资源 )。

2. 数据的返回

2.1 准备

        为了能够写前端页面,新建一个项目。选择Maven项目,下一步,下一步。

        加载完成之后,在Resources下新建一个html。

写一个index.html,

        把原来写的资源拷贝过来,启动测试一下。

输出结果没问题,说明当前构建的项目框架没问题。

没问题我们想办法让他访问静态资源。


2.2 静态资源访问

        静态资源的访问涉及到数据的返回。要想给浏览器返回数据,目前只是在下面进行打印,还不能将数据返回给浏览器,浏览器返回的是个空状态。

        我们知道,一个完整的http请求包含请求和响应两部分,就是当前浏览器把请求打到tomcat服务器上,然后tomcat同样也需要把数据返回给浏览器,这是一个完整的http请求。

         目前http请求不完整,只是有请求,能接收到并解析数据。

我们想要输出静态资源的时候,怎样输出静态资源?

response

返回数据用response。

* 接收数据打开了inputstream,这是输入流。想要输出首先打开输出流。

* 创建对象的时候,需要生成构造函数。

* 需要一个工具类FileUtil,与I/O相关(每一行代码去读取,是能够帮助数据转换成二进制进行传输  --->  当前html代码是一个文件形式,在网络上传输文件形式非常麻烦。于是用输入输出的方式把文件转换成相应的二进制形式,通过二进制形式对数据进行传输。

* 想要输出静态资源,少不了FileUtil的支持,调用它的getResourcePath()方法,把访问路径放进去。---->获取当前访问路径。

FileUtil.getResoucePath(path);

默认给定的访问路径是index.html

        但是这并不是完整路径,需要用getResourcePath方法获取资源地址,将其转换成完整的路径,再将路径进行输出。

        如果文件存在,说明访问的静态资源文件是存在的,存在就返回数据。

File file=new File(resourcePath);
if(file.exists()){//访问的静态资源文件是存在的
    System.out.println("静态资源存在");
    FileUtil.writeFile(file,outputStream);
}else{
    System.out.println("静态资源不存在");
}

  $ 尝试对静态资源做真正的输出。

        要想输出,首先需要从Socket那里获取当前输出流。在Socket创建输出流对象,并且把输出流传进去。

public static void handler(Socket socket) throws Exception {
    //读取请求的数据
    InputStream inputStream = socket.getInputStream();

    response=new Response(socket.getOutputStream());//先创建对象
    requestContext(inputStream);
}

不是动态资源,就是静态资源访问。

if(!request.getPath().equals("")){//不是空请求
    if(ServletConfigMapping.classMap.get(request.getPath())!=null){//当前请求地址能否从classMap中查找到
        Class<HttpServlet> ClassServlet=ServletConfigMapping.classMap.get(request.getPath());//获取类对象
        HttpServlet servlet=ClassServlet.newInstance();//根据获取到的类对象,创建对应的对象  用父类去接,多态(父类的引用指向子类的对象)
        servlet.service(request,response);//调用HttpServlet的service方法,判断是get请求还是post请求
    }else{
        response.wirthHtml(request.getPath());
    }
}

启动tomcat,启动之后,浏览器访问。

总结:

        首先在response中写好相关的方法,首先全局变量输出流,这个输出流只能是Socket生成。

        抽取到输出流之后,当访问动态资源没有访问到,访问静态资源,假设静态资源存在,返回静态资源。

        浏览器访问静态资源,目前浏览器还是没有返回静态资源内容,因为还不成熟

为什么访问不到?

        请求数据,返回数据都需要请求头和返回头。

        响应的话,也需要一定的格式。

当前html页面需要格式。(当前ResponseUtil工具类中有格式)。

此时再访问,浏览器能够访问到html资源。

 


  2.3 动态资源返回

          当前动态资源返回信息也可。在动态资源里定义模拟标签即可。

String context="<h1>MyFirstServlet实现了</h1>";

 封装上响应头。

response.wirth(ResponseUtil.getResponseHeader200(context));//封装上响应头

数据的返回还需要response,在response里写方法返回。

public void wirth(String context) throws IOException {
    outputStream.write(context.getBytes(StandardCharsets.UTF_8));
}

         报错统一抛出异常。

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

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

相关文章

ai论文生成器:分享8款AI一键生成论文的写作软件

在撰写毕业论文的过程中&#xff0c;高效利用各类软件工具可以极大地提升写作效率与质量。以下是八个免费的神器软件工具&#xff0c;它们各自在论文撰写、文献管理、语法校对、数据可视化等方面发挥着重要作用。希望这些推荐能帮助你顺利完成毕业论文的写作。 千笔AI论文&…

【Ubuntu 20.04】notepad++的安装与汉化

一&#xff0c;简介 本文介绍如何在Ubuntu虚拟机中安装notepad&#xff0c;供参考。 二&#xff0c;操作步骤 2.1 notepad的安装 sudo snap install notepad-plus-plus

Cherno C++学习笔记 P45 拷贝与拷贝构造函数

在这一篇文章当中&#xff0c;我们会学习一下C当中的复制以及复制构造函数&#xff0c;当然&#xff0c;还会用一个相对比较完整的代码类作为例子。这也是我们第一次写一个相对比较长的和完整的代码。 对于C来说&#xff0c;理解复制是非常重要的&#xff0c;因为整个C变成可以…

uniapp入门 01创建项目模版

0安装 hbuilder x 标准版 1.创建模版工程 2.创建官方 案例工程 index.uvuewen 文件解析 <!-- 模版 标签 --> <template><view></view></template><!-- 脚本 --> <script>export default {data() {return {}},onLoad() {},methods:…

kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装

系列文章目录 1.kubeadm安装K8s高可用集群之基础环境配置 2.kubeadm安装K8s集群之高可用组件keepalivednginx及kubeadm部署 3.kubeadm安装K8s高可用集群之集群初始化及master/node节点加入集群calico网络插件安装 kubeadm安装K8s高可用集群之集群初始化及master/node节点加入ca…

【NLP】序列到序列(seq2seq)建模工具fairseq使用详解

文章目录 一、fairseq简介二、安装方式2.1 pip安装2.2 源码安装 三、fairseq命令工具3.1 fairseq-preprocess3.2 fairseq-train3.3 fairseq-generate3.4 fairseq-interactivate3.5 fairseq-score3.6 fairseq-eval-lm 4. 常见报错报错1 参考资料 一、fairseq简介 fairseq 是 Fa…

28、论文阅读:基于像素分布重映射和多先验Retinex变分模型的水下图像增强

A Pixel Distribution Remapping and Multi-Prior Retinex Variational Model for Underwater Image Enhancement 摘要介绍相关工作基于模型的水下图像增强方法&#xff1a;无模型水下图像增强方法&#xff1a;基于深度学习的水下图像增强方法&#xff1a; 论文方法概述像素分布…

ArkTs组件的学习

一. AlphabetIndexer 可以与容器组件联动用于按逻辑结构快速定位容器显示区域的组件 参数名类型必填说明arrayValueArray<string>是字母索引字符串数组&#xff0c;不可设置为空selectednumber是初始选中项索引值若超出索引值范围则取默认值0 class Lxr{tImg:Resource…

Python读取Excel批量写入到PPT生成词卡

一、问题的提出 有网友想把Excel表中的三列数据&#xff0c;分别是&#xff1a;单词、音标和释义分别写入到PPT当中&#xff0c;每一张PPT写一个单词的内容。这种批量操作是python的强项&#xff0c;尤其是在办公领域&#xff0c;它能较好地解放双手&#xff0c;读取Excel表后…

百度面试手撕 go context channel部分学习

题目 手撕 对无序的切片查询指定数 使用context进行子协程的销毁 并且进行超时处理。 全局变量定义 var (startLoc int64(0) // --- 未处理切片数据起始位置endLoc int64(0) // --- 切片数据右边界 避免越界offset int64(0) // --- 根据切片和协程数量 在主线程 动态设…

Otsu 二值化算法:原理、实现与应用

摘要&#xff1a; 本文深入探讨了 Otsu 二值化算法&#xff0c;详细阐述其原理&#xff0c;包括类间方差的计算与阈值确定机制。分别给出了该算法在 C#、Python 和 C 中的实现代码示例&#xff0c;并对代码进行了详细注释与分析。此外&#xff0c;还探讨了 Otsu 二值化算法在图…

uniApp使用腾讯地图提示未添加maps模块

uniApp使用腾讯地图&#xff0c;打包提示未添加maps模块解决方案 这是报错信息&#xff0c;在标准基座运行的时候是没问题的&#xff0c;但是打包后会提示未添加&#xff0c;可以通过在mainfest里面把地图插件上腾讯地图的key更换高德地图的key&#xff0c;定位服务可以继续用腾…

Deepin/Linux clash TUN模式不起作用,因网关导致的问题的解决方案。

网关导致的问题的解决方案 查看路由 ip route寻找默认路由 默认路由应当为Mihomo default dev Mihomo scope link 如果不是&#xff0c;则 sudo ip route add default dev Mihomo在clash TUN开关状态发生变化时&#xff0c;Mihomo网卡会消失&#xff0c;所以提示找不到网卡…

scala中正则表达式的使用

正则表达式&#xff1a; 基本概念 在 Scala 中&#xff0c;正则表达式是用于处理文本模式匹配的强大工具。它通过java.util.regex.Pattern和java.util.regex.Matcher这两个 Java 类来实现&#xff08;因为 Scala 运行在 Java 虚拟机上&#xff0c;可以无缝使用 Java 类库&…

apache应用(客户机地址限制、用户授权限制、日志分割、AWStats日志分析)

目录 一、 客户机地址限制 二、 用户授权限制 三、 日志分割 使用rotatelogs分割工具 使用第三方工具cronolog 四、 AWStats日志分析 具体的apache软件安装可以阅读我之前的文章apache安装https://blog.csdn.net/m0_68472908/article/details/139348739?spm1001.2014.300…

护士资格实践题库(含解析)

1.患者女&#xff0c;30岁。诊断类风湿关节炎入院&#xff0c;经使用药物治疗后患者关节疼痛减轻&#xff0c;但出现体重增加、满月脸、向心性肥胖。提示存在何种药物的副作用&#xff08; &#xff09; A.泼尼松 B.环磷酰胺 C.硫唑嘌呤 D.吲哚美辛 E.阿司匹林 【答案】…

网络安全概论——防火墙原理与设计

一、防火墙概述 防火墙是一种装置&#xff0c;它是由软件/硬件设备组合而成&#xff0c;通常处于企业的内部局域网与 Internet 之间&#xff0c;限制 Internet 用户对内部网络的访问以及管理内部用户访问 Internet 的权限。换言之&#xff0c;一个防火墙在一个被认为是安全和可…

接口测试-Fidder及jmeter使用

一、接口测试的基础 1.接口的含义 也叫做API&#xff0c;是一组定义、程序及协议的集合&#xff0c;提供访问一组例程的能力&#xff0c;无需访问源码获理解内部工作细节 2.接口的分类 代码内部的接口&#xff0c;程序模块间的接口&#xff0c;对于程序接口测试&#xff0c;需…

postman设置cookie

postman发送请求的时候&#xff0c;如何顺带cookie? 示例&#xff1a; Cookie: locale_areazh; contryzh_cn;

Java-31 深入浅出 Spring - IoC 基础 启动IoC XML与注解结合的方式 配置改造 applicationContext.xml

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…