使用过滤器的时候抛异常.. 一运行就异常

javagongcheng 2010-09-14 12:34:09
我使用的是MyEclipse 一运行就异常了 还没输网址呢 但是其它工程就不会这样
异常信息:java.lang.reflect.InvocationTargetException
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.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:899)
at org.apache.tomcat.util.digester.SetNextRule.end(SetNextRule.java:193)
at org.apache.tomcat.util.digester.Rule.end(Rule.java:229)
at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1058)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1774)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2930)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562)
at org.apache.catalina.startup.ContextConfig.applicationWebConfig(ContextConfig.java:369)
at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1062)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4238)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:761)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:741)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1023)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
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:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

然后我一点一点的发代码..
...全文
241 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
javagongcheng 2010-09-14
  • 打赏
  • 举报
回复
web.xml

<filter>
<filter-name>LoggerFilter</filter-name>
<filter-class>myfilter.LoggerFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>LoggerFilter</filter-name>
<url-pattern>LoggerServlet</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>LoggerServlet</servlet-name>
<servlet-class>myfilter.LoggerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoggerServlet</servlet-name>
<url-pattern>/LoggerServlet</url-pattern>
</servlet-mapping>


LoggerServlet.java 这个是用来执行过滤器的servlet

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>MyFilter</TITLE></HEAD>");
response.setCharacterEncoding("GB2312");
out.println("<BODY>");
out.print("<h1>简单过滤器 Servlet</h1>");
String requestedUri=(String) request.getRequestURI();//获得请求页面的相对路径
String requestedUriAttr=(String) request.getAttribute("URI");
out.print("<b>请求的 URI 为:</b>"+requestedUri+"<br/>");
out.println("<b>请求中的\"URI\"属性值为:</b>"+requestedUriAttr);
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}


LoggerFilter.java 这是过滤器

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain){
long startTime=System.currentTimeMillis();//获取自1970年1月1日到现在的毫秒数
String remoteAddress=request.getRemoteAddr();//获得客户端的IP地址
String remoteHost=request.getRemoteHost();//获得客户端的主机名
HttpServletRequest myReq=(HttpServletRequest) request;
String reqURI=myReq.getRequestURI();//获得请求页面的相对路径

System.out.println(reqURI);

try{
request.setAttribute("URI", reqURI);
filterChain.doFilter(request, response);
}catch(ServletException sx){
filterConfig.getServletContext().log(sx.getMessage());
}catch(IOException iox){
filterConfig.getServletContext().log(iox.getMessage());
}
filterConfig.getServletContext().log("发起请求的 IP 为 "+remoteAddress+"("+remoteHost+"),访问源为 "+reqURI+",耗时 "+(System.currentTimeMillis()-startTime)+"ms");
}


index.jsp 首页

<body>
<h1>欢迎使用第一个过滤器示例</h1>
<a href="/filterproject/LoggerServlet">单击此处查看过滤器的效果</a>
</body>


代码来自北大青鸟..
javagongcheng 2010-09-14
  • 打赏
  • 举报
回复
我用的是 Tomcat6和JDK1.6

<?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">

这是xml.web里最开始的代码

这里面还有一个地方我没懂 就是在 LoggerFilter 类中 连接 Filter(过滤器)接口的时候 类名报错
错误信息是:The type LoggerFilter must implement the inherited abstract method Filter.isLoggable(LogRecord)
然后选中被画波浪线的类名 Ctrl+1 选 Add unimplemented methods 自动帮我生成了下面的代码 就不报错了..

public boolean isLoggable(LogRecord record) {
return false;
}

不懂是什么意思..
humanity 2010-09-14
  • 打赏
  • 举报
回复
会不会跟版本有关系。Tomcat x?,web.xml 里面给的版本号是?
javagongcheng 2010-09-14
  • 打赏
  • 举报
回复
前辈们去哪了..

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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