怎样在MyEclipse中创建Filter拦截器,创建统一全站字符编码的过滤器

怎样在MyEclipse中创建Filter拦截器?

MyEclipse不同于Eclipse,它没有自带的拦截器,那么如何在MyEclipse中创建Filter拦截器呢?我们可以这样做:

  • 1 选择MyEclipse的window下面的Customize Perspective。
  • 2 然后选择Menu Visibility,在File—new下面会找到Filter,选中它,点击OK。
  • 3 这时在你项目的包下面new新建,你就会找到Filter

但是这样创建的拦截器是不可用的,更多时候我们都会先创建一个class,如下图所示,然后点击Add

在搜索框内输入Filter,如下图所示选中javax.servlet的Filter,单击OK,在单击Finish,拦截器创建完成。

之所以选择javax.servlet是因为这个拦截器已经将需要用到的init(),doFilter()和destory()方法初始化好了,我们只需要添加相应的代码即可。

怎样用Filter拦截器统一全站字符编码?

我们在用JSP开发web时,经常要处理中文乱码问题,这时我们就需要在每个JSP页面中进行字符集转换,这样做显得很麻烦,有没有什么方法可以一步到位呢?使用Filter拦截器就可以做到。

 

在这之前,我先介绍一下Filter开发的两个步骤:

 1 编写java类实现javax.servlet.Filter接口,并实现其doFilter方法。

 2 在 web.xml 文件中使用<filter>和<filter-mapping>元素对编写的filter类进行注册,并设置它所能拦截的资源。

 

具体的怎么做呢?首先创建一个index.jsp页面提交一个带用户名和密码的表单给对应的Servlet,这里我就叫LoginServlet.java

 

login.jsp

LoginServlet里我们获取到用户名和密码,如果正确则跳转到success.jsp,失败者跳转到fail.jsp

 

LoginServlet.java

success.jsp

fail.jsp

servlet的web.xml配置

 <servlet>

 <servlet-name>LoginServlet</servlet-name>

 <servlet-class>servlet.LoginServlet</servlet-class>

  </servlet>

  <servlet-mapping>

 <servlet-name>LoginServlet</servlet-name>

 <url-pattern>/LoginServlet</url-pattern>

</servlet-mapping>

 

程序调通之后,就该设计我们的拦截器了,在设计拦截器时,我们先配置好web.xml文件

 

Filter的web.xml配置

<filter>

 <filter-name>myFilter</filter-name>

 <filter-class>com.cn.filter.myFilter</filter-class>

 <init-param><param-name>encoding</param-name>

          <param-value>UTF-8</param-value>

       </init-param>

</filter>

<filter-mapping><filter-name>myFilter</filter-name>

    <url-pattern>/*</url-pattern>(/*代表拦截所有JSP页面)

</filter-mapping>

 

接着,我们在刚才新建的MyFilter拦截器内添加如下代码:

 

MyFilter.java

public class MyFilter implements Filter {

 private static String encoding = null;

 //初始化方法,通过fConfig对象读取web.xml文件中的参数encoding

 public void init(FilterConfig fConfig) throws ServletException {

  this.encoding=fConfig.getInitParameter("encoding");

 }

 //过滤方法完成字符编码的过滤

 public void doFilter(ServletRequest request, ServletResponse response,

  FilterChain chain) throws IOException, ServletException {

  if(request.getCharacterEncoding()==null) {

   if(this.encoding!=null) {

    request.setCharacterEncoding(this.encoding);

   }

  }

  response.setContentType("text/html;charset=utf-8");

  chain.doFilter(request, response);

 }

 public void destroy() { 

  this.encoding=null;

 }

}

所有方法都写好了,那么我们怎么测试拦截器是否起到作用了呢?

我们可以在之前写的LoginServlet.java里将用户名abc更改为任意中文名,然后再部署到服务器,运行测试,如果跳转到

success.jsp,则说明拦截器起到作用了,如果登录失败,那就是你的拦截器出问题了,中文字符产生乱码,导致字符不匹配。

 

到此简单的Filter拦截器应用就实现了,我们在做web开发时经常会用到拦截器,所以希望大家都能熟练的掌握它。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值