Java 过滤器问题,求高手指点

ekisstherain 2010-08-29 10:51:41

这是过滤器SetLocaleFilter类的源代码:

/**
* Created on 2010-8-29 上午09:43:17
*/

import java.io.IOException;
import java.util.Locale;
import java.util.ResourceBundle;

import javax.resource.spi.UnavailableException;
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.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SetLocaleFilter implements Filter
{
private String resourceName = null;

public void destroy()
{
// TODO Auto-generated method stub
resourceName = null;

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException
{
// TODO Auto-generated method stub
HttpServletRequest httpReq = (HttpServletRequest) request;
HttpServletResponse httpResp = (HttpServletResponse) response;

// 返回客户端首选的 Locale 对象
Locale locale = httpReq.getLocale();

// 当 Locale 为null 时,创建对应于英文的 locale 对象
if (null == locale)
{
locale = new Locale("en");
}

ResourceBundle bundle = ResourceBundle.getBundle(resourceName, locale);

HttpSession session = httpReq.getSession();

// 可以从 session 对象中得到资源包
session.setAttribute("resource", bundle);

httpResp.setCharacterEncoding("UTF-8");
httpResp.setContentType("text/html;charset=UTF-8");

chain.doFilter(httpReq, httpResp);
}

public void init(FilterConfig filterConfig) throws ServletException
{
// TODO Auto-generated method stub
// 获取过滤器的初始化参数,resourceName 参数用于指定资源包系列的基名
resourceName = filterConfig.getInitParameter("resourceName");
if (null == resourceName)
{
try
{
throw new UnavailableException("no define resource");
} catch (UnavailableException e)
{
// TODO Auto-generated catch block
System.out.println(e.toString());
}
}
}
}




这是web.xml配置过滤器的文件:

	<filter>
<filter-name>SetLocaleFilter</filter-name>
<filter-class>SetLocaleFilter</filter-class>
<init-param>
<param-name>resourceName</param-name>
<param-value>MyResource</param-value>
</init-param>
</filter>




这是启动Tomcat的出错信息:

信息: Deploying configuration descriptor ch17.xml
2010-8-29 10:42:20 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter SetLocaleFilter
java.lang.NoClassDefFoundError: javax/resource/spi/UnavailableException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.ClassNotFoundException: javax.resource.spi.UnavailableException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
... 32 more
2010-8-29 10:42:20 org.apache.catalina.core.StandardContext start
严重: Error filterStart
2010-8-29 10:42:20 org.apache.catalina.core.StandardContext start
严重: Context [/ch17] startup failed due to previous errors



就是说Tomcat加载web.xml 配置文件出错,当我删除 过滤器的相关配置代码时,启动Tomcat没有问题~~
求高手详解~~~~
谢谢啦~~~
...全文
212 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ekisstherain 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhoupuyue 的回复:]
你的包名不是filter吗?怎么又是yourPackage,把SetLocaleFilter.class丢到WEB-INF/classes/filter/下。
[/Quote]

大哥阿,谢谢你的提醒,可是这不是问题的关键~~~~~
gudaobeige 2010-08-30
  • 打赏
  • 举报
回复
找不到文件,jar包有问题,要么就把项目clean
rainsilence 2010-08-30
  • 打赏
  • 举报
回复
<filter-class>filter.SetLocaleFilter</filter-class>
qinhualee 2010-08-30
  • 打赏
  • 举报
回复
<filter-class>SetLocaleFilter</filter-class>

这里没有包?你的SetLocaleFilter类放哪里的
ekisstherain 2010-08-29
  • 打赏
  • 举报
回复
WEB-INF/classes/yourPackage 这个有~~~
bastengao 2010-08-29
  • 打赏
  • 举报
回复
出现这个问题,就是vm 找不到你的那个类,似乎是你的.class 文件位置没有放对。 应该在 WEB-INF/classes/yourPackage 里。楼主对一对,看对不对。
ekisstherain 2010-08-29
  • 打赏
  • 举报
回复
修正还是出错:


信息: Deploying configuration descriptor ch17.xml
2010-8-29 11:06:34 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter SetLocaleFilter
java.lang.NoClassDefFoundError: javax/resource/spi/UnavailableException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.ClassNotFoundException: javax.resource.spi.UnavailableException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
... 32 more
2010-8-29 11:06:34 org.apache.catalina.core.StandardContext start
严重: Error filterStart
2010-8-29 11:06:34 org.apache.catalina.core.StandardContext start
严重: Context [/ch17] startup failed due to previous errors
ekisstherain 2010-08-29
  • 打赏
  • 举报
回复
打包啦:
package filter;


Tomcat出错信息:

信息: Deploying configuration descriptor ch17.xml
2010-8-29 11:02:56 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter SetLocaleFilter
java.lang.ClassNotFoundException: SetLocaleFilter
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:269)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
2010-8-29 11:02:56 org.apache.catalina.core.StandardContext start
严重: Error filterStart
2010-8-29 11:02:56 org.apache.catalina.core.StandardContext start
严重: Context [/ch17] startup failed due to previous errors
ekisstherain 2010-08-29
  • 打赏
  • 举报
回复
在默认包中~~~~
阿_布 2010-08-29
  • 打赏
  • 举报
回复
找不到类,你的SetLocaleFilter类没有包吗?
ekisstherain 2010-08-29
  • 打赏
  • 举报
回复
不要沉啊~~~~
阿_布 2010-08-29
  • 打赏
  • 举报
回复
你的包名不是filter吗?怎么又是yourPackage,把SetLocaleFilter.class丢到WEB-INF/classes/filter/下。

81,092

社区成员

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

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