首页 > 其他分享 >解读静态资源的访问

解读静态资源的访问

时间:2023-06-03 14:01:50浏览次数:53  
标签:do name 静态 解读 访问 mv 资源

1. 发起的请求是由哪些服务器程序处理的。33

浏览器输入以下地址

http://localhost:8080/ch05_url_pattern/index.jsp :tomcat(jsp会转为servlet)

http://localhost:8080/ch05_url_pattern/js/jquery-3.4.1.js : tomcat

http://localhost:8080/ch05_url_pattern/images/p1.jpg : tomcat

http://localhost:8080/ch05_url_pattern/html/test.html: tomcat

http://localhost:8080/ch05_url_pattern/some.do :  DispatcherServlet(springmvc框架处理的)

tomcat本身能处理静态资源的访问, 像html, 图片, js文件都是静态资源

1.1 源码  33

tomcat的web.xml文件有一个servlet 名称是 default , 在服务器启动时创建的。
 <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

	  <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>  表示静态资源和未映射的请求都这个default处理
    </servlet-mapping>

1.2 default这个servlet作用:   33-34

The default servlet for all web applications, that serves static  resources.  It processes all requests that are not mapped to other  servlets with servlet mappings (defined either here or in your own   web.xml file).

1.处理静态资源

2.处理未映射到其它servlet的请求。

2. 配置详解  32-33

添加布局和图片资源

解读静态资源的访问_mvc

2.1  *.do

在没有特殊要求的情况下,SpringMVC 的中央调度器 DispatcherServlet 的

常使用后辍匹配方式,如写为*.do 或者 *.action, *.mvc 等。

2.2  /   34

可以写为/,因为 DispatcherServlet 会将向静态资源的获取请求,例如.css、.js、.jpg、.png

等资源的获取请求,当作是一个普通的 Controller 请求。中央调度器会调用处理器映射器为

其查找相应的处理器。当然也是找不到的,所以在这种情况下,所有的静态资源获取请求也

均会报 404 错误。

2.2.1 详细解释 使用斜杠 "/"   34

当你的项目中使用了  / ,它会替代 tomcat中的default。

导致所有的静态资源都给DispatcherServlet处理, 默认情况下DispatcherServlet没有处理静态资源的能力。没有控制器对象能处理静态资源的访问。所以静态资源(html,js,图片,css)都是404.

动态资源some.do是可以访问,的因为我们程序中有MyController控制器对象,能处理some.do请求。

保持的值为 *.do,扩展名方式,图片会正常显示。

解读静态资源的访问_静态资源_02

index.jsp

<%--index.jsp页面的编写  32--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script type="text/javascript" src="js/jquery-3.4.1.js"></script>
</head>
<body>
<form action="some.do" method="post">
    姓名:<input type="text" name="name"> <br/>
    年龄:<input type="text" name="age"> <br/>
    <input type="submit" value="提交参数">
</form>

<br/>
<img src="images/p2.jpg" alt="我是一个静态资源,不能显示">
</body>
</html>

将的值修改为 / ,则图片将无法显示。

web.xml

<servlet-mapping>
        <servlet-name>myweb</servlet-name>
        <!-- <url-pattern>*.do</url-pattern>-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

截图中的图片无法显示(因为图片为静态资源)

解读静态资源的访问_html_03

动态资源可访问

解读静态资源的访问_静态资源_04

3. 静态资源访问  34

的值并不是说写为/后,静态资源就无法访问了。经过一些配置后,该问

题也是可以解决的。

3.1 第一使用 34-35

声 明 了  后 , springmvc 框 架 会 在 容 器 中 创 建

DefaultServletHttpRequestHandler 处理器对象。它会像一个检查员,对进入 DispatcherServlet的 URL 进行筛查,如果发现是静态资源的请求,就将该请求转由 Web 应用服务器默认的Servlet 处理。一般的服务器都有默认的 Servlet。

在 Tomcat 中,有一个专门用于处理静态资源访问的 Servlet 名叫 DefaultServlet。其为 default。可以处理各种静态资源访问请求。该 Servlet 注册在 Tomcat 服务

器的 web.xml 中。在 Tomcat 安装目录/conf/web.xml。

解读静态资源的访问_mvc_05

3.1.1 案例  34-35

访问静态资源的方式:  

       原理是: 加入这个标签后,框架会创健控制器对象DefaultServletHttpRequestHandler(类似我们自己创建的MyController). DefaultServletHttpRequestHandler这个对象可以把接收的请求转发给 tomcat的default这个servlet。

只需要在 springmvc.xml 中添加标签即可。

springmvc.xml

 <mvc:default-servlet-handler />

<mvc:default-servlet-handler/>表示使用 DefaultServletHttpRequestHandler 处理器对象。而该处理器调用了 Tomcat 的 DefaultServlet 来处理静态资源的访问请求。当然了,要想使用<mvc: …/>标签,需要引入 mvc 约束

解读静态资源的访问_html_06

访问http://localhost:8080/ch05_url_pattern/index.jsp 图片静态资源访问成功

解读静态资源的访问_html_07

访问http://localhost:8080/ch05_url_pattern/html/test.html 网页静态资源访问成功

解读静态资源的访问_html_08

但是我们的some.do请求范文失败

解读静态资源的访问_html_09

访问动态资源

因为default-servlet-handler 和 @RequestMapping注解 有冲突, 需要加入annotation-driven 解决问题,需要添加注解驱动解决

<!--    添加注解驱动 -->
<!-- default-servlet-handler 和 @RequestMapping注解 有冲突
, 需要加入annotation-driven 解决问题-->
    <mvc:annotation-driven />

MyController

// 研究中央调度器的url-pattern设置为 "/"   32
    @RequestMapping(value = "/some.do")
    public ModelAndView doReturnView(String name, Integer age){
        System.out.println("doSome, name="+name+"   age="+age);
        ModelAndView mv = new ModelAndView();
        mv.addObject("myname",name);
        mv.addObject("myage",age);
        mv.setViewName("show");
        return mv;
    }

show.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>/WEB-INF/view/show.jsp从request作用域获取数据</h3><br/>
    <h3>myname数据:${myname}</h3><br/>
    <h3>myage数据:${myage}</h3>
</body>
</html>

再次访问some.do请求,访问成功

解读静态资源的访问_mvc_10

3.2 第二使用 (必须掌握)  37-38

在 Spring3.0 版本后,Spring 定义了专门用于处理静态资源访问请求的处理器

ResourceHttpRequestHandler。并且添加了标签,专门用于解决静态资源无法访问问题。需要在 springmvc 配置文件中添加如下形式的配置:

<mvc:resources mapping="/images/**" location="/images/"/>
<mvc:resources mapping="/html/**" location="/html/"/>
<mvc:resources mapping="/js/**" location="/js/"/>

location 表示静态资源所在目录。当然,目录不要使用/WEB-INF/及其子目录。

mapping 表 示 对 该 资 源 的 请 求 

( 以 /images/ 开 始 的 请 求 , 如 /image/beauty.jpg , /images/car.png 等)。注意,后面是两个星号**。

3.2.1 案例

访问静态资源的方式  37

       mvc:resources 加入后框架会创建 ResourceHttpRequestHandler这个处理器对象。

       让这个对象处理静态资源的访问,不依赖tomcat服务器。

       mapping:访问静态资源的uri地址, 使用通配符 **

       location:静态资源在你的项目中的目录位置。

       images/**:表示 images/p1.jpg  , images/user/logo.gif

        , images/order/history/list.png

springmvc.xml

<mvc:resources mapping="/images/**" location="/images/"/>
<mvc:resources mapping="/html/**" location="/html/"/>
<mvc:resources mapping="/js/**" location="/js/"/>

index.jsp

<%--index.jsp页面的编写  32--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script type="text/javascript" src="js/jquery-3.4.1.js"></script>
</head>
<body>
<form action="some.do" method="post">
    姓名:<input type="text" name="name"> <br/>
    年龄:<input type="text" name="age"> <br/>
    <input type="submit" value="提交参数">
</form>

<br/>
<img src="images/p3.jpg" alt="我是一个静态资源,不能显示">

<%--<img src="static/images/p1.jpg">--%>
</body>
</html>

test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title   32</title>
</head>
<body>
    test.html 是一个静态资源, 网页内容hello, 第二种方法处理静态资源
</body>
</html>

图片和网页资源都正常访问到

解读静态资源的访问_html_11

解读静态资源的访问_静态资源_12

访问动态资源   37-38

同样访问动态资源有问题,需要加注解驱动

解读静态资源的访问_静态资源_13

springmvc.xml

<!--mvc:resources和@RequestMapping有一定的冲突  38-->
    <mvc:annotation-driven />

MyController

// 研究中央调度器的url-pattern设置为 "/"   32
    @RequestMapping(value = "/some.do")
    public ModelAndView doReturnView(String name, Integer age){
        System.out.println("doSome, name="+name+"   age="+age);
        ModelAndView mv = new ModelAndView();
        mv.addObject("myname",name);
        mv.addObject("myage",age);
        mv.setViewName("show");
        return mv;
    }

show.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>/WEB-INF/view/show.jsp从request作用域获取数据</h3><br/>
    <h3>myname数据:${myname}</h3><br/>
    <h3>myage数据:${myage}</h3>
</body>
</html>

解读静态资源的访问_mvc_14

因为上面要写很多的 标签,我们在WEB-INF下新建一个目录static将静态资源统一放进去

解读静态资源的访问_mvc_15

springmvc.xml

<!--使用一个配置语句,指定多种静态资源的访问  38-->
    <mvc:resources mapping="/static/**" location="/static/" />

index.jsp

<br>
<img src="static/images/p2.jpg">

解读静态资源的访问_html_16

3.3 小提示 动态资源路径直接写成some  38

既然使用了    /     /

动态资源的访问就不需要像以前一样some.do一样了,直接改成some就行了

MyController

@RequestMapping(value = "/some")
    public ModelAndView doReturnView(String name, Integer age){
        System.out.println("doSome, name="+name+"   age="+age);
        ModelAndView mv = new ModelAndView();
        mv.addObject("myname",name);
        mv.addObject("myage",age);
        mv.setViewName("show");
        return mv;
    }

index.jsp

<form action="some" method="post">
    姓名:<input type="text" name="name"> <br/>
    年龄:<input type="text" name="age"> <br/>
    <input type="submit" value="提交参数">
</form>

解读静态资源的访问_html_17

标签:do,name,静态,解读,访问,mv,资源
From: https://blog.51cto.com/u_15784725/6407867

相关文章

  • windows访问k8s
    windows访问ekspods安装AWSCLI网址为https://awscli.amazonaws.com/AWSCLIV2.msi。查看aws版本。aws--version配置AWSCLI凭证eksctl和AWSCLI均要求您在环境中配置AWS凭证。awsconfigure命令是设置安装以供一般使用的最快方法。$awsconfigureAWSAccessKeyID[N......
  • 代理IP技术解加强网络隐私和绕过访问限制的有效工具
      代理IP是一种常用的网络工具,旨在加强用户的隐私保护并绕过访问限制。本文将对代理IP的工作原理、类型以及应用领域进行深入解析,帮助读者更好地了解并利用这一技术。一、代理IP的工作原理代理IP的基本原理是通过转发网络请求和响应来隐藏用户的真实IP地址。当用户通过代理服......
  • 2023-06-02 用户访问cgi-bin/test-cgi时会泄露远端服务器名
    问题描述:百度智能云给我发了一条短信,说是我的服务器有个cgi安全漏洞:用户访问cgi-bin/test-cgi时会泄露远端服务器名,服务器地址等敏感信息,黑客可以利用获得的敏感信息执行下一步的攻击操作。我以前部署阿里云怎么就没这个问题?难道是宝塔的问题??现在我的服务器是用宝塔管理的,至......
  • 系统调用——本质:多个进程都需要访问系统资源,为了更好的管理这些资源
    在现代操作系统里,由于系统资源可能同时被多个应用程序访问,如果不加保护,那各个应用程序之间可能会产生冲突,对于恶意应用程序更可能导致系统奔溃。这里所说的系统资源包括文件、网络、各种硬件设备等。比如要操作文件必须借助操作系统提供的api(比如linux下的fopen) 在电脑中,系统调用(......
  • 论文解读 | IROS 2021 | PTT:用于点云中3D单对象跟踪的点-轨道-变压器模块
    原创|文BFT机器人01背景在自动驾驶、机器人导航和增强现实等领域,3D单目标跟踪是一个重要的问题。传统的方法通常使用基于图像或激光雷达数据的2D或3D物体检测器来检测和跟踪目标。然而,这些方法通常需要大量的计算资源,并且对于复杂场景中的小目标或遮挡目标表现不佳。3D单目标跟......
  • 静态网页简单设计
    应同学要求,帮忙简单设计一个静态网页。我就愉快的答应了,其实我心里挺没底的,但是基于我前段时间有过微信小程序的基础学习,在部分css代码上还是差不多的。帮同学做的这个网页是《传闻中的陈芊芊》这个电视剧的部分相关内容。下面是最终的网页界面。网页界面最终效果:源代码:下面只是......
  • Android中实现ContentResolver对系统中所有联系人的访问
    一、实现方法思路:朝着实验要求和目的去想,要想访问系统中的联系人,可以利用ContentResolver类来访问,使用ContentResolver类可以访问别的应用程序通过ContentProvider提供的数据,这里可以用Android系统提供的标准的ContentProvider来对手机联系人进行访问。还有要想实现长......
  • 项目访问的端口是8018,但是真实接口地址是19080,导致访问这个地址http://9.6.237.104:80
    这个问题是由于您的前端页面与后端应用程序的接口地址不在同一个域名下所引起的跨域请求。在浏览器中,出于安全考虑,通常不允许JavaScript从一个域名下访问另一个不同域名下的资源,这种行为被称为跨域请求(Cross-OriginResourceSharing,CORS)。有一些方法可以解决跨域问题,下面是......
  • ATT&CK v13版本战术介绍——凭证访问(一)
    一、引言在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权、防御规避战术,本期我们为大家介绍ATT&CK14项战术中凭证访问战术第1-6种子技术,后续会介绍凭证访问其他子技术,敬请关注。二、ATT&CKv13简介MITREATT&CK是一个全球可访问的基于现实世界观......
  • LangChain入门(一)访问LLM模型
    GitHub-liaokongVFX/LangChain-Chinese-Getting-Started-Guide:LangChain的中文入门教程LangChain的中文入门教程.ContributetoliaokongVFX/LangChain-Chinese-Getting-Started-GuidedevelopmentbycreatinganaccountonGitHub.https://github.com/liaokongVFX/LangCh......