背景:原系统是由springboot jsp,所有访问都是jsp

现在需要做HTML5定位,要同时支持访问HTML5和JSP

在application.yml的spring标签下配置

  1. mvc:
  2. #view:
  3. # 页面默认前缀目录
  4. prefix: /WEB-INF/jsp/
  5. # 响应页面默认后缀
  6. suffix: .jsp
  7. # # 配置JSP视图名
  8. view-names: '*'
  9.  
  10. thymeleaf:
  11. cache: false
  12. prefix: /WEB-INF/html/
  13. suffix: .html
  14. mode: HTML5
  15. encoding: UTF-8
  16. view-names: html/*

  

发现访问jsp正常,html总是报500

看来还是没配置对

改成添加 配置文件,在配置文件中配置:

  1. @Configuration
  2. public class ViewResolverConfiguration {
  3. @Configuration//用来定义 DispatcherServlet 应用上下文中的 bean
  4. @EnableWebMvc
  5. @ComponentScan("com.*.**")
  6. public class WebConfig implements WebMvcConfigurer {
  7. @Bean
  8. public ViewResolver viewResolver() {
  9. InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  10. resolver.setPrefix("/WEB-INF/jsp/");
  11. resolver.setSuffix(".jsp");
  12. resolver.setViewNames("*");
  13. resolver.setOrder(2);
  14. return resolver;
  15. }
  16.  
  17. @Bean
  18. public ITemplateResolver templateResolver() {
  19. SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
  20. templateResolver.setTemplateMode("HTML5");
  21. templateResolver.setPrefix("/WEB-INF/");
  22. templateResolver.setSuffix(".html");
  23. templateResolver.setCharacterEncoding("utf-8");
  24. templateResolver.setCacheable(false);
  25. return templateResolver;
  26. }
  27.  
  28. @Bean
  29. public SpringTemplateEngine templateEngine() {
  30. SpringTemplateEngine templateEngine = new SpringTemplateEngine();
  31. templateEngine.setTemplateResolver(templateResolver());
  32. return templateEngine;
  33. }
  34.  
  35. @Bean
  36. public ThymeleafViewResolver viewResolverThymeLeaf() {
  37. ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
  38. viewResolver.setTemplateEngine(templateEngine());
  39. viewResolver.setCharacterEncoding("utf-8");
  40. viewResolver.setOrder(1);
  41. viewResolver.setViewNames(new String[]{"html/*"});
  42. return viewResolver;
  43. }
  44.  
  45. @Override
  46. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  47. configurer.enable();
  48. }
  49. }
  50. }

pom.xml中添加依赖:

  1. <dependency>
  2.   <groupId>org.springframework.boot</groupId>
  3.   <artifactId>spring-boot-starter-thymeleaf</artifactId>
  4. </dependency>

大部分中都是访问jsp的

在jsp页面访问后台controller里返回页面

return "/a/b/c";  这种绝对地址开头;

在html页面访问后台controll里返回页面

return "html/location";    不以"/"开头;

jsp和html路径

WEB-INF/jsp/***

WEB-INF/html/***

到此:两种访问都没问题

但引发一个问题:对于jsp对应的Controller当返回json内容里,方法有注解@ResponseBody,返回到前台中文会乱码成????

解决方案:

  在上面类ViewResolverConfiguration 中类WebConfig 中添加

  1.      @Bean
  2. public HttpMessageConverter<String> responseBodyStringConverter() {
  3. StringHttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
  4. return converter;
  5. }
  6.  
  7. @Bean
  8. public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
  9. MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
  10. ObjectMapper objectMapper = new ObjectMapper();
  11. mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
  12. //设置中文编码格式
  13. List<MediaType> list = new ArrayList<MediaType>();
  14. list.add(MediaType.APPLICATION_JSON_UTF8);
  15. mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
  16. return mappingJackson2HttpMessageConverter;
  17. }
  18.  
  19. @Override
  20. public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
  21. //解决中文乱码
  22. converters.add(responseBodyStringConverter());
  23. //解决 添加解决中文乱码后 上述配置之后,返回json数据直接报错 500:no convertter for return value of type
  24. converters.add(getMappingJackson2HttpMessageConverter());
  25. }

这样,两种访问都可以

注意:这里顺序

jsp    resolver.setOrder(2);

html  viewResolver.setOrder(1);

如果换成1,2,则html不能访问

order值越小,优先级越高,不知道为啥不行呢?

springboot同时支持访问html5和jsp时,导致后台ResponseBody返回中文乱码的更多相关文章

  1. Springboot @ResponseBody返回中文乱码

    最近我在把Spring 项目改造Springboot,遇到一个问题@ResponseBody返回中文乱码,因为response返回的content-type一直是application/json;ch ...

  2. JSP的学习(4)——中文乱码的解决

    本篇将以JSP页面中可能存在的中文乱码问题进行分析和解决. 中文乱码的问题一直是国人在编程过程中的一大头疼问题,这点上在JSP.Servlet或Tomcat上随处可见.比如我们在写一个Servlet时 ...

  3. idea下启动tomcat时,打印的日志中文乱码

    idea2018.2+tomcat8+java8+win10 异常:将编码方式全都修改为UTF-8后,且tomcat的VM启动参数中配置了:-Dfile.encoding=UTF-8.导致控制台日志打 ...

  4. JSP学习(一)之中文乱码问题的解决

    一.响应中的乱码 我们所看到的页面,是由服务器把内容放入响应(response)中,然后发送给浏览器的.如果响应中的数据无法被正常解析,就会出现中文乱码.为什么英文不存在乱码问题?因为无论是ISO-8 ...

  5. Eclipse 创建文件快捷菜单、避免格式化时自动换行、.properties文件中文乱码、在线安装FreeMarker

    创建文件快捷菜单设置 打开窗口“Customize Perspective - Java EE”,切换选项卡到“Shortcuts”: 进行一下配置: “Generate”:如上图勾选方式 " ...

  6. Web(Jsp+ Servlet)开发中如何解决中文乱码问题

    1.中文乱码的成因 编码的字符集和解码的字符集不一致. 2.web开发过程中可能出现的乱码的位置及解决方案 ①request乱码 在向服务器传递数据时,所传递的中文有可能出现乱码. post请求(协议 ...

  7. hibernate连接时指定编码方式 hibernate中文乱码问题

    <property name="connection.url">jdbc:mysql://localhost:3306/cms?useUnicode=true& ...

  8. Springboot使用FastJson后,接口返回中文乱码的问题解决。

    哎,天下文章一大抄,到处都是一模一样的教你怎么替换掉jackson成fastjson的,可后续中文乱码网上居然没一篇文章.翻了一会源码还是写个文章共享下吧.免得后来人又浪费时间折腾. 在springb ...

  9. JSP中Get提交方式的中文乱码解决

    最近对JSP&Servlert的原理很感兴趣,所以今天花时间看了一下:无奈在一个编码问题上困扰很久 这是我的解决思路: (1)检查网页(html/jsp)页面的编码: (2)检查服务器端的处理 ...

随机推荐

  1. 【转帖】Linux 桌面进化史

    Linux 桌面进化史 https://www.oschina.net/news/109440/how-linux-desktop-grown 与之前认识到的一样 桌面最开始 是 施乐公司研发的. 后 ...

  2. redis主从复制初识

    一.作用 slave会通过被复制同步master上面的数据,形成数据副本 当master节点宕机时,slave可以升级为master节点承担写操作. 允许有一主多从,slave可以承担读操作,提高读性 ...

  3. Kubernetes---Pod hook

    Pod hook(钩子)是由Kubernetes管理的kubelet发起的,当容器中的进程启动前或者容器中的进程终止之前运行,这是包含在容器的生命周期之中.可以同时为Pod中的所有容器都配置 hook ...

  4. 第一次安装Dev-c++编译器如何设置?Dev-c++神奇功能

    安装完Dev-c++后,我们通常会根据自己的喜好调整设置,以下是个人的做法,欢迎参考. 1.字体 字体在安装界面就可以更改.默认字体是consolas,个人喜欢下面的courier new 有些字体很 ...

  5. Python 常用外部模块详解

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  6. Path.Combine(

    // 获取程序的基目录. var dir1 = System.AppDomain.CurrentDomain.BaseDirectory; // 获取模块的完整路径. var dir2 = Syste ...

  7. Spring在Thread中注入Bean无效的解决方式

    在Spring项目中,有时需要新开线程完成一些复杂任务,而线程中可能需要注入一些服务.而通过Spring注入来管理和使用服务是较为合理的方式.但是若直接在Thread子类中通过注解方式注入Bean是无 ...

  8. vue项目中导出PDF的两种方式

    参考大家导出的方式,基本上是如下两种: 1.使用 html2Canvas + jsPDF 导出PDF, 这种方式什么都好,就是下载的pdf太模糊了.对要求好的pdf这种方式真是不行啊! 2.调用浏览器 ...

  9. 小知识:修改IDEA的模板

    小知识:修改IDEA的模板 有时候我们会发现,IDEA默认创建的模板并不是我们常用的.与其每次都在创建后进行修改,不如直接对模板进行修改. 给不知道怎么修改的同学指一下路: File->sett ...

  10. python之字符串类型的格式化

    python之字符串类型的格式化 要点:python字符串通过format()方法进行格式化处理.(Python语言同时支持两种字符串格式化方法,一种类似C语言中printf()函数的格式化方法,支持 ...