初学者,一个很简单的Fiter,主体代码如下
public class FilterTest implements Filter{
public void init(FilterConfig servletconfig) throws ServletException {
System.out.println("过滤非法字符");
}
public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws  ServletException,IOException{
HttpServletRequest request=(HttpServletRequest)req;
request.setCharacterEncoding("gb2312");
String test=(String)request.getParameter("test");
if(test!=null){
if(test.indexOf("哈")!=-1){
System.out.println("含有");
request.getRequestDispatcher("fail.jsp").forward(req,res);
}else{
System.out.println("不含有");
chain.doFilter(req,res);
}

}else{
chain.doFilter(req,res);
}

}
public void destroy(){
System.out.println("过滤器销毁");

}
经过测试,test.indexOf("r")!=-1,对英文字符的判断正确,test.indexOf("哈")!=-1,中文字符就识别不出来,控制台都是输出  “不含有”有朋友能帮忙解决哈么

解决方案 »

  1.   

    已经找到原因
    String test=(String)request.getParameter("test"); 如果改成
    String test=request.getParameter("test"); 
    判断都正常,
    为什么前面加个强制转化为String,就会出现问题了?谢谢
      

  2.   

    为什么String test=request.getParameter("test"); 的request前不能加(String),
    而获得属性值Stirng username=(String)request.getAttribute("username");前,又必须(String)强制转化
      

  3.   


    request.getParameter("test")这个方法的返回类型本来就是String 类型的了,你强转是没有用的。。而getAttribute("username")这个方法的返回类型是Object,所以要进行强转...