代码读取web.xml配置文件(servalet)

发布时间 2023-04-23 10:26:11作者: 爱豆技术部
代码读取web.xml配置文件(servalet)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
        version="4.0">
  <filter>
      <filter-name>encode</filter-name>
      <filter-class>com.conyou.filter.EncodeFilter</filter-class>
      <!-- 设置初始参数,方便解耦,因为这个编码可以随时更改,不想在过滤器中改,毕竟过滤器是java代码     -->
      <init-param>
          <param-name>encode</param-name>
          <param-value>utf-8</param-value> <!--这里的urf-8通过配置文件读取-->
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>encode</filter-name>
      <!--   我们的过滤器只是解决中文编码的,所以配置拦截servlet就行     -->
      <url-pattern>/conyou/*</url-pattern>
  </filter-mapping>
</web-app>
package com.conyou.filter;

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

public class EncodeFilter implements Filter {
   private String encode;
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
       // filterConfig 帮我们获取Filter初始化参数:
       String encode = filterConfig.getInitParameter("encode");
       if(encode != null){
           this.encode = encode;
      }else{//假如web.xml中没有配置init-param 这里就会出500错误--空指针异常
           this.encode = "utf-8";
      }
  }

   @Override
   public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
       //设置请求信息的解码格式:
       req.setCharacterEncoding(encode);
       //设置响应信息的编码格式:
       resp.setCharacterEncoding(encode);
       //设置浏览器的解码格式:
       String s="text/html;charset=" + encode;
       resp.setContentType(s);
       //放行资源:(放行到下一个过滤器或者请求资源)
       filterChain.doFilter(req,resp);
  }

}