• struts2源码分析StrutsPrepareAndExecuteFilter


    这个是struts2的核心过滤器(Filter),代码如下:

      1 /*
      2  * $Id: DefaultActionSupport.java 651946 2008-04-27 13:41:38Z apetrelli $
      3  *
      4  * Licensed to the Apache Software Foundation (ASF) under one
      5  * or more contributor license agreements.  See the NOTICE file
      6  * distributed with this work for additional information
      7  * regarding copyright ownership.  The ASF licenses this file
      8  * to you under the Apache License, Version 2.0 (the
      9  * "License"); you may not use this file except in compliance
     10  * with the License.  You may obtain a copy of the License at
     11  *
     12  *  http://www.apache.org/licenses/LICENSE-2.0
     13  *
     14  * Unless required by applicable law or agreed to in writing,
     15  * software distributed under the License is distributed on an
     16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     17  * KIND, either express or implied.  See the License for the
     18  * specific language governing permissions and limitations
     19  * under the License.
     20  */
     21 package org.apache.struts2.dispatcher.ng.filter;
     22 
     23 import org.apache.struts2.StrutsStatics;
     24 import org.apache.struts2.dispatcher.Dispatcher;
     25 import org.apache.struts2.dispatcher.mapper.ActionMapping;
     26 import org.apache.struts2.dispatcher.ng.ExecuteOperations;
     27 import org.apache.struts2.dispatcher.ng.InitOperations;
     28 import org.apache.struts2.dispatcher.ng.PrepareOperations;
     29 
     30 import javax.servlet.*;
     31 import javax.servlet.http.HttpServletRequest;
     32 import javax.servlet.http.HttpServletResponse;
     33 import java.io.IOException;
     34 import java.util.List;
     35 import java.util.regex.Pattern;
     36 
     37 /**
     38  * Handles both the preparation and execution phases of the Struts dispatching process.  This filter is better to use
     39  * when you don't have another filter that needs access to action context information, such as Sitemesh.
     40  */
     41 public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
     42     protected PrepareOperations prepare;
     43     protected ExecuteOperations execute;
     44     protected List<Pattern> excludedPatterns = null;
     45 
     46     public void init(FilterConfig filterConfig) throws ServletException {
     47         InitOperations init = new InitOperations();
     48         try {
     49             FilterHostConfig config = new FilterHostConfig(filterConfig);
     50             init.initLogging(config);
     51             Dispatcher dispatcher = init.initDispatcher(config);
     52             init.initStaticContentLoader(config, dispatcher);
     53 
     54             prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
     55             execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);
     56             this.excludedPatterns = init.buildExcludedPatternsList(dispatcher);
     57 
     58             postInit(dispatcher, filterConfig);
     59         } finally {
     60             init.cleanup();
     61         }
     62 
     63     }
     64 
     65     /**
     66      * Callback for post initialization
     67      */
     68     protected void postInit(Dispatcher dispatcher, FilterConfig filterConfig) {
     69     }
     70 
     71     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
     72 
     73         HttpServletRequest request = (HttpServletRequest) req;
     74         HttpServletResponse response = (HttpServletResponse) res;
     75 
     76         try {
     77             prepare.setEncodingAndLocale(request, response);
     78             prepare.createActionContext(request, response);
     79             prepare.assignDispatcherToThread();
     80             if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
     81                 chain.doFilter(request, response);
     82             } else {
     83                 request = prepare.wrapRequest(request);
     84                 ActionMapping mapping = prepare.findActionMapping(request, response, true);
     85                 if (mapping == null) {
     86                     boolean handled = execute.executeStaticResourceRequest(request, response);
     87                     if (!handled) {
     88                         chain.doFilter(request, response);
     89                     }
     90                 } else {
     91                     execute.executeAction(request, response, mapping);
     92                 }
     93             }
     94         } finally {
     95             prepare.cleanupRequest(request);
     96         }
     97     }
     98 
     99     public void destroy() {
    100         prepare.cleanupDispatcher();
    101     }
    102 }


    doFilter方法的作用是捕获以.action为结尾的请求,然后给他分配action,处理request,返回response!
  • 相关阅读:
    MariaDB + Visual Studio 2017 环境下的 ODBC 入门开发
    CUDA 9.1/9.2 与 Visual Studio 2017 (VS2017 15.6.4) 的不兼容问题
    用 SDL2 在屏幕上打印文本
    用 SDL2 处理精灵图
    用 SDL2 进行事件驱动编程
    用 SDL2 加载PNG平铺背景并显示前景
    用 SDL2 平铺背景并显示前景
    用 SDL2 显示一张图片
    VPS 安全措施(CentOS 6)
    Hello World!
  • 原文地址:https://www.cnblogs.com/imhurley/p/2594548.html
Copyright © 2020-2023  润新知