[急!!!!] servlet 过滤器问题

rongyunsheng 2008-12-27 02:05:35

package TestFilter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class NoteServlet extends HttpServlet {
public final static String type="text/html;charset=GB2312";
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException {
response.setContentType(type);
ServletOutputStream out=response.getOutputStream();
out.println("<html>");
out.println("<head><title>留言簿</title><body>");
String userName=request.getParameter("userName");
String content=request.getParameter("content");
if(userName!=null){
userName=new String(userName.getBytes("ISO-8859-1"),"GB2312");
content=new String(content.getBytes("ISO-8859-1"),"GB2312");
}
if(content!=null&&!content.equals("")){
out.println("<p><h3>"+userName+"的留言为:"+content+"</h3></p>");
}
out.println("<form action="+request.getContextPath()+"/note method=get />");
out.println("<b>姓名:</b>");
out.println("<input type=text size=10 name=userName><BR>");
out.println("<b>留言:</b><BR>");
out.println("<textArea name=content rows=5 cols=20 wrap></textArea><br>");
out.println("<BR>");
out.println("<input type=submit value='提交'>");
out.println("</form>");
out.println("</body></html>");
}
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException {
doGet(request,response);
}
public void destroy(){
}
}


第二个:
package TestFilter;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class NoteFilter implements Filter{
private FilterConfig config=null;
private String blackList;

public void init(FilterConfig config){
this.config=config;
blackList=config.getInitParameter("blackList");
}

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException,ServletException{
boolean available=false;
String userName=((HttpServletRequest)request).getParameter("userName");
if(userName!=null){
userName=new String(userName.getBytes("ISO-8859-1"),"GB2312");
}
String[]str=blackList.split(",");
for(int i=0;i<str.length;i++){
if(userName.indexOf(str[i])!=-1){
available=true;
break;
}
}
if(userName!=null&&available){
response.setContentType("text/html;charset=gb2312");
PrintWriter out=response.getWriter();
out.println("<html><head><title>NoteFilter过滤器</title></head><body>");
out.println("<center><font color=red>对不起"+userName+
"你已经被加入了黑名单,你没有留言权限!!!</font></center>");
out.println("</body><html>");
out.flush();
return ;
}
long before=System.currentTimeMillis();
config.getServletContext().log("NoteFilter:before call chain.doFilter");
chain.doFilter(request, response);
config.getServletContext().log("NoteFilter:after call chain.doFilter");
long after=System.currentTimeMillis();
String name="";
if(request instanceof HttpServletRequest){
name=((HttpServletRequest)request).getRequestURI();
}
config.getServletContext().log("你请求"+name+"所用的时间为"+(after-before));

}

public void destroy(){
config=null;
}
}



web.xml 配置
<?xml version="1.0" encoding="GB2312"?>

<web-app>
<filter>
<filter-name>NoteFilter</filter-name>
<filter-class>/TestFilter.NoteFilter</filter-class>
<int-param>
<param-name>blackList</param-name>
<param-value>张三,王五,赵六</param-value>
</int-param>
</filter>
<filter-mapping>
<filter-name>NoteFilter</filter-name>
<url-pattern>/note</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>NoteServlet</servlet-name>
<servlet-class>/TestFilter.NoteServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>noteServlet</servlet-name>
<url-pattern>/note</url-pattern>
</servlet-mapping>

</web-app>


在service.xml 中加入了host 下加入了
<Logger className="arg.apache.catalina.logger.FileLogger"
directory="logs" prefix="practice." sufix=".txt"/>

出现了下面的问题:
Thread [main] (Suspended (exception MalformedByteSequenceException))
UTF8Reader.invalidByte(int, int, int) line: not available
UTF8Reader.read(char[], int, int) line: not available
XMLEntityScanner.load(int, boolean) line: not available
XMLEntityScanner.skipString(String) line: not available
XMLVersionDetector.determineDocVersion(XMLInputSource) line: not available
JAXPConfiguration(XML11Configuration).parse(boolean) line: not available
JAXPConfiguration(XML11Configuration).parse(XMLInputSource) line: not available
SAXParser(XMLParser).parse(XMLInputSource) line: not available
SAXParser(AbstractSAXParser).parse(InputSource) line: not available
Digester.parse(InputSource) line: 1644
ContextConfig.applicationWebConfig() line: 365
ContextConfig.start() line: 1066
ContextConfig.lifecycleEvent(LifecycleEvent) line: 261
LifecycleSupport.fireLifecycleEvent(String, Object) line: 117
StandardContext.start() line: 4252
StandardHost(ContainerBase).addChildInternal(Container) line: 791
StandardHost(ContainerBase).addChild(Container) line: 771
StandardHost.addChild(Container) line: 525
HostConfig.deployDirectory(String, File, String) line: 926
HostConfig.deployDirectories(File, String[]) line: 889
HostConfig.deployApps() line: 492
HostConfig.start() line: 1149
HostConfig.lifecycleEvent(LifecycleEvent) line: 311
LifecycleSupport.fireLifecycleEvent(String, Object) line: 117
StandardHost(ContainerBase).start() line: 1053
StandardHost.start() line: 719
StandardEngine(ContainerBase).start() line: 1045
StandardEngine.start() line: 443
StandardService.start() line: 516
StandardServer.start() line: 710
Catalina.start() line: 578
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available
Method.invoke(Object, Object...) line: not available
Bootstrap.start() line: 288
Bootstrap.main(String[]) line: 413

...全文
130 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
startym 2008-12-28
  • 打赏
  • 举报
回复
换编码方式试试吧
rongyunsheng 2008-12-28
  • 打赏
  • 举报
回复
HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
TestFilter.NoteFilter.doFilter(NoteFilter.java:23)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.13 logs.


--------------------------------------------------------------------------------

Apache Tomcat/6.0.13
whuzjf1985 2008-12-28
  • 打赏
  • 举报
回复
楼主写得不错 一个经典的过滤器
zhj92lxs 2008-12-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wj_18 的回复:]
把字符集换成UTF-8
也能用汉字的
[/Quote]
不错
wj_18 2008-12-27
  • 打赏
  • 举报
回复
把字符集换成UTF-8
也能用汉字的
zw_ydjysc 2008-12-27
  • 打赏
  • 举报
回复
2楼正解,把filter-class中的/去掉
cydp007 2008-12-27
  • 打赏
  • 举报
回复
如果你用 eclipse 写的话 应该就不会有了吧.
他给你的配置界面都做好了.
rongyunsheng 2008-12-27
  • 打赏
  • 举报
回复
web.xml 配置
<?xml version="1.0" encoding="GB2312"?>

<web-app>
<filter>
<filter-name>NoteFilter </filter-name>
<filter-class>TestFilter.NoteFilter </filter-class>
<int-param>
<param-name>blackList </param-name>
<param-value>张三,王五,赵六 </param-value>
</int-param>
</filter>
<filter-mapping>
<filter-name>NoteFilter </filter-name>
<url-pattern>/note </url-pattern>
</filter-mapping>

<servlet>
<servlet-name>NoteServlet </servlet-name>
<servlet-class>TestFilter.NoteServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>NoteServlet </servlet-name>
<url-pattern>/note </url-pattern>
</servlet-mapping>

</web-app> 出现了几个笔误,自己纠正一下

估计是字符编码出了问题 找错误头都晕了
cydp007 2008-12-27
  • 打赏
  • 举报
回复
放狗搜了一下 .. 据传是 io的问题. .


你也可以继续放狗 搜你那个异常.MalformedByteSequenceException
fujilin 2008-12-27
  • 打赏
  • 举报
回复
好象是这里:
String userName=((HttpServletRequest)request).getParameter("userName");
if(userName!=null){
userName=new String(userName.getBytes("ISO-8859-1"),"GB2312");
}

看看getParameter("userName");前文件的编号是什么,可能不是"GB2312"!

81,092

社区成员

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

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