struts框架没有对请求数据乱码问题做专门处理,因此在使用struts框架时,也需要对请求数据的中文乱码问题,做特殊处理。在struts中对请求数据中的乱码问题,主要有三种方法:
1.通过配置过滤器,由过滤来处理请求数据乱码问题。过滤将对request进行重新包装,将包装后的request放行
2.重写ActionServlet类,重写的类可以继承struts中的ActionServlet。在struts的配置文件中指定strust利用重写的actionServlet来处理所有.do请求。重写的actionServlet类需要在调用doPost或doGet方法前,指定request的编码方式
3.重写RequestProcess类,此类可以继承Struts中的RequestProcess类,同样需要在struts配置文件中(在<controller标签中指定重写的请求处理器),指定struts利用重新的请求处理器来处理所有用户请求。重写的RequestProcess方法前,需要在调用Process方法前,指定request的编码方式。
不过再这三种方法中,最好的解决办法还是通过过滤器来解决。其余两种方法不推荐,不过通过其余两种方法,可以看出,开发者可以对struts1框架进行增强,以此来满足项目上的某些特定需求。
下面是地二三种方法的示例代码:
//注册jsp页面代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>test jsp page</title>
</head>
<body>
<html:form action="/encode">
<html:text property="name" />
<html:text property="emails"/>
<html:submit value="提交"/>
</html:form>
</body>
</html>
重写的actionServlet
public class MyActionServlet extends ActionServlet {
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
super.doPost(request, response);
}
}
配置文件:
<struts-config>
<form-beans>
<form-bean name="EncodeForm" type="cn.itcast.web.formbean.EncodeForm" />
</form-beans>
<action-mappings>
<action path="/encode"
type="cn.itcast.web.action.EncodeAction"
name="EncodeForm">
<forward name="message" path="/message.jsp"></forward>
</action>
</action-mappings>
<controller
processorClass="org.apache.struts.action.RequestProcessor"
maxFileSize="20K"></controller>
<message-resources parameter="cn.itcast.resource.MessageResource"></message-resources>
</struts-config>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<servlet>
<servlet-name>MyActionServlet</servlet-name>
<servlet-class>cn.itcast.web.action.MyActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyActionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
重写RequestProcess方法
public class MyRequestProcess extends RequestProcessor {
@Override
public void process(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8"); //在调用process方法前,先对request进行解码
super.process(request, response);
}
}
配置文件
<controller
processorClass="cn.itcast.process.MyRequestProcess"
maxFileSize="20K"></controller>