JavaWeb使用Filter过滤器导致jsp页面不能显示的问题

今天在完成课堂布置的作业,使用Filter过滤器限制ip访问。

开始的思路是写两个页面,一个首页main.jsp和一个错误拦截显示页面error.jsp。

再写一个Filter,HttpServletRequest获取ip,并使用正则表达式进行判断这个ip是否可以访问。

但在使用web.xml文件配置filter的时候,使用/*将所有的页面都添加上了过滤器。

这样就出现了第一个错误:

      页面反复跳转:验证ip不合理跳转到error.jsp页面,但error页面也有过滤器限制,然后又跳转到error.jsp,反复跳转报错。

然后就开始百度起来,看到一个方法是:

      str = request.getServletPath();if (str.contains("error.jsp") { return;} 进行跳过。

然后就出现了第二个错误:

     不管是 main还是error页面的内容都不显示了,这tm什么情况。百度了好久没有找到解决办法。

没辙了,修改web.xml 将过滤器仅应用在main.jsp页面上。

成功显示了内容!

 

 

这期间还遇到了 获取ip显示的是ipv6地址 0:0:0:0:0:0:0:1问题,解决办法是不使用localhost:8080转为使用127.0.0.1:8080。

验证ip地址使用正则表达式,结果也不会,百度了半天,结果在线生成的表达式还有错的。

使用正则表达式的时候,照搬copy,应该是Pattern对象.matcher方法。结果用的string.matches方法也没看出来,还好奇我咋没有matcher方法。

在解决上面问题的时候又感觉eclipse用起来变慢 ,又到安装目录一通乱删,结果打不开报see the log file错误。错误日志文件也看不懂,大概就是缺了文件,加载失败。没办法又得换个eclipse使用。

 

在最后,我认真分析了遇到的问题。其实使用return让filter跳过error.jsp也没有问题,但问题的关键是没有没有加上chain.doFilter(request,response)方法。chain顾名思义像链条一样,这个过滤器的功能执行完了,得交给别的来处理。类似于“放行”一样。处理结束不加上的话,那就出现了jsp页面内容不显示的问题。

 

这破jb问题 费了我将近三个半小时。以前遇到问题,都是加上输出语句看看到底哪里出现了问题,结果就是网页内容不显示。搞了半天也没发现到底哪有问题。

最后总结的话就是,自己真就是个菜鸡。过滤器方法都没明白就稀里糊涂瞎写,浪费时间。

这次对我来说是个教训,在以后,我会刻意注意这方面的问题。

你可能感兴趣的:(JavaWeb)