新人JavaWEB启动报错 Exception starting filter CharacterFilter 求大神看看

Devil1316snow 2016-07-09 08:22:23
Exception starting filter CharacterFilter
java.lang.ClassNotFoundException: com.xzit.common.EncodingFilter
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1854)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1703)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:506)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:488)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:115)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4841)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5535)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
严重: One or more Filters failed to start. Full details will be found in the appropriate container log file
2016-7-9 20:10:46 org.apache.catalina.core.StandardContext startInternal
严重: Context [/MyProject] startup failed due to previous errors
2016-7-9 20:10:46 org.apache.catalina.startup.HostConfig deployDirectory
感觉后两个错还是第一个错的问题。

EncodingFilter内容如下:
package com.xzit.common;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;

public class EncodingFilter implements Filter {

private static String encoding;
private static final String DEFAULT_CHARSET = "UTF-8";

@Override
public void destroy() {
System.out.println("--------destroy---------");
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
if ("GET".equals(httpRequest.getMethod())) {
EncodingHttpServletRequest wrapper = new EncodingHttpServletRequest(httpRequest, encoding);
chain.doFilter(wrapper, response);
} else {
httpRequest.setCharacterEncoding(encoding);
httpResponse.setContentType("text/html;charset=" + encoding);
chain.doFilter(request, response);
}
}

private static class EncodingHttpServletRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;

public EncodingHttpServletRequest(HttpServletRequest request, String encoding) {
super(request);
this.request = request;
}

@Override
public String getParameter(String name) {
String value = request.getParameter(name);
try {
value = new String(value.getBytes("iso8859-1"), encoding);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return super.getParameter(name);
}
}

@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("--------init---------");
encoding = config.getInitParameter("encoding");
if (encoding == null || "".equals(encoding))
encoding = DEFAULT_CHARSET;
}
}

web.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>MyProject</display-name>
<filter>
<filter-name>CharacterFilter</filter-name>
<filter-class>com.xzit.common.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterFilter</filter-name>
<!-- 拦截所有的请求,为所有的请求设置编码 -->
<url-pattern>/*</url-pattern>
</filter-mapping>


<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>



</web-app>

加入catalina.jar包 可以去除上述错误,但会产生错误:
End event threw exception java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet
百度后的解决方法是删掉catalina.jar ..已经调崩溃,求帮助。
...全文
397 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
海兰 2016-07-12
  • 打赏
  • 举报
回复
你这个报错是少方法的嘛:org.apache.catalina.deploy.WebXml,看下是不是catalina的版本问题

24,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Apache
社区管理员
  • Apache
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧