马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。servlet 过滤器能够在哀求抵达JSP或Servlet之前或呼应前往客户端之前增加一些分外的操纵。假如有多个JSP页面和Servlet都必要举行一个不异或类似的操纵,我们能够把这个操纵抽取到一个Servlet过滤器中,并经由过程婚配路径截获感乐趣JSP或Servlet。
我们举几个典范的过滤器使用的例子,读者能够推而广之:
・编码转换
乱码成绩困扰了很多的Web使用程序开辟者,这是由于基于Java的Web使用程序大概运转于分歧的Web使用程序器、操纵体系平台或硬件服务器上,分歧的情况有本人默许的编码范例,在数据的转换过程当中分歧的默许编码是乱码成绩的始作俑者,以是在开辟JSP经常常必要将数据举行编码转换。我们能够创立一个Servlet过滤器在哀求进进服务程序前都举行编码转换。
・增加一致的题目或脚注
有些网页必要增加一致的题目头或脚注,能够经由过程Servlet过滤器在呼应前往到客户端前给网页增加上一致的题目和脚注。
・举行平安的把持
登录体系后,一样平常城市将用户信息对象放进到session中,能够经由过程Servlet过滤器在哀求进进JSP或Servlet前判别session中是不是有效户信息对象,假如有,则申明用户已登录,假如没有,则申明用户还没有登录,将哀求重定向到登录页面。
本节所供应的Servlet过滤器就是为了完成平安把持,上面我们就来开辟这个Servlet。
1.翻开创立Servlet过滤器的导游。
经由过程File->New...->Web->双击FilterServlet图标启动创立Servlet过滤器的导游,以下图所示:
指定Servlet过滤器的名字
和创立尺度的Servlet类似,在这步里指定过滤器的类名和包名。在Classname中输出LoginCheckFilter,包名依就为bookstore.servlet。按Next到下一步。
2.指定过滤器的路径婚配形式
指定过滤器的婚配路径形式
・Name:logincheckfilter,指定过滤器的名字
・URLpattern:/*,指定过滤器路径婚配形式,这里我们使过滤器对一切的哀求都举行过滤。
按Finish创立此过滤器。
翻开导游创立的LoginCheckFilter.java文件,并录进粗体所示的代码,以下所示:
代码清单4LoginCheckFilter.java代码
1.packagebookstore.servlet;
2.…
3.publicclassLoginCheckFilter
4.extendsHttpServletimplementsFilter
5.{
6. …
7. publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse
8. ,FilterChainfilterChain)
9. {
10. try
11. {
12. //举行哀求和呼应的范例转换
13. HttpServletRequesthttpRequest=(HttpServletRequest)request;
14. HttpServletResponsehttpResponse=(HttpServletResponse)response;
15.
16. booleanisValid=true;
17. StringuriStr=httpRequest.getRequestURI().toUpperCase();
18. if(uriStr.indexOf("LOGIN.JSP")==-1&&
19. uriStr.indexOf("SWITCH.JSP")==-1&&
20. httpRequest.getSession().getAttribute("ses_userBean")==null)
21. {
22. isValid=false;
23. }
24. if(isValid)
25. {
26. filterChain.doFilter(request,response);
27. }else
28. {
29. httpResponse.sendRedirect("/webModule/login.jsp");
30. }
31.
32. }catch(ServletExceptionsx)
33. {
34. filterConfig.getServletContext().log(sx.getMessage());
35. }catch(IOExceptioniox)
36. {
37. filterConfig.getServletContext().log(iox.getMessage());
38. }
39.}
40.…
41.}
因为login.jsp是用户登录页面,而switch.jsp是用户登录处置页面,在会见这两个页面时用户信息对象都还没有发生,以是应当将这两个页面扫除在过滤器查验划定规矩这外。我们经由过程判别哀求路径获知是不是是login.jsp和switch.jsp,如第18~19行所示。
假如不是这两个页面,则都必需举行查验,判别页面的session对象中是不是包括以ses_userBean定名的对象(第20行)。假如没有包括以ses_userBean定名的对象,重定向到登录页面(第29行),不然将哀求传给哀求的方针程序(第26行)。
翻开web.xml,你将看到有关LoginCheckFilter过滤器的部署形貌设置信息,以下粗体所示:
代码清单5过滤器的部署形貌设置信息
1.<web-app>
2. <display-name>webModule</display-name>
3. <filter>
4. <filter-name>logincheckfilter</filter-name>
5. <filter-class>bookstore.servlet.LoginCheckFilter</filter-class>
6. </filter>
7. <filter-mapping>
8. <filter-name>logincheckfilter</filter-name>
9. <url-pattern>/*</url-pattern>
10. </filter-mapping>
11. …
12.</web-app>
<filter-name>设置过滤器的名字和完成类,而<filter-mapping>设置过滤器的路径婚配形式。
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱. |