Filter过滤器

本文详细介绍了字符编码过滤器的工作原理、实现方式及其在Web应用中的重要性。通过Java代码示例展示了如何实现字符编码过滤器,并配置其用于处理不同编码的请求和响应。同时,文章还讨论了页面编码与Filter编码的一致性需求及Tomcat服务器配置调整,确保数据传输过程中的正确编码转换。

过滤器是一个实现了javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:

1    public void doFilter (ServletRequest, ServletResponse, FilterChain)

该方法在每次一个请求/响应对因客户端在链的末端请求资源而通过链传递时由容器调用。

2    public void init(FilterConfig filterConfig)

该方法由 Web 容器调用,指示一个过滤器被放入服务。

3    public void destroy()

该方法由 Web 容器调用,指示一个过滤器被取出服务。

字符编码过滤器

  1. public classCharacterEncodingFilter implements Filter{ 
  2.       private String characterEncoding; 
  3.       private boolean enabled; 
  4.   
  5.       public void init(FilterConfig config)throws ServletException{ 
  6.              characterEncoding = config.getInitParameter(“characterEncoding”); 
  7.              enabled = 
  8.              “true”.equalsIgnoreCase(config.getInitParameter(“enabled”).trim()); 
  9.       } 
  10.       public void doFilter(ServletRequestrequest,ServletResponse response, 
  11.              FilterChainchain) throws IOException,ServletExceprion{ 
  12.       if(enabled&& characterEncoding !=null){ 
  13.              request.setCharacterEncoding(characterEncoding); 
  14.              response. setCharacterEncoding(characterEncoding); 
  15.       } 
  16.       chain.doFilter(request,response);  //不能漏写这一句 
  17.       } 
  18.       
  19.       public void destroy(){ 
  20.              characterEncoding = null//销毁时清空 
  21.       } 
  22.   
public classCharacterEncodingFilter implements Filter{
      private String characterEncoding;
      private boolean enabled;
 
      public void init(FilterConfig config)throws ServletException{
             characterEncoding = config.getInitParameter(“characterEncoding”);
             enabled =
             “true”.equalsIgnoreCase(config.getInitParameter(“enabled”).trim());
      }
      public void doFilter(ServletRequestrequest,ServletResponse response,
             FilterChainchain) throws IOException,ServletExceprion{
      if(enabled&& characterEncoding !=null){
             request.setCharacterEncoding(characterEncoding);
             response. setCharacterEncoding(characterEncoding);
      }
      chain.doFilter(request,response);  //不能漏写这一句
      }
     
      public void destroy(){
             characterEncoding = null;  //销毁时清空
      }
 
}

  1. <filter> 
  2.    <filter-name> CharacterEncodingFilter </filter-name> 
  3.    <filter-class> filter.CharacterEncodingFilter</filter-class> 
  4.    <init-param> 
  5.        <param-name> characterEncoding </param-name> 
  6.        <param-value>UTF-8</param-value> 
  7.    </init-param> 
  8.       <init-param> 
  9.        <param-name> enabled </param-name> 
  10.        <param-value>true</param-value> 
  11.    </init-param> 
  12. </filter> 
  13.   
  14. <filter-mapping> 
  15.    <filter-name> CharacterEncodingFilter </filter-name> 
  16.    <url-pattern>/*</url-pattern> 
  17.       <dispatcher>REQUEST</dispatcher> 
  18. </filter-mapping> 
<filter>
   <filter-name> CharacterEncodingFilter </filter-name>
   <filter-class> filter.CharacterEncodingFilter</filter-class>
   <init-param>
       <param-name> characterEncoding </param-name>
       <param-value>UTF-8</param-value>
   </init-param>
      <init-param>
       <param-name> enabled </param-name>
       <param-value>true</param-value>
   </init-param>
</filter>
 
<filter-mapping>
   <filter-name> CharacterEncodingFilter </filter-name>
   <url-pattern>/*</url-pattern>
      <dispatcher>REQUEST</dispatcher>
</filter-mapping>

页面编码方式与Filter的编码方式必须一致,另外,如果表单是GET方式提交的,还需要修改Tomcat的server.xml,指定URIEncoding(默认为ISO-8859-1)

<Connect port= “8080” protocol = ”HTTP/1.1” connectionTimeout = “20000”

redirectPort = “8443”URIEncoding = “UTF-8”/>

<dispatcher>标签一般不用配置,默认为REQUEST,一共有四种

REQUEST:只有直接请求Servlet时才生效

FORWARD:只有当某Servlet通过forward到该Servlet时才生效

INCLUDE:JSP中通过<jsp:include/>请求某Servlet时才生效

ERROR:JSP通过<%@ pageerrorPage = “error.jsp” %>指定错误页面时才生效

filter的顺序是按照<filter-mapping>的配置先后来执行的

filter的典型应用还有身份验证过滤器(Authentication Filters)、数据压缩过滤器(Data compression Filters)、加密过滤器(EncryptionFilters)、触发资源访问事件过滤器、图像转换过滤器(Image Conversion Filters)、日志记录和审核过滤器(Loggingand Auditing Filters)、MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)、标记化过滤器(TokenizingFilters)、XSL/T 过滤器(XSL/T Filters)、转换 XML 内容,此外,通过重载HttpServletRequestWrapper类,自定义request还可以实现文件上传的Filter

【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)内容概要:本文介绍了基于蒙特卡洛和拉格朗日方法的电动汽车充电站有序充电调度优化方案,重点在于采用分散式优化策略应对分时电价机制下的充电需求管理。通过构建数学模型,结合不确定性因素如用户充电行为和电网负荷波动,利用蒙特卡洛模拟生成大量场景,并运用拉格朗日松弛法对复杂问题进行分解求解,从而实现全局最优或近似最优的充电调度计划。该方法有效降低了电网峰值负荷压力,提升了充电站运营效率与经济效益,同时兼顾用户充电便利性。 适合人群:具备一定电力系统、优化算法和Matlab编程基础的高校研究生、科研人员及从事智能电网、电动汽车相关领域的工程技术人员。 使用场景及目标:①应用于电动汽车充电站的日常运营管理,优化充电负荷分布;②服务于城市智能交通系统规划,提升电网与交通系统的协同水平;③作为学术研究案例,用于验证分散式优化算法在复杂能源系统中的有效性。 阅读建议:建议读者结合Matlab代码实现部分,深入理解蒙特卡洛模拟与拉格朗日松弛法的具体实施步骤,重点关注场景生成、约束处理与迭代收敛过程,以便在实际项目中灵活应用与改进。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值