javaweb-Servlet和Filter

为什么这两个要放一起,只是我认为类似而已,并且运用的比较多

servlet

首先Servlet是继承HttpServlet实现方法,一般是doget,dopost,service等

package com.yang.Servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ShowServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("乱码");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

 因为write():仅支持输出字符类型数据,字符、字符数组、字符串等所以中文肯定会乱码,

当然我们可以这样

        resp.setCharacterEncoding("utf-8");
        resp.getWriter().write("乱码");

但是不可能每一个都这样设置所以需要过滤器

Filter 

Filter是实现Filter接口,重写方法

package com.yang.Filter;

import javax.servlet.*;
import java.io.IOException;

public class EncodingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            servletRequest.setCharacterEncoding("utf-8");
            servletResponse.setCharacterEncoding("utf-8");
            servletResponse.setContentType("text/html;charset=UTF-8");

            //chain链
            System.out.println("执行前");
            filterChain.doFilter(servletRequest,servletResponse);//让我们的请求继续走,如果不写,程序到这里就被拦截停止这就是链下去,链
            System.out.println("执行后");
    }

    @Override
    public void destroy() {
        System.out.println("销毁");
    }
}

可以看到程序开始之前就初始化了

 web.xml如下

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>ShowServlet</servlet-name>
    <servlet-class>com.yang.Servlet.ShowServlet</servlet-class>
  </servlet>
<!--  //开启两个这样在servlet下就有过滤器,-->
  <servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/servlet/show</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/show</url-pattern>
  </servlet-mapping>

  <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.yang.Filter.EncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
<!--    只要是servlet下的请求就会被过滤-->
    <url-pattern>/servlet/*</url-pattern>
  </filter-mapping>
</web-app>

可以看到servlet路径下就会被过滤

但是没有在过滤器下就不会。

 那么下面来看一个实际例子

猜你喜欢

转载自www.cnblogs.com/yangj-Blog/p/12972054.html
今日推荐