当前位置: 首页 > news >正文

安徽金路建设集团有限公司网站百度关键词排行榜

安徽金路建设集团有限公司网站,百度关键词排行榜,品牌展板设计制作,建设工程安全信息网SpringMVC的中文乱码问题其实已经不是什么问题了#xff0c;无非就是配置编码方式-解决问题。 但是由于SpringMVC可以通过#xff1a;xml方式配置、Servlet3.0方式配置#xff0c;以及是否使用EnableWebMvc等#xff0c;不同配置方式下#xff0c;解决中文乱码问题的…SpringMVC的中文乱码问题其实已经不是什么问题了无非就是配置编码方式-解决问题。 但是由于SpringMVC可以通过xml方式配置、Servlet3.0方式配置以及是否使用EnableWebMvc等不同配置方式下解决中文乱码问题的方案有所不同。 xml配置的方式 xml配置方式的解决方案最简单 filterfilter-nameCharacterEncodingFilter/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueutf-8/param-value/init-paraminit-paramparam-nameforceRequestEncoding/param-nameparam-valuetrue/param-value/init-paraminit-paramparam-nameforceResponseEncoding/param-nameparam-valuetrue/param-value/init-param/filterfilter-mappingfilter-nameCharacterEncodingFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping在web.xml文件中加编码过滤器并强制过滤器对Request和Response都生效可以解决request请求、以及response返回参数中的中文乱码问题。 但是返回体也就是response body中的中文乱码问题以上过滤器方案无法解决。 Response body中的中文乱码问题需要在spring MVC中增加以下配置 mvc:annotation-driven !--设置响应输出字符集--mvc:message-convertersbean classorg.springframework.http.converter.StringHttpMessageConverterproperty namesupportedMediaTypeslistvaluetext/html;charsetutf-8/value/list/property/bean/mvc:message-converters/mvc:annotation-driven前面一篇文章[Spring MVC 五DispatcherServlet初始化之 mvc:annotation-driven] 分析过mvc:annotation-driven /标签的解析过程该标签在创建RequestMappingHandlerAdapter的过程中会读取到xml文件中messageConverters的定义并设置到RequestMappingHandlerAdapter对象的messageConverters属性中并最终在DispatcherServlet处理请求的过程中生效。 Servlet3.0配置 Servlet3.0的配置方式是指通过WebApplicationInitializer接口完成SpringMVC配置的方式。 可以通过接口方法getServletFilters增加编码过滤器 public class MvcInitializerextends AbstractAnnotationConfigDispatcherServletInitializer {Overrideprotected Class?[] getRootConfigClasses() { // return null;return new Class[] {RootConfiguration.class};}Overrideprotected Class?[] getServletConfigClasses() { // return null;return new Class[] {MvcConfiguration.class,CommonConfiguration.class};}Overrideprotected String[] getServletMappings() {return new String[] {/};}Overrideprotected Filter[] getServletFilters() { // ShallowEtagHeaderFilter shallowEtagHeaderFilter new ShallowEtagHeaderFilter(); // shallowEtagHeaderFilter.setWriteWeakETag(true);CharacterEncodingFilter characterEncodingFilter new CharacterEncodingFilter();characterEncodingFilter.setEncoding(utf-8);characterEncodingFilter.setForceEncoding(true);return new Filter[]{characterEncodingFilter};} }以上方式增加过滤器后可以解决request和response请求及返回参数中的中文编码问题。 但是无法解决response body的中文乱码问题。 由于WebApplicationInitializer接口并没有提供任何关于messageConverters的接口看了很多遍源码也并没有找到可以配置的地方网上也没有找到相关解决方案…所以解决这个问题还是费了很多周折。 由于我们已经知道response body的中文乱码问题最终是通过RequestMappingHandlerAdapter对象的messageConverters解决的所以还是想通过定制化RequestMappingHandlerAdapter的初始化过程、设置其messageConverters的方式解决问题。 如果没有定制化处理的话DispatcherServlet在初始化的过程中是在initStrategies方法中创建DispatcherServlet.properties文件中默认的RequestMappingHandlerAdapter是通过反射机制直接new出来的最终会调用到RequestMappingHandlerAdapter的默认构造器 public RequestMappingHandlerAdapter() {this.messageConverters new ArrayList(4);this.messageConverters.add(new ByteArrayHttpMessageConverter());this.messageConverters.add(new StringHttpMessageConverter());try {this.messageConverters.add(new SourceHttpMessageConverter());}catch (Error err) {// Ignore when no TransformerFactory implementation is available}this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());}默认构造器会直接new一个StringHttpMessageConverter()加进来不修改的话StringHttpMessageConverter的默认字符集是ISO_8859_1一定会出现中文乱码问题 public static final Charset DEFAULT_CHARSET StandardCharsets.ISO_8859_1;所以我们必须找到某种方式可以定制化RequestMappingHandlerAdapter的初始化过程。 继续分析源码 private void initHandlerAdapters(ApplicationContext context) {this.handlerAdapters null;if (this.detectAllHandlerAdapters) {// Find all HandlerAdapters in the ApplicationContext, including ancestor contexts.MapString, HandlerAdapter matchingBeans BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerAdapter.class, true, false);if (!matchingBeans.isEmpty()) {this.handlerAdapters new ArrayList(matchingBeans.values());// We keep HandlerAdapters in sorted order.AnnotationAwareOrderComparator.sort(this.handlerAdapters);}}else {try {HandlerAdapter ha context.getBean(HANDLER_ADAPTER_BEAN_NAME, HandlerAdapter.class);this.handlerAdapters Collections.singletonList(ha);}catch (NoSuchBeanDefinitionException ex) {// Ignore, well add a default HandlerAdapter later.}}// Ensure we have at least some HandlerAdapters, by registering// default HandlerAdapters if no other adapters are found.if (this.handlerAdapters null) {this.handlerAdapters getDefaultStrategies(context, HandlerAdapter.class);if (logger.isTraceEnabled()) {logger.trace(No HandlerAdapters declared for servlet getServletName() : using default strategies from DispatcherServlet.properties);}}}发现initHandlerAdapters方法首先会从Spring容器中获取HandlerAdapter 我们是否有办法定制一个HandlerAdapter、加入到Spring容器中Spring当然给我们提供了这种机会回想一下ConfigurationBean注解是否就可以解决 在MvcConfig文件中增加如下代码 Configuration ComponentScan({org.example.controller}) public class MvcConfiguration {Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver viewResolver new InternalResourceViewResolver();viewResolver.setPrefix(/WEB-INF/pages/);viewResolver.setSuffix(.jsp);return viewResolver;}//定制RequestMappingHandlerAdapterBeanpublic RequestMappingHandlerAdapter handlerAdapter(){RequestMappingHandlerAdapter handlerAdapter new RequestMappingHandlerAdapter();ListHttpMessageConverter? messageConverters;messageConverters new ArrayList(4);messageConverters.add(new ByteArrayHttpMessageConverter());StringHttpMessageConverter stringHttpMessageConverter new StringHttpMessageConverter(Charset.forName(UTF-8));messageConverters.add(stringHttpMessageConverter);try {messageConverters.add(new SourceHttpMessageConverter());}catch (Error err) {// Ignore when no TransformerFactory implementation is available}messageConverters.add(new AllEncompassingFormHttpMessageConverter());handlerAdapter.setMessageConverters(messageConverters);return handlerAdapter;}参考RequestMappingHandlerAdapter默认构造器的代码修改其中StringHttpMessageConverter的创建过程、设置其默认字符集为UTF-8…验证后发现问题已解决 使用EnableWebMvc 由于EnableWebMvc是必须和configuration配合使用的所以一定会存在配置类。这种情况下配置类实现WebMvcConfigurer、通过扩展extendMessageConverters方法解决 Configuration EnableWebMvc ComponentScan({org.example.controller}) public class MvcConfiguration implements WebMvcConfigurer{public MvcConfiguration(){System.out.println(mvc configuration constructor...);} // 通过EnableWebMVC配置的时候起作用Overridepublic void extendMessageConverters(ListHttpMessageConverter? converters) {for(HttpMessageConverter httpMessageConverter:converters){if(StringHttpMessageConverter.class.isAssignableFrom(httpMessageConverter.getClass())){((StringHttpMessageConverter)httpMessageConverter).setDefaultCharset(Charset.forName(UTF-8));}}}}上一篇 Spring MVC 五DispatcherServlet初始化之 mvc:annotation-driven
http://www.hkea.cn/news/14401148/

相关文章:

  • 岳阳市 网站建设阿里巴巴个人网站怎么做
  • 购物网站的前台功能上海石化有做网站设计的吗
  • 百度云盘做网站文山网站建设求职简历
  • php thml怎样做网站个人主页网站设计代码
  • 网站建设流程策划怎么开发公众号平台
  • 网站流量站怎么做2022年国内重要新闻
  • 有服务器可以做网站吗达州城乡建设网站
  • 专业上海网站建设公司哪家好企业网站建设解决方案报告论文
  • 服务器迁移对做网站的影响沈阳专业seo关键词优化
  • 做商业网站要交税吗网站反链增加
  • 如何建设淘宝客网站前端个人网站怎么做
  • 网站如何做反链中国seo关键词优化工具
  • 自助建站系统建的网站做排名吗抖音代运营一般收费
  • 深圳成品网站超市在网站加上一个模块怎么做
  • 一个网站怎么做软件好用吗网页制作标准
  • 家装行业网站建设网站蜘蛛怎么看
  • 免费做公众号的网站昆明自助建站模板
  • 尤溪住房和城乡建设局网站磁力搜索器 磁力猫
  • 广东 网站建设wordpress 文章浏览次数
  • 网站开发的硬件环境淘宝网站建设不允许
  • 南阳做那个网站好中国建设基础设施总公司 网站
  • 网站如何做关键词排名crm客户管理系统简介
  • 网站建设方案分析广告设计网站排行榜前十名
  • 三只松鼠网站推广策略怎样创建网站平台
  • 中小企业网站建设信息cms适合做什么网站
  • 做旅游项目用哪家网站好网站建设的组织机构
  • 怎么检查网站有没有做跳转精准扶贫网站建设目的
  • 安丘网站建设aqfeifan河南郑州新闻
  • 做网站需要服务器查询吗wordpress .mo .po
  • 临检中心网站建设wordpress 仿头条主题