springMVC访问不同位置的静态资源

resources和webapp目录结构如下图:

1. 访问webapp目录下的静态资源

1. 配置类

        开启默认的servlet处理,处理webapp目录下的静态资源访问。需继承WebMvcConfigurer接口。

@Configuration
@EnableWebMvc // 开启Spring MVC的注解驱动
@ComponentScan(basePackages = "com.huan.web") // 扫描Controller包
public class WebConfig implements WebMvcConfigurer {
    /**
     * 访问 webapp下的静态资源
     * 配置默认的servlet处理器
     * @param configurer
     */
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

2. 控制类

        在控制类中处理访问静态资源时,需要使用forward转发。通过使用 forward,Spring MVC 会将请求转发给默认的 Servlet 处理静态资源,而不会通过视图解析器处理。

@Controller
public class WebController {
    @RequestMapping("/")
    public String index() {
        return "index";
    }
    @RequestMapping("/demo")
    public String test1() {
        return "forward:/demo.html";
    }
}

        以下图片是没有添加forward后运行访问的结果,这里将请求当作一个资源视图名称交给视图解析器进行处理,所以处理失败了。这里就需要搞懂/springmvc/xxx.html和/springmvc/xxx的区别

3. 前端页面(demo.html)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Hello test1</h1>
    <img src="static/images/OIP2.jpg">
</body>
</html>

4.测试访问

2. 访问WEB-INF目录下的静态资源

1. 配置类

        这里配置了视图解析器,处理访问WEB-INF目录下的静态资源。当服务器接受到无后缀的请求路径,会将该路径交给配置的视图解析器处理,拼接前后缀形成新的路径,然后进行访问。

@Configuration
@EnableWebMvc // 开启Spring MVC的注解驱动
@ComponentScan(basePackages = "com.huan.web") // 扫描Controller包
public class WebConfig implements WebMvcConfigurer {
    /**
     * 访问web-inf目录下的静态资源
     * 视图解析器 配置路径匹配规则
     * @return
     */
    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".html");
        return resolver;
    }
}

2. 控制类

@Controller
public class HideController {
    @RequestMapping("/test")
    public String test() {
        return "test";
    }
}
//内部资源访问一定要经过springmvc

3. 前端页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Hello world</h1>
    访问webapp下的static目录下的图片:<img src="static/images/OIP2.jpg">
</body>
</html>

        WEB-INF目录下的html要访问webapp目录下的资源时,相当于将WEB-INF/views目录下的文件复制到webapp目录下,项目结构如下图。

4. 测试访问

3. 访问其他任意位置的静态资源

1. 配置类

        以下配置访问路径是statics/下的所有资源,都由classpath:/statics/下的资源提供。

@Configuration
@EnableWebMvc // 开启Spring MVC的注解驱动
@ComponentScan(basePackages = "com.huan.web") // 扫描Controller包
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 配置访问路径是statics/下的所有资源,都由classpath:/statics/下的资源提供
        registry.addResourceHandler("/statics/**").
                addResourceLocations("classpath:/statics/");
    }
}

2. 控制类

        由于在配置注册资源处理程序时,配置访问路径为statics/*,所以这里的路径映射也是/statics/*。

@Controller
public class ResourceController {
    @RequestMapping("/statics/testResources")
    public String testResources() {
        return "forward:/statics/testResources.html";
    }
}

3. 前端页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Hello world</h1>
    访问resources目录下的图片:<img src="image/OIP1.jpg">
    <br>
    访问webapp下的static目录下的图片:<img src="../static/images/OIP2.jpg">
</body>
</html>

        resources目录下的资源与WEB-INF目录下的类似,实际上会将resources下的statics目录放到webapp目录下,然后通过这样的目录结构进行访问。

4. 测试访问

over...

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Spring MVC中,可以通过配置静态资源处理器来处理静态资源,包括样式表、脚本、图像等等。静态资源处理器可以将这些资源映射到Web应用程序的相对路径中,使得客户端能够通过浏览器直接访问这些资源。 以下是一些配置静态资源的方法: 1. 使用<mvc:resources> 标签 在Spring MVC中,可以使用<mvc:resources>标签配置静态资源。该标签需要设置location属性和mapping属性,表示静态资源位置和映射路径。例如: ``` <mvc:resources mapping="/static/**" location="/static/" /> ``` 上面的配置将/static/目录下的所有静态资源映射到相对路径/static/中,即客户端可以通过浏览器直接访问/static/目录下的静态资源。 2. 配置DefaultServletHttpRequestHandler Spring MVC默认提供了一个DefaultServletHttpRequestHandler来处理静态资源,可以通过配置该处理器来处理静态资源。例如: ``` @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } } ``` 上面的配置启用了默认的DefaultServletHttpRequestHandler来处理静态资源。 3. 配置WebMvcConfigurer 可以通过实现WebMvcConfigurer接口来配置静态资源处理器。例如: ``` @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("/static/"); } } ``` 上面的配置将/static/目录下的所有静态资源映射到相对路径/static/中,即客户端可以通过浏览器直接访问/static/目录下的静态资源。 以上是三种常见的配置静态资源的方法,具体选择哪种方法,可以根据具体的需求来选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睆小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值