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

前言

  最近跟着视频在做一个分布式项目练练手,然后那个老师就说了下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页面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot引入swagger-ui 后swagger-ui.html无法访问404的问题

    最近给graphserver增加swagger,记录下过程与问题解决. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务,后端集成下Swagger,然后就可以提供一个在线文档地址给前端同学. 引入 Swagger pom中加入相关配置: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</art

  • 详解SpringBoot+Thymeleaf 基于HTML5的现代模板引擎

    序言: Thymeleaf 是Java服务端的模板引擎,与传统的JSP不同,前者可以使用浏览器直接打开,因为可以忽略掉拓展属性,相当于打开原生页面,给前端人员也带来一定的便利.如果你已经厌倦了JSP+JSTL的组合,Thymeleaf或许是个不错的选择!本工程传送门:SpringBoot-Web-Thymeleaf 开始使用 1.引入依赖 SpringBoot默认提供了Thymeleaf的Starter,只需简单引入依赖即可. <dependency> <groupId>org.s

  • spring mvc+localResizeIMG实现HTML5端图片压缩上传

    最近在做一个移动端HTML5的应用,使用到了上传功能,起初使用传统的上传方式上传手机拍照的照片,由于手机拍照出来的照片一般都是好几MB,所以上传速度是非常慢的. 在网上找了很久找到了localResizeIMG压缩框架,感觉非常的实用,所以在此分享给大家. 第一步:下载localResizeIMG localResizeIMG放在github中的,地址是:https://github.com/think2011/localResizeIMG. 第二步:在web工程中导入localResizeIM

  • spring boot请求异常处理并返回对应的html页面

    通过之前的学习,我知道中间件可以预处理http请求并返回相应页面(比如出现404异常,可以返回一个自己编写的异常界面,而非默认使用的白板404页面,很难看).其实spring boot也提供了这样的功能. 404异常处理: @Controller public class ErrorHandler404 implements ErrorController { private static final String ERROR_PATH = "/error"; @RequestMapp

  • spring boot 2.x html中引用css和js失效问题及解决方法

    在application.properties中配置了static的默认路径 我的static目录结构是这样的 index.html中这样引用css或者js文件,用到了th标签 html使用th标签需要先导入 以上这样配置好了之后发现网页的css和js果然加载出来了. 自定义拦截器失效 在自定义拦截器注册之后发现静态资源被拦截了,注释掉拦截器发现果然是拦截器的问题. 在注册方法上使用了excludePathPatterns()排除静态资源的拦截,发现该方法失效了,查看源码WebMvcConfig

  • 详解如何配置springboot跳转html页面

    本文主要介绍了如何配置springboot跳转html页面,分享给大家,具体如下: 1.首先在pom文件中引入模板引擎jar包,即: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 2.在application.properties中

  • springboot如何使用thymeleaf模板访问html页面

    引言 在传统的web开发中通常使用jsp页面,首先需要在pom文件中引入springmvc相关的包,然后写springmvc的配置文件(包括访问资源的路径解析),之后还需再web.xml中配置访问路由.这无疑太麻烦了,每次开发前都需要编写大量的配置文件. springboot为此提供了高效便捷的解决方案,只需再pom.xml中添加web开发的依赖,便可进行web开发,省去了繁琐的配置步骤. 下面为web开发引入的依赖 <dependency> <groupId>org.spring

  • Springboot访问html页面的教程详解

    1. 在原有的项目resouces目录下创建static包,并在static下创建pages,然后在pages包下hello.html. 这时你会发现hello.html并没有在static中,它跑哪去了呢?打开src下的webapp,发现有一个hello.htm,删除web.xml,并将hello.html用鼠标左键移到static目录下; hello.html代码: <!DOCTYPE html> <html> <head> <meta charset=&qu

  • SpringMVC+Ajax+拼接html字符串实例代码

    为什么写这个呢.因为在现在的网页中.单纯的同步传递数据已经变得非常少了.大多数都是通过Ajax异步来传递数据的.因此在这里用SpringMVC+Ajax做一个简单的小例子,同时辅助以拼接字符串显示.希望能为大家带来帮助. 本次案例的配置仍然是在上一篇SpringMVC的简单增删改查(SSM整合)的基础上再辅助配置Jackson的jar包. 服务器端 @RequestMapping("/ajaxlist") @ResponseBody//(springmvc的Jackson注解,返回js

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

    前言 最近跟着视频在做一个分布式项目练练手,然后那个老师就说了下freemakker生成静态页面后,然后讲了下思路:添加商品时生成对应的商品静态页面,访问通过nginx来访问静态页面,但是之后就啥也没做了 nginx我就懒得下载以及搭建了,直接用tomcat来代替,我的思路是这样:访问商品详情页面时,先判断有没有对应的静态页面,有就返回html,没有就走数据库然后返回jsp. 刚开始还傻傻认为springmvc既然jsp也能解析,html也没啥毛病,直接返回html,呵呵,果然不行. 下面是我自

  • 解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题

    新配置一个spring的MVC项目,发现对Get请求的中文参数出现了乱码: 查看了SpingMVC中关于编码的配置(在web.xml中),如下: <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param>

  • SpringMVC返回的ResponseEntity出现乱码及解决

    目录 返回ResponseEntity乱码 问题 原因 解决 ResponseEntity下载文件名中文乱码 解决办法 问题解决 返回ResponseEntity乱码 问题 前台通过数据到后台查询相关数据,结果是后台返回的数据出现中文出现乱码,如下图所示 原因 对于String类型,在没有在代码中明确指定编码类型的情况下,可能后台对传输的数据没有正确编码(本人的猜测,时间有限,后面有时间会跟下源码和看看文档,发现真正的原因) 解决 将String类型改为用户自定义的Pojo,如User等,或者改

  • SpringMVC文件上传中要解决的问题大汇总

    目录 SpringMVC文件上传中要解决的问题 一.中文文件名编码问题 二.文件位置存储问题 三.文件名冲突问题 四.控制文件类型和大小 五.上传图片回显问题 六.进度条问题 七.单独准备文件存储服务器 八.保存完整player信息进入数据库 SpringMVC文件上传中要解决的问题 一.中文文件名编码问题 通过过滤器解决 二.文件位置存储问题 放在当前项目下,作为静态资源,这样可以通过URL访问. package com.lanson.controller; import org.spring

  • ios微信浏览器返回不刷新问题完美解决方法

    开始用的表单提交,返回参数就丢失,换成url跳转,popstate监听 (注释部分)ios10测试始终有问题,继续搜,最后用pageshow,pagehide完美解决(另外说一句:珍爱生命,远离微信和ios) var wxback = { init :function(){ //隐藏微信分享按钮等 document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { WeixinJSBridge.call('hid

  • JavaScript监听手机物理返回键的两种解决方法

    JavaScript没有监听物理返回键的API,所以只能使用 popstate 事件监听. 有两个解决办法: 1.返回到指定的页面 pushHistory(); window.addEventListener("popstate", function(e) { window.location = 'http://www.baidu.com'; }, false); function pushHistory() { var state = { title: "title&quo

  • easyui form validate总是返回false的原因及解决方法

    最近做表单验证用了easyui form组件.又一次发现在测试表单都填写正确了但是调试表单的代码监测到调用form的"validate"方法总是返回false 最后查了一下原因在html中写的是easyui-validatebox但是在script中却又声明了$('#field1').combobox(); <form id="form1"> <input type="text" id="field1" cl

  • JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法

    本文实例讲述了JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法.分享给大家供大家参考,具体如下: 主页面: <script type="text/javascript"> function SelectGroupCust() { var temp = window.showModalDialog("Default2.aspx?xx=" + Date(), "", "dialog

  • Ajax回退刷新页面问题的解决办法

    Ajax 简介: AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 JavaScript和XML(标准通用标记语言的子集). AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 AJAX)如果需要更新内容,必须

  • node.js 核心http模块,起一个服务器,返回一个页面的实例

    如下所示: let http=require("http"); //引入核心http模块 let fs=require("fs"); let mime={ '.js':'application/javascript', '.css':'text/css' } //创建一个函数,req代表客户端,res代表服务器可写流 let listener=(req,res)=>{ //res是可写流,有write和end if(req.url==="/"

随机推荐