SpringBoot 03: 常用web组件 - - - 拦截器 + Servlet + 过滤器( 二 )

使用自定义字符集过滤器

  • 创建servlet
package com.example.web.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置响应类型resp.setContentType("text/html");//获取输出流对象PrintWriter out = resp.getWriter();out.println("使用springboot字符过滤器");out.flush();out.close();}}
  • 注册servlet和配置字符集过滤器
package com.example.web.config;import com.example.web.servlet.MyServlet;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.filter.CharacterEncodingFilter;@Configurationpublic class MyWebConfig {//注册servlet@Beanpublic ServletRegistrationBean servletRegistrationBean(){ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();servletRegistrationBean.setServlet(new MyServlet());servletRegistrationBean.addUrlMappings("/test");return servletRegistrationBean;}//注册内置的字符过滤器@Beanpublic FilterRegistrationBean filterRegistrationBean(){//内置的字符过滤器CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();//按需求定制字符过滤器characterEncodingFilter.setEncoding("utf-8");characterEncodingFilter.setForceEncoding(true);//注册按照个性化需求配置后的字符过滤器FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(characterEncodingFilter);filterRegistrationBean.addUrlPatterns("/*");return filterRegistrationBean;}}
  • 修改application.properties文件,让自定义的过滤器起作用
#关闭springboot框架默认的字符编码格式:ISO-8859-1server.servlet.encoding.enabled=false使用框架内置的字符集过滤器
  • 创建servlet
package com.example.web.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置响应类型resp.setContentType("text/html");//获取输出流对象PrintWriter out = resp.getWriter();out.println("**** 使用springboot字符过滤器 ****");out.flush();out.close();}}
  • 注册servlet
package com.example.web.config;import com.example.web.servlet.MyServlet;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MyWebConfig {//注册servlet@Beanpublic ServletRegistrationBean servletRegistrationBean(){ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();servletRegistrationBean.setServlet(new MyServlet());servletRegistrationBean.addUrlMappings("/test");return servletRegistrationBean;}}
  • 修改application.properties文件,让框架内置的字符集过滤器实现个性化定制
#让springboot默认的字符过滤器生效server.servlet.encoding.enabled=true#将默认的字符过滤器的编码格式设置为utf-8server.servlet.encoding.charset=utf-8#将请求和响应的编码格式都按照字符过滤器中的编码格式来进行解析server.servlet.encoding.force=true【SpringBoot 03: 常用web组件 - - - 拦截器 + Servlet + 过滤器】

推荐阅读