Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16493680
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:44:59

下载本文示例代码
  过滤器可以在请求到达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->双击Filter Servlet图标启动创建Servlet过滤器的向导,如下图所示: 图 7 指定Servlet过滤器的名字  和创建标准的Servlet相似,在这步里指定过滤器的类名和包名。在Class name中输入LoginCheckFilter,包名依就为bookstore.servlet。按Next到下一步。  2.指定过滤器的路径匹配模式 图 8 指定过滤器的匹配路径模式  ·Name:logincheckfilter,指定过滤器的名字  ·URL pattern:/*,指定过滤器路径匹配模式,这里我们使过滤器对所有的请求都进行过滤。  按Finish创建此过滤器。  打开向导创建的LoginCheckFilter.java文件,并录入粗体所示的代码,如下所示:  代码清单 4 LoginCheckFilter.java代码 1. package bookstore.servlet;2. …3. public class LoginCheckFilter4. extends HttpServlet implements Filter5. {6.  …7.  public void doFilter(ServletRequest request, ServletResponse response8.      , FilterChain filterChain)9.  {10.  try11.  {12.   //进行请求和响应的类型转换13.   HttpServletRequest httpRequest = (HttpServletRequest) request;14.   HttpServletResponse httpResponse = (HttpServletResponse) response;15. 16.   boolean isValid = true;17.   String uriStr = 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.   } else28.   {29.    httpResponse.sendRedirect("/webModule/login.jsp");30.   }31. 32.  } catch (ServletException sx)33.  {34.   filterConfig.getServletContext().log(sx.getMessage());35.  } catch (IOException iox)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>配置过滤器的路径匹配模式。   过滤器可以在请求到达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->双击Filter Servlet图标启动创建Servlet过滤器的向导,如下图所示: 图 7 指定Servlet过滤器的名字  和创建标准的Servlet相似,在这步里指定过滤器的类名和包名。在Class name中输入LoginCheckFilter,包名依就为bookstore.servlet。按Next到下一步。  2.指定过滤器的路径匹配模式 图 8 指定过滤器的匹配路径模式  ·Name:logincheckfilter,指定过滤器的名字  ·URL pattern:/*,指定过滤器路径匹配模式,这里我们使过滤器对所有的请求都进行过滤。  按Finish创建此过滤器。  打开向导创建的LoginCheckFilter.java文件,并录入粗体所示的代码,如下所示:  代码清单 4 LoginCheckFilter.java代码 1. package bookstore.servlet;2. …3. public class LoginCheckFilter4. extends HttpServlet implements Filter5. {6.  …7.  public void doFilter(ServletRequest request, ServletResponse response8.      , FilterChain filterChain)9.  {10.  try11.  {12.   //进行请求和响应的类型转换13.   HttpServletRequest httpRequest = (HttpServletRequest) request;14.   HttpServletResponse httpResponse = (HttpServletResponse) response;15. 16.   boolean isValid = true;17.   String uriStr = 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.   } else28.   {29.    httpResponse.sendRedirect("/webModule/login.jsp");30.   }31. 32.  } catch (ServletException sx)33.  {34.   filterConfig.getServletContext().log(sx.getMessage());35.  } catch (IOException iox)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>配置过滤器的路径匹配模式。 下载本文示例代码


JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器JBuilder2005 Servlet开发之过滤器
阅读(181) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~