当前位置: 首页 > 图灵资讯 > 技术篇> 解读静态资源的访问

解读静态资源的访问

来源:图灵教育
时间:2023-06-04 09:13:34

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

tomcatweb.xml文件有servlettet 名称是 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.2defaultservlet功能:33-34

Thedefaultservletforallwebapplications,thatservesstaticresources.Itprocessesallrequeststhatarenotmappedtootherservletswithservletmappings(definedeitherhereorinyourownweb.xmlfile).

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.使用斜杠详细说明”/“34”

在您的项目中使用/,它将取代tomcat中的default。

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

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

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

解读静态资源的访问_mvc_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

可访问动态资源

解读静态资源的访问_html_04

3.静态资源访问344

这并不意味着静态资源在写作/后无法访问。经过一些配置后,应该问一下

问题也可以解决。

3.1第一使用34-35

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

defaultservlethttprequesthandler处理器对象。它将像检查员一样筛选进入dispatcherservlet的URL。如果发现是静态资源请求,请求将转移到web应用服务器的默认servlet。一般服务器都有默认的servlet。

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

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

解读静态资源的访问_mvc_05

3.1.1案例34-35访问静态资源的方式:

原理是:添加此标签后,框架将创建控制器对象DefaultServletHttpresthandler(类似于我们自己创建的Mycontroler).defaultservlethttprequesthandler可以将接收请求转发给tomcatdefaultservlet。

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

springmvc.xml

 <mvc:default-servlet-handler />

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

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

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

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

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

解读静态资源的访问_mvc_08

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

解读静态资源的访问_html_09

访问动态资源

因为default-servlet-handler与@requestmaping注释存在冲突,需要加入annotation-driven来解决问题,需要加入注释驱动来解决问题

<!--    添加注解驱动 --><!-- default-servlet-handler 和 @Requestmaping注释 有冲突, 需要加入annnotation-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请求

解读静态资源的访问_静态资源_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/"/>

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

解读静态资源的访问_html_12

访问37-38动态资源

同样,如果访问动态资源存在问题,则需要注释驱动

解读静态资源的访问_html_13

springmvc.xml

<!--mvc:resources和@requestmaping有一定的冲突  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>

解读静态资源的访问_html_14

因为上面有很多标签,我们在WEB-INF下建立了一个新的目录Static,将静态资源放入其中

解读静态资源的访问_mvc_15

springmvc.xml

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

index.jsp

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

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

3.3提示动态资源路径直接写成some38

既然使用了/////

没有必要像以前那样访问动态资源.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>

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

上一篇:

ORM操作数据库

下一篇:

Bean的作用域