最近处理了一个上传文件后乱码的问题,下午无心工作,写此文记录此次事故。 项目使用struts1作为MVC框架,在项目运行过程中,出现了文件上传中文乱码的问题。 经排查,发现是代码在后端获取了输入流,读取存储到一个字节数组,但是在将字节数组转成字符串的时候,没有指定编码,导致后面的程序拿到的文件名一直是乱码,此处建立字符串指定编码即可解决。 new String(m_binArray, start, (end - start) + 1,"GBK"); web项目乱码的问题处理,万变不离其宗,进行下述操作一般可以解决。 将页面的编码和后端的编码统一设置 <%@ page language="java" pageEncoding="GBK"%> request.setCharacterEncoding("GBK"); response.setCharacterEncoding("GBK"); 后端过滤器统一处理编码 form表单提交的编码也要设置 accept-charset="GBK" enctype="multipart/form-data" 如果确定前后端.... 有更新! web项目乱码的问题处理 程序人生
引入maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>examples</artifactId> <groupId>cn.com.wyl</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>struts.... 有更新! spring整合struts 程序人生
action配置多个路径 配置xml <package name="helloAction" extends="struts-default,json-default" namespace="/myHello" > <action name="helloWorld" class="helloAction"> <result name="helloPage">/WEB-INF/hello.jsp</result> <result name="sayHello" type="json"> <param name="root">user</param> </result> </action> </package> 在action中定义多个result,如上,第一个路径返回的是页面,第二个路径返回了一个json数据 action配置 action中也要配置对应的方法 import cn.com.wyl.examples.struts.entity.User; import .... 有更新! struts一个action对应多个路径和json数据支持 程序人生
1、web.xml中指定位置 此处,我只修改了struts.xml文件的位置,structs默认是从WEB-INF的classes目录下加载配置文件的,对应打包后的路径,自己根据需求修改即可 <!-- struts配置 --> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-plugin.xml,struts/struts.xml</param-value> </init-param> </filter> <filter-map.... 有更新! struts修改配置文件位置 程序人生
1、错误信息 2、问题跟踪及处理 可以看到,这个方法传递了一个Class对象和类加载器和一个字段给clearMap方法 进入clearMap方法,方法根据class对象获取属性,此时报出了属性找不到的错误 打开tomcat的源码查看这个被反射的类org.apache.catalina.loader.WebappClassLoader(tomcat源码地址) 在这个类中发现,他继承了org.apache.catalina.loader.WebappClassLoaderBase,自己本身没有定义属性 进入WebappClassLoaderBase类中,可以找到resourceEntries字段 查看WebappClassLoaderBase的注释信息发现从7.0.64往后的版本,添加了WebappClassLoaderBase用来作为类加载器 此时有两个解决方案,一是对structs版本升级,但是这样的话,对应的其他依赖版本也要升级,代价太大,第二个方法较为简单,直接更换tomcat版本使其版本号<7.0.64即可,我换了7.0.63就正常了 有更新! struct2在tomcat运行报错--java.lang.NoSuchFieldException resourceEntries 程序人生