欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 【Tomcat】第六站(最后一站啦!):数据的返回

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

2025/2/24 22:18:47 来源:https://blog.csdn.net/m0_75163045/article/details/144614043  浏览:    关键词:【Tomcat】第六站(最后一站啦!):数据的返回

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

         报错统一抛出异常。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词