万有斥力 发表于 2023-11-17 23:16:46

9、SpringMVC之处理静态资源

9.1、环境搭建

9.1.1、在project创建新module

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024091158330-487408041.png
9.1.2、选择maven

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024091243429-1926189357.png
9.1.3、设置module名称和路径

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024091426375-48143114.png
https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024091446423-2079980749.png
9.1.4、module初始状态

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024091627288-1365081433.png
9.1.5、配置打包方式和引入依赖

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024092112371-1450439572.png
注意:默认的打包方式为 jar,为了能配置web资源,需要将打包方式设置为 war
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ora.rain</groupId>
    <artifactId>spring_mvc_static</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><dependency>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <groupId>org.springframework</groupId>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <artifactId>spring-webmvc</artifactId>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <version>5.3.1</version>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler></dependency>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><dependency>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <groupId>ch.qos.logback</groupId>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <artifactId>logback-classic</artifactId>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <version>1.2.3</version>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler></dependency>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><dependency>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <groupId>javax.servlet</groupId>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <artifactId>javax.servlet-api</artifactId>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <version>3.1.0</version>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <scope>provided</scope>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler></dependency>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><dependency>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <groupId>org.thymeleaf</groupId>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <artifactId>thymeleaf-spring5</artifactId>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <version>3.0.12.RELEASE</version>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler></dependency>
    </dependencies>


</project>9.1.6、配置web资源目录

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024115624305-1574385231.png
打开Project Structure,选择对应的module,并为该module创建一个web.xml文件
https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024115828791-348866001.png
注意:web.xml文件需要放到web资源路径(工程路径\src\main\webapp)下
https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024115925296-71338369.png
9.1.7、配置web.xml

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024120404330-422759891.png
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler> xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler> version="4.0">

   
    <servlet>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><servlet-name>SpringMVC</servlet-name>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><init-param>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <param-name>contextConfigLocation</param-name>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <param-value>classpath:springmvc.xml</param-value>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler></init-param>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><servlet-name>SpringMVC</servlet-name>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><url-pattern>/</url-pattern>
    </servlet-mapping>

   
    <filter>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><filter-name>CharacterEncodingFilter</filter-name>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><init-param>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <param-name>encoding</param-name>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <param-value>UTF-8</param-value>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler></init-param>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><init-param>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <param-name>forceEncoding</param-name>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <param-value>true</param-value>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler></init-param>
    </filter>
    <filter-mapping>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><filter-name>CharacterEncodingFilter</filter-name>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><url-pattern>/*</url-pattern>
    </filter-mapping>

   
    <filter>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><filter-name>HiddenHttpMethodFilter</filter-name>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><filter-name>HiddenHttpMethodFilter</filter-name>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>9.1.8、创建SpringMVC的配置文件

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024171053827-360679001.png
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

   
    <context:component-scan base-package="online.liaojy"></context:component-scan>

   
    <bean id="viewResolver" >
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><property name="order" value="1"/>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><property name="characterEncoding" value="UTF-8"/>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><property name="templateEngine">
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <bean >
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><property name="templateResolver">
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    <bean
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    >
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><property name="prefix" value="/WEB-INF/templates/"/>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><property name="suffix" value=".html"/>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><property name="templateMode" value="HTML5"/>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler><property name="characterEncoding" value="UTF-8" />
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    </bean>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>   
    <mvc:default-servlet-handler></mvc:default-servlet-handler></property>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>    </bean>
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler></property>
    </bean>

   
    <mvc:annotation-driven></mvc:annotation-driven>

   
    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>

</beans>9.1.9、创建请求控制器

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024172255199-1048130535.png
package online.liaojy.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
* @author liaojy
* @date 2023/10/24 - 20:15
*/
@Controller
public class PortalController {
    @RequestMapping("/")
    public String portal(){
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>return "index";
    }
}9.1.10、创建模板目录及页面模板

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024173303397-216856581.png
注意:html要引入thymeleaf的约束:xmlns:th="http://www.thymeleaf.org"
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>

<h1>index.html</h1>

</body>
</html>https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024173434848-162559908.png
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>成功</title>
</head>
<body>

<h1>success.html</h1>

</body>
</html>9.1.11、配置tomcat

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024173629759-1229790460.png
https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024173655605-232543617.png
9.2、引用图片的失败示例

9.2.1、创建图片目录并放置图片

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024174841812-442339222.png
9.2.2、在html引用工程中的图片

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024175159505-899574289.png
<img th:src="@{/imgs/JAVAEE.png}">9.2.3、测试效果

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024175528571-1378667192.png
https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231024175733517-1517913718.png
9.3、页面跳转的失败示例

9.3.1、页面请求示例

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025113240869-1604765321.png
<a th:target="_blank" href="https://www.cnblogs.com/@{/static/page}">测试通过请求转发直接跳转到一个页面</a>9.3.2、控制器方法示例

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025113441685-1388218128.png
    @RequestMapping("/static/page")
    public String toStaticPage(){
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>return "forward:/WEB-INF/templates/success.html";
    }9.3.3、测试效果

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025114122848-578190978.png
https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025114159064-1857347077.png
https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025114346627-750328698.png
9.4、失败原因分析

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025114618741-474172211.png
因为DispatcherServlet接管了所有请求,所以导致tomcat中处理静态资源的默认Servlet不再生效。
9.5、解决方案

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025144905118-1574645366.png
开启Tomcat默认servlet的处理器之后,DispatcherServlet处理不了的请求(没有对应的控制器方法)会交由Tomcat默认Servlet来处理;
注意:标签要和标签配合使用,否则所有的请求都会由Tomcat默认Servlet来处理。
   
    <mvc:default-servlet-handler></mvc:default-servlet-handler>9.6、解决效果演示

9.6.1、引用图片

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025150803504-602965481.png
9.6.2、页面跳转

https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025150843010-1751510862.png
https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025151131145-1877598357.png
https://img2023.cnblogs.com/blog/2052479/202310/2052479-20231025151114784-265586751.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 9、SpringMVC之处理静态资源