仓酷云

标题: JAVA教程之JBuilder2005 Servlet开辟之过滤器 [打印本页]

作者: 变相怪杰    时间: 2015-1-18 11:08
标题: JAVA教程之JBuilder2005 Servlet开辟之过滤器
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。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过滤器的导游,以下图所示:

JAVA教程之JBuilder2005 Servlet开辟之过滤器
登录/注册后可看大图

指定Servlet过滤器的名字
  和创立尺度的Servlet类似,在这步里指定过滤器的类名和包名。在Classname中输出LoginCheckFilter,包名依就为bookstore.servlet。按Next到下一步。

  2.指定过滤器的路径婚配形式

JAVA教程之JBuilder2005 Servlet开辟之过滤器
登录/注册后可看大图

指定过滤器的婚配路径形式
  ・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++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.
作者: 小女巫    时间: 2015-1-25 09:40
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者: 透明    时间: 2015-1-26 05:13
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者: 因胸联盟    时间: 2015-2-3 12:24
是一种语言,用以产生「小应用程序(Applet(s))
作者: 简单生活    时间: 2015-2-26 12:27
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 只想知道    时间: 2015-3-8 14:55
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者: 蒙在股里    时间: 2015-3-16 02:33
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者: 兰色精灵    时间: 2015-3-22 18:50
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2