<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts 2.0 test xp1204</display-name>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.zoyechina.consumption.tool.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param></filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.ph</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts 2.0 test xp1204</display-name>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.zoyechina.consumption.tool.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param></filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.ph</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
package com.zoyechina.consumption.tool;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;/**
* 转换字符乱码
* @author cyc
* @version 创建时间:Jan 26, 2010 4:33:41 PM
*/
public class CharacterEncodingFilter implements Filter { private String encoding; private boolean ignore = true; private FilterConfig filterconfig = null; public void destroy() {
this.encoding = null;
this.filterconfig = null;
// TODO Auto-generated method stub
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = getEncoding();
if (encoding != null) {
request.setCharacterEncoding(encoding);
}
}
response.setContentType("text ml;charset=" + encoding);
chain.doFilter(request, response);
} private String getEncoding() {
return this.encoding;
} public void init(FilterConfig filterconfig) throws ServletException {
this.filterconfig = filterconfig;
this.encoding = filterconfig.getInitParameter("encoding");
String value = filterconfig.getInitParameter("ignore");
if (value == null) {
this.ignore = true;
} else if (value.equalsIgnoreCase("true")) {
this.ignore = true;
}
}}
HTTP Status 404 - /consumption/login.action--------------------------------------------------------------------------------type Status reportmessage /consumption/login.actiondescription The requested resource (/consumption/login.action) is not available.去掉那部分后一切正常。乱码问题困扰了半天,希望大家帮帮忙。
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts2只需要在web.xml里面配置这个就行了
包记得导入
不知道这里是拷错了还是原本就是这样子写的。。text/html?忘了
<filter-mapping>
<filter-name>encodingFilter </filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
把这个放在
<filter-mapping>
<filter-name>struts2 </filter-name>
<url-pattern>*.ph </url-pattern>
</filter-mapping>
的上面
严重: Servlet.service() for servlet jsp threw exception
java.io.IOException: tmpFile.renameTo(classFile) failed
at org.apache.jasper.compiler.SmapUtil$SDEInstaller.install(SmapUtil.java:246)
at org.apache.jasper.compiler.SmapUtil.installSmap(SmapUtil.java:165)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:454)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)现在的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts 2.0 test xp1204</display-name>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.zoyechina.consumption.tool.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param></filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts 2.0 test xp1204</display-name>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.zoyechina.consumption.tool.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param></filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>我去掉红色部分一切正常
LZ先确认是否是因为你的encodingFilter出问题 先把STRUTS2去掉 看看还好使不(启动是否有错误信息?)
如果有错误信息的话 那就说明你这个过滤器可能有问题 如果没有的话 那就能说明他们两个可能冲突
web.xml<?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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
net.test.interceptor.SetCharacterEncodingFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/test/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
</web-app>SetCharacterEncodingFilter.javapublic class SetCharacterEncodingFilter implements Filter {
private FilterConfig filterConfig;
//Handle the passed-in FilterConfig
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
} //Process the request/response pair
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) {
try {
//request.setCharacterEncoding("GBK");
//response.setCharacterEncoding("GBK");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
filterChain.doFilter(request, response);
} catch (ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
} catch (IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
}
} //Clean up resources
public void destroy() {
}
}tomcat目录的conf/server.xml把<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改成<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts 2.0 test xp1204</display-name>
<!-- <filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.zoyechina.consumption.tool.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
--> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>注释部分加上的话,登录后页面报错,去掉一切正常。
package com.zoyechina.consumption.tool;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;/**
* 转换字符乱码
* @author cyc
* @version 创建时间:Jan 26, 2010 4:33:41 PM
*/
public class CharacterEncodingFilter implements Filter { private FilterConfig filterConfig;
//Handle the passed-in FilterConfig
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
} //Process the request/response pair
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) {
try {
//request.setCharacterEncoding("GBK");
//response.setCharacterEncoding("GBK");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
filterChain.doFilter(request, response);
} catch (ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
} catch (IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
}
} //Clean up resources
public void destroy() {
}
}
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"/>
<constant name="struts.ui.theme" value="simple"/>
<package name="logincode" extends="struts-default">
<action name="login" class="com.zoyechina.consumption.action.login.Login">
<result name="succ">jsp/main.jsp</result>
<result name="fail">index.jsp</result>
</action>
</package>
<package name="admincode" extends="struts-default">
<action name="*Action" class="com.zoyechina.consumption.action.admin.AdminAction" method="{1}">
<result name="listall">admin/adminlist.jsp</result>
<result name="listall2">adminlist.jsp</result>
<result name="toupadmin">admin/upAdmin.jsp</result>
<result name="toaddadmin">admin/addAdmin.jsp</result>
<result name="dealresult">adminInfo.jsp</result>
</action>
</package>
<package name="servercode" extends="struts-default">
<action name="*Server" class="com.zoyechina.consumption.action.server.ServerAction" method="{1}">
<result name="listall">server/serverlist.jsp</result>
<result name="listall2">serverlist.jsp</result>
</action>
</package>
<package name="cardtypecode" extends="struts-default">
<action name="*CardType" class="com.zoyechina.consumption.action.config.CardTypeAction" method="{1}">
<result name="listall">cardtype/cardtypelist.jsp</result>
<result name="resultinfo">cardtypelist.jsp</result>
<result name="toupadmin">cardtype/upAdmin.jsp</result>
<result name="toaddadmin">cardtype/addAdmin.jsp</result>
<result name="dealresult">adminInfo.jsp</result>
</action>
</package>
</struts>
<filter-name>struts2 </filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher </filter-class>
</filter
你的struts2的版本 该高一点,struts2自动能出来乱码呢,比如是struts2.1.6版本以上就不用处理乱码呢
web.xml:
<filter>
<filter-name>sfsdfdsfsdf</filter-name>
<filter-class>com.zoyechina.consumption.tool.CharsetFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>sfsdfdsfsdf</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器继承struts2的FilterDispatcher :
public class CharsetFilter extends FilterDispatcher {
private String charset;
public void destroy() {
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
arg0.setCharacterEncoding(charset);
arg1.setCharacterEncoding(charset);
arg2.doFilter(arg0, arg1); } public void init(FilterConfig arg0) throws ServletException {
this.charset = arg0.getInitParameter("charset"); }
}
页面编码,server.xml设置成UTF-8(server.xml设置见14楼)。
现在的结果:在后台获取中文没有问题了,但是用ajax验证的时候取到的还是乱码。
loadXMLDoc("checknameCardType.action?cardName="+cardname,checkReturn);后台取cardName时候还是乱码。
在表单中传递的中文乱码解决办法如22楼所说。
ajax传递中文乱码:
在js中加上:cardname=encodeURI(encodeURI(cardname));//cardname为你要传递的参数。
服务端取值:用java.net.URLDecoder.decode(cardname,"UTF-8");解析。松了一口气啊。
字符编码过滤器的功能集成到 StrutsPrepareAndExecuteFilter 里面了,只是 Struts2.1.8 之前
有个小 bug
http://blog.csdn.net/Purking/archive/2010/01/27/5263363.aspx
<!-- 编码过滤器,其中,encoding参数为设定转换成什么编码,如果中文,可以设成:GBK,forceEncoding参数为:强制转换 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>