<init-param>
<param-name>filterPattern</param-name>
<param-value>.*Servlet|.*\.jsp</param-value>
</init-param>
<param-value>.*Servlet|.*\.jsp这里的.*表示任意字符,表示不管任何字符有多少个,\.是转义.(因为url-pattern不支持正则表达式)。
public void init(FilterConfig config) throws ServletException {
filterPattern = config.getInitParameter("filterPattern");
}
在初始化时读取配置文件,通过filterPattern这个param-name读出.*Servlet|.*\.jsp,而filterPattern在LoginFilter中是全局变量,所以在执行完init方法后,执行doFilter方法时也可以访问LoginFilter。
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
之所以要将ServletRequest转换为HttpServletRequest将ServletResponse转换为HttpServletResponse,是因为HttpServletRequest有getSession方法,而ServletRequest没有。
chain.doFilter(req, resp),这句话表示执行完上面的代码后系统的控制流继续往下执行,执行真正的请求,比如servlet或者jsp或者图片、js文件。其实filter的作用就相当于是在访问servlet等等…前执行一些操作。
requestURI即譬如/cms/backend/login.jsp等等,String page = requestURI.substring(request.getContextPath().length())这句话的作用即将/cms去掉,将/backend/login.jsp赋值给page变量。
if(page.matches(filterPattern))这句是判断请求的page文件是否和filter中设置的filterPattern匹配,如果匹配,则表示该页面需要判断session中有没有Login_ADMIN,没有Login_ADMIN(loginAdmin == null)的话转向login.jsp,登录成功后会request.getSession().setAttribute("LOGIN_ADMIN", username),这样在访问filterPattern设定的文件时就可以通过判断,继续执行chain.doFilter(req, resp),访问指定的文件。而如果page文件不匹配filterPattern的话则直接执行chain.doFilter(req, resp),访问page文件。
估计在前面,有个关于回显的问题,要用到${param.~~}
这里补充一个关于乱码的问题(现在想来这个问题就很简单了):
1、一般我们的添加文章的页面(其实他们的大部分呈现页面)的编码是UTF-8,当填完基本信息,点击添加按钮时,会转向相应的servlet,而servlet通过post来接受信息时默认编码是ISO-8859-1,所以这里会出现乱码问题,解决方案是在第一次request.getParameter(**)获取参数前写“request.setCharacterEncoding("UTF-8")”
2、Mysql的dos窗口的默认编码是GBK,所以我们需要在my.ini中修改default-character-set=gbk
1、精通某一编程语言(所谓精通,比如Java,除了熟悉使用常用的工具类、语言特性外,还要对JVM的内部机制要有所以了解,比如JVM的内存管理,类加载机制等);
2、某种脚本(Windows的Bat、Linux的Shell),有时熟练使用某些脚本会带来意想不到的便利;
3、对涉及到的协议的掌握,比如你搞页面开发,HTML协议的RFC一定好好看看(比如之前我处理的几个问题,都与Http 1.0与Http 1.1的特性差异有关);
4、对网络知识要有所了解,及对抓包工具(Wireshark)的熟练使用,在处理一些疑难问题(如各种乱码问题)时,会在你定位问题给你很大的帮助;
5、对数据库要有一些基本的认识,比如常用的sql调优等;
我给大家的建议是,至少要在某一方面做到足够深入,让大家知道你在某一方面很强,处理这方面的问题时你就是专家;然后再扩展自己的知识面,尽可能多了解一点其它知识点,至少在遇到这方面的问题时,你知道去哪里找资料;不要让自己什么都学精通,你没有那么多精力的。
你要相信平时的积累会在某个时间点发挥出价值,所以真的不用担心自己的积累会无用武之地。
另外,我个人觉得最重要的一点是掌握方法,就像处理疑难问题,处理得次数多了,你会从中找到一些规律和窍门的,这个就是我说的方法。
在平时的学习和工作的过程中,要注意总结,把自己认为重要的或对自己有帮助的及时输出到文档中;刚开始可能总结不出什么,但多总结几次,可能你就能总结出很多东西,其实这就是你在进步。哪天你突然发现自己在解决问题时是按照某些特定的步骤去定位的,并且这样处理问题基本能得到解决,相信你的能力已经提高了很多。
所谓功在平时,平时的积累最重要,遇到问题要淡定,积极而平静的心态会让你走得更远。