Springmvc返回html页面问题如何解决

作者:爱编程DE文兄 时间:2021-07-05 09:29:45 

前言

最近跟着视频在做一个分布式项目练练手,然后那个老师就说了下freemakker生成静态页面后,然后讲了下思路:添加商品时生成对应的商品静态页面,访问通过nginx来访问静态页面,但是之后就啥也没做了

nginx我就懒得下载以及搭建了,直接用tomcat来代替,我的思路是这样:访问商品详情页面时,先判断有没有对应的静态页面,有就返回html,没有就走数据库然后返回jsp。

刚开始还傻傻认为springmvc既然jsp也能解析,html也没啥毛病,直接返回html,呵呵,果然不行。

下面是我自己的过往经验和度娘结合历经的坑:

1.首先我做的是伪静态,dispatcherServlet的拦截路径是*.html


<servlet-mapping>
   <servlet-name>e3-item-web</servlet-name>
   <!-- 伪静态化 -->
   <url-pattern>*.html</url-pattern>
 </servlet-mapping>

那我返回的html应该被springmvc给拦截,那我加资源映射不就行了嘛(item文件夹在webapp下,用来存放生成的html页面的)

<mvc:resources location="/item/" mapping="/item/**"></mvc:resources>

结果不行,找不到页面,其实我也纳闷,按正常它拦截html页面后发现找不到对应的处理器来处理,应该会找资源映射到我的item下去找的;这种方法以失败告终!

2.看了一些博客,有人已经扯到了springmvc的 / 和 /* 的区别,弄到tomcat下的web.xml,真的分析很透彻,我都被它的文章给征服了。文章建议到项目的web.xml下加下面的语句:


<servlet-mapping>
   <servlet-name>jsp</servlet-name>
   <url-pattern>*.html</url-pattern>
 </servlet-mapping>

然后我就屁颠屁颠得加上了,再然后...不行。还有其他文章跟它 的做法类似,比如加入下面的这个:


<servlet-mapping>
   <servlet-name>default</servlet-name>
   <url-pattern>*.html</url-pattern>
 </servlet-mapping>

好,这类方式也是以失败告终,其实当时挺崩溃的,毕竟只是返回个html就得那么麻烦,不过还是建议大家不要用tomcat返回html页面,效率和性能上没有nginx好,是我自己作偷个懒

3.还有建议我自定义一个解析器,解析html页面,不过我没照做,因为代码都是错的,错误的东西就不放了。

4.然后确实有一篇文章真的可以返回html页面,不过具体的做法我就不贴了,因为有缺陷,它是直接把html页面当作jsp来解析了,按它的做法做,html行了,然后jsp就解析不了,我的需求是根据判断是返回html还是jsp,两个都能解析,所以这种方式我也没采纳

5.我还尝试过用原生的request和response来转发和重定向到页面,还是不行,那个建议的哥们还很自信得说用requst不就行了嘛,呵呵

6.其实还有一些坑,不过就不详细说了,毕竟大家是来找解决方法的,不是听我诉苦,下面讲我的解决方案。

解决方案:

因为我springmvc.xml配置的是拦截html,我灵机一动,html页面的后缀也不只是html,不是还有htm嘛,于是我把生成的静态页面的代码后缀改成htm,然后controller的handler方法返回htm,果然springmvc没拦截我的请求,页面也能展示,但是会乱码,在说乱码解决方法前,我说一些小问题:

1.由于你jsp和html都要能返回,那在配置文件就不要配置后缀了,前缀看你具体的存储位置看要不要配

2.返回的路径,以“/”开头是相对于webapp下的

返回的html页面乱码解决方案:

真的,这个html页面乱码,有人搞什么解析器,过滤器等等让我配,一个都不行,之后直接一行代码搞定,在<head>标签添加下面一条语句:

<meta charset="utf-8" />

问题不就解决了吗?还搞那么多花里胡哨的。之后我还得提醒下大家,你如果获取了html页面,下次再获取时请刷新缓存,不然你发出的请求其实根本没到服务器,浏览器直接给你返回之前的一个html页面

来源:https://www.cnblogs.com/ibcdwx/p/13832987.html

标签:Spring,mvc,html
0
投稿

猜你喜欢

  • Spring MVC Mybatis多数据源的使用实例解析

    2022-02-13 20:37:19
  • 关于Android 4.4相机预览、录像花屏的问题的解决方法

    2023-01-21 11:50:26
  • Android自定义带动画的半圆环型进度效果

    2022-02-08 09:31:15
  • 基于Map的computeIfAbsent的使用场景和使用方式

    2023-04-30 03:04:06
  • C#、ASP.NET通用扩展工具类之LogicSugar

    2023-11-18 09:56:07
  • Spring实现默认标签解析流程

    2021-07-29 10:07:55
  • C#实现钟表程序设计

    2023-01-01 06:38:42
  • Spring中BeanFactory FactoryBean和ObjectFactory的三种的区别

    2022-02-21 22:43:58
  • Android图片翻转动画简易实现代码

    2023-03-12 02:33:35
  • Android开发中Toast显示消息的方法小结

    2023-07-31 20:29:14
  • 详解SHA-256算法的原理以及C#和JS的实现

    2023-07-01 15:49:58
  • C# 实现FTP客户端的小例子

    2022-06-09 13:19:13
  • 客户端实现蓝牙接收(C#)知识总结

    2021-11-21 22:17:11
  • java调用微信现金红包接口的心得与体会总结

    2022-12-22 19:55:12
  • jenkins安装及其配置笔记

    2022-10-03 11:01:19
  • java 中HashCode重复的可能性

    2021-09-13 17:38:05
  • 鉴权认证+aop+注解+过滤feign请求的实例

    2022-06-05 14:25:34
  • 浅谈对c# 面向对象的理解

    2021-06-18 18:15:52
  • Java利用cors实现跨域请求实例

    2023-02-24 14:57:35
  • 浅谈AnDroidDraw+DroidDraw实现Android程序UI设计的分析说明

    2023-09-28 20:41:51
  • asp之家 软件编程 m.aspxhome.com