怎样在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开发时经常会用到拦截器,所以希望大家都能熟练的掌握它。

猜你喜欢

转载自blog.csdn.net/qq1608731824/article/details/79227501
今日推荐