ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

动力节点 SpringMVC P33-43

2022-03-21 19:58:17  阅读:190  来源: 互联网

标签:xml do SpringMVC 43 springmvc 地址 P33 静态 资源


哔哩哔哩视频链接
笔记参考链接

(一)解读中央调度器处理的<url-pattern

1、在web.xml中,在没有特殊要求的情况下,springmvc 的中央调度器 DispatcherServlet 的< url-pattern/ >常使用后缀匹配方式,如写为 *.do 或者 *.action , *.mvc 等。

tomcat本身能处理静态资源的访问,像html,图片,js文件等都是静态资源。
这是因为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>

这个名叫 default 的 servlet 作用:
1)处理静态资源
2)处理未映射到其它servlet的请求

在我们项目的web.xml文件中,如果将<url-pattern属性值由*.do改为“/”,那么将无法访问静态资源,可以访问动态资源。

1.1 第一种静态资源处理方式

怎么样才能让它能访问静态资源和动态资源呢?
(1)在springmvc.xml文件中添加:

<mvc:annotation-driven/>
<mvc:default-servlet-handler/>

(2)在MyController中还要使用@Responsebody注解

2、项目代码
(1)复制一份代码并更改名为ch05 url-pattern,修改了index.jsp,MyController类。在webapp文件夹下新建images目录,里面放了一些图片;新建html文件夹,里面放了一个test.html。
(2)将web.xml中的<url-pattern属性值改为/:

<servlet-mapping>
        <servlet-name>myweb</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

(3)在springmvc文件中添加:

<mvc:default-servlet-handler/>

但是这样的话会默认也把dosome的请求也交给default,所以还要加上:

<mvc:annotation-driven/>

另外,在MyController中还要使用@Responsebody注解。
(4)运行:
成功访问图片!
在这里插入图片描述
动态资源dosome请求正常!
在这里插入图片描述
网页正常显示!
在这里插入图片描述

1.2 第二种静态资源处理方式

1、要在springmvc.xml中同时添加<mvc:resources 标签和<mvc:annotation-driven标签才能同时访问静态资源和动态资源。

 <!--第二种处理静态资源的方式
        mvc:resoures加入后框架会创建ResourceHttpRequestHandler这个处理器对象
        让这个对象处理静态资源的访问,不依赖tomcat服务器。
        mapping:访问静态资源的url地址,使用通配符**,表示这个文件夹下面的所有目录
        location:静态资源在你的项目中的目录位置 当前主目录是webapp

        images/**:表示images/p1.jpg,images/user/logo.gif等
    -->
    <mvc:resources mapping="/images/**" location="/images/" />
    <mvc:resources mapping="/html/**" location="/html/" />
    <mvc:resources mapping="/js/**" location="/js/" />

    <!--mvc:resources和@RequestMapping有一定的冲突-->
    <!--添加注解驱动-->
    <mvc:annotation-driven/>

2、上面这种方式有些繁琐我们一般将静态资源放在static目录下(在webapp右键新建static文件夹),简化为

<mvc:resources mapping="/static/**" location="/static/" />
<!--添加注解驱动-->
<mvc:annotation-driven/>

这时index.jsp中就要将图片的地址改一下:

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

3、运行如下:
能成功显示图片!
在这里插入图片描述以及动态资源:
在这里插入图片描述
输入localhost/ch05_url_pattern/static/html/test.html能成功访问静态网页!

(二)第二章小结

在这里插入图片描述在这里插入图片描述

(三)绝对路径和相对路径

1、地址分类
在这里插入图片描述
2、使用相对地址时可能出现的问题已经解决方案
(1)如果index.jsp中如果访问请求user/some.do前面没有斜杠,那么访问地址就是参考地址+资源组成了路径。
不加斜杠的地址可能导致一种问题:就是当到底一个地址后又回去再点击,可能会多出现前面的user/,导致地址找不到。
那么解决办法只有两种:
在这里插入图片描述
(2)如果index.jsp中如果访问请求/user/some.do前面有斜杠,那么读取资源的时候就会以localhost:8080作为主地址,再加/user/some.do,这样是找不到地址的。解决方案:在资源地址前加${pageContext.request.contextPath}标签。
在这里插入图片描述

(3)写一下三种方式的代码
针对(2)中提到的不加斜杠的方式的解决办法:
1、加入${pageContext.request.contextPath}标签:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <p>第一个springmvc项目</p>
    <p><a href="${pageContext.request.contextPath}/user/some.do">发起some.do的get请求</a></p>
</body>
</html>   

2、在<head部分加一个base标签即可:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <base href="http:localhost:8080/ch06 path"/>
</head>
<body>
    <p>第一个springmvc项目</p>
    <p><a href="user/some.do">发起some.do的get请求</a></p>
</body>
</html>    

3、但base标签要求应用的网址是固定的,因为已经在页面中写死了。如果网址变更,那么又可能找不到地址了。因此又有另一种方法,可以动态获取当前的应用网址:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath = request.getScheme() + "://" +
            request.getServerName() + ":" + request.getServerPort() +
            request.getContextPath() + "/";
 %>
<html>
<head>
    <title>Title</title>
    <base href="<%=basePath%>"/>
</head>
<body>
    <p>第一个springmvc项目</p>
    <p><a href="user/some.do">发起some.do的get请求</a></p>
</body>
</html> 

标签:xml,do,SpringMVC,43,springmvc,地址,P33,静态,资源
来源: https://blog.csdn.net/qq_44629163/article/details/123621757

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有