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


猜你喜欢
- 这篇文章主要介绍了Java继承方法重写实现原理及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 前言老规矩,还是从最简单粗暴的开始。那么多简单算简单?多粗暴算粗暴?我告诉你可以不写一句代码,你信吗?直接把一个文件往IIS服务器上一扔,就
- 本文实例讲述了Android编程动态按钮实现方法。分享给大家供大家参考,具体如下:第一种: 该方法通过onTouch来实现,btn3 = (
- 一、修改版本和指定生成APK文件名【可选】将项目切换到Project视图,打开app目录下的build.gradle文件1.1 修定软件版本
- 以下是app.config或web.config的定义,定义了一个参数,键为Isinit,值为false<?xml version=&
- 这篇总结的形式是提出个问题,然后给出问题的答案。这是目前学习知识的一种尝试,可以让学习更有目的。Q1.什么时候应当重写对象的equals方法
- SpringMVC支持的数据校验是JSR303的标准,通过在bean的属性上打上@NotNull、@Max等进行验证。JSR303提供有很多
- 1.拉取centos镜像docker pull centos:72.基于拉取到的镜像运行一个容器docker run -it --name
- 需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启、程序升
- 在Java中,HashMap是一种常用的数据结构,它以键值对的形式存储和管理数据。然而,由于HashMap在多线程环境下存在线程安全问题,因
- 本文实例讲述了Android编程处理窗口控件大小,形状,像素等UI元素工具类。分享给大家供大家参考,具体如下:/*** 处理窗口控件大小,形
- 背景出现了一次生产事故,事情是这样的,我们有一个项目,Java访问数据库的框架使用的是MyBatis。然后一个业务员在系统中查询了一个订单,
- 前言有些朋友可能是从事开发工作的时间不是特别的长,所以觉得Service相对与另外两个组件activity、broadcast receiv
- 说点对这几个容易混淆的词的理解:1、c++中的virtual方法的 virtual关键字主要是防止继承中重复继承父类的同一个方法而设置的标识
- 本文实例为大家分享了Android EventBus普通事件和粘性事件,供大家参考,具体内容如下展示效果 添加EventBus导入依赖com
- 前言很多微信公众号中需要生成推广海报的功能,粉丝获得专属海报后可以分享到朋友圈或发给朋友,为公众号代言邀请好友即可获取奖励的。海报自带渠道二
- 前言经过前面对 Kotlin 的介绍,相信大家已经能对 Kotlin 有了一个基本的认识。 从这节开始,我就为大家讲解 Kotlin的方法以
- 这篇文章主要介绍了Java集合使用 Iterator 删除元素,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 一:将String字符串放在最前面防止发生NullPointerException异常,我们通常把String字符串放在equals方法的左
- 前言在【Android】线程间通信 - Handler之使用篇主要讲了 Handler 的创建,发送消息,处理消息 三个步骤。那么接下来,我