springboot项目访问html页面,发现端口不一致&继承WebMvcConfigurationSupport类会导致自动配置失效

黑马程序员的瑞吉外卖:springboot项目访问html页面,发现端口不一致的解决方案(在使用SpringMvc)

错误内容:明明已经设置静态资源映射,但是还是端口不一致。

@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
    /**
     * 设置静态资源映射
     * @param registry
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("开始进行静态资源映射...");
        registry.addResourceHandler("/static/backend/**").addResourceLocations("classpath:/backend/");
        registry.addResourceHandler("/static/front/**").addResourceLocations("classpath:/front/");
    }
}

在IDEA中用浏览器单独打开html页面后,发现页面的端口号为63342,与接口所写的8080端口不一致,因此无法连接网页,会报404异常。因为tomcat访问接口的时候默认端口号为8080,而idea运行页面的时候默认为63342。即在默认的静态资源过滤策略不能满足开发需求的情况下,可以去自定义静态资源过滤策略。即文件放在static目录下时,可通过8080端口访问到html页面。

1.直接在浏览器中输入http://localhost:8080/你要访问的html页面的名称。

2.如果方法一不行,则在config文件下实现一个WebMvcConfigure接口,(自定义静态资源过滤效率).

import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyConfig implements WebMvcConfigurer {
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //扫描static下的所有html页面
        registry.addResourceHandler("classpath:/static/*.html");
        //扫描static下的所有资源
        registry.addResourceHandler("/static/**");
    }
}
设置完毕后,在浏览器中输入http://localhost:8080/+你要访问的html页面的名称  即可访问

以上为百度搜出来的解决方法,试了行不通。

后面再仔细看我原来的代码,发现路径里多了一个static,欲哭无泪TT。但是删了以后还是不行。

看到的弹幕:

“还是访问不到的可以在主程序加个componentscan注解指明扫描的路径”

“不生效的注意项目结构 配置类要在启动类同包或者子包下”

“如果出错,可以试试protected class WebMvcConfig implements WebMvcConfigurer,实现方法改为public”

“访问不到的,可能是@Configuration没加”

“感谢各位大哥 重启一下 可以了”

重启了一下之后,

 解决一下端口占用 

结果还是不行,所以我将端口号改为8081.

可以是可以了,但是当我打开我的目标页面login.html的时候,我发现。。。端口号变成8080了。

 我只能说6,我都怀疑是操作太多,网络没反应过来。。。。把所有占用8080端口的进程全部delete,重启idea。

 还是不行。就是一整个离谱住了。。。。。。。。。。。。。。。。明天早上再看看。

现在的问题就在于,我的tomcat不能配置8080端口,然后我的静态资源们,默认使用8080端口。

我打开了我之前使用8080启动的端口,发现它们也不行了,所以应该这个是我电脑本身的问题吧?

在网上search了一圈,发现8080端口被占用是很正常的问题,那我这时候就给它换一个端口号就好了。那么现在的问题就是我的静态资源应该如何成功完成映射?

首先将我的端口改为8081,然后通过postman发送请求到我的服务端。结果发现显示:

 

 莫非是我的controller也写错了。

现在真的是错得找不到东南西北了。开始重新思考问题,前端页面打开一个端口,后端页面打开一个端口,而我的tomcat启动服务时的端口和后端是相同的,也就是说我的前端没有真正地映射过去。于是查看设置静态资源的文件。好像也没错。

再运行一次看看,并且在浏览器手动输入网址。

上网查找解决方法。 

历尽千辛万苦,终于找到了一个解决方法。感谢CSDN博主Turing.

 按照这个文件修改了我的config文件之后,在浏览器输入“localhost:8081/backend/page/login/login.html”终于实现了正常的端口访问,并且可以正常地与我所写的controller交互。

总结:

最后的解决方法“在config--WebMvcConfig中不要继承WebMvcConfigurationSupport,而是实现WebMvcConfigurer接口”,且不要在idea中直接点击浏览器图标打开对应的html页面,要自己在浏览器输入url。在本次debug过程中,更加清楚地明白了,springboot项目启动过程中,只扫描引导类同包或子包下的程序,而在resources目录下的静态资源文件(没放到),需要被映射,才能被扫描到。每次run之前,先clean后install。

分析问题的思路:

明确问题“我的tomcat不能配置8080端口,然后我的静态资源们,默认使用8080端口。”
这其中,首先解决前者,不能配置8080端口,究竟是我的设备的问题,还是我的程序的问题。通过重启idea、重启设备、在命令行窗口中kill占用端口8080进程,发现都不起作用,项目还是不能run。所以我给它换一个端口,换成8081,发现程序可以正常run了。并且在互联网上search了一下之后,发现端口8080被占用是一个蛮正常的事情。
所以我开始着手解决后者,为什么我的静态资源默认使用8080端口呢?那原因肯定是设置的映射配置不对。所以我首先通过浏览器访问理想中正确的url,得到了“Writeable Page Error”。再去搜索这个问题的解决方法,最后在茫茫篇海中发现了我的主要问题是:
                       “继承WebMvcConfigurationSupport后导致静态资源无法访问”。

然后再去修改对应的代码。

至于原因:搜索关键字“继承WebMvcConfigurationSupport类会导致自动配置失效”。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
你可以通过配置 Spring Boot 的视图解析器和控制器来实现在访问默认端口时跳转到 index 页面。 1. 配置视图解析器 在 Spring Boot 项目中,你可以通过在 application.properties 或 application.yml 文件中添加以下配置配置视图解析器: application.properties: ``` spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp ``` application.yml: ``` spring: mvc: view: prefix: /WEB-INF/views/ suffix: .jsp ``` 这里我们使用 JSP 页面作为示例,你也可以使用其他类型的视图。 2. 创建控制器 在 Spring Boot 中,你可以使用 @Controller 注解来声明一个控制器。在控制器中,你可以使用 @RequestMapping 注解来指定请求的 URL 和 HTTP 方法。 在我们的示例中,我们需要创建一个控制器来处理根路径的请求。在控制器中,我们可以使用 @RequestMapping("/") 注解来指定根路径的请求。我们还可以使用 @GetMapping 注解来指定 GET 请求。在控制器的方法中,我们可以使用 ModelAndView 对象来指定要返回的视图和模型数据。 下面是一个示例控制器的代码: ```java @Controller public class HomeController { @GetMapping("/") public ModelAndView home() { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("index"); return modelAndView; } } ``` 这个控制器处理根路径的 GET 请求,返回名为 "index" 的 JSP 页面。 3. 配置默认端口 在 Spring Boot 中,默认的端口号是 8080。如果你想要更改默认端口号,可以在 application.properties 或 application.yml 文件中添加以下配置: application.properties: ``` server.port=8081 ``` application.yml: ``` server: port: 8081 ``` 这里我们将端口号设置为 8081。 现在,当你访问 http://localhost:8081/ 时,就自动跳转到 index 页面

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值