`

Struts2响应请求流程

阅读更多
service 启动时会初始化过滤器,其中最主要的过滤器是filterDispatcher这个过滤器,filterDispatcher的初始化代码如下
public void init(FilterConfig filterConfig) throws ServletException {
      try {
          this.filterConfig = filterConfig;
          initLogging();
          dispatcher = createDispatcher(filterConfig);
          dispatcher.init();
          dispatcher.getContainer().inject(this);
          staticResourceLoader.setHostConfig(newFilterHostConfig(filterConfig));
        } finally {
            ActionContext.setContext(null);
        }
    } 

由上面的代码可以看出,在filterDispatcher的初始化中,
会初始化log,创建一个dispatcher并对他进行初始化,并调用它的container的inject方法,在这个方法中会根据
[struts-default.xml, struts-plugin.xml, struts.xml]这些配置文件,获取里面action,inceputor的配置信息,
放在ActionMapper里面。
当一个http请求过来时,经过层层过滤器,最后调用filterDispatcher过滤器,执行他的doFilter,代码如下:
 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
....
ActionMapping mapping;
    try {
        mapping = actionMapper.getMapping(request,  dispatcher.getConfigurationManager());
            } catch (Exception ex) {
                log.error("error getting ActionMapping", ex);
                dispatcher.sendError(request, response, servletContext, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
                return;
            }
....
dispatcher.serviceAction(request, response, servletContext, mapping);
....
} 

在这个方法里面会根据
传入的HTTP信息,到ActionMapper查找是否需要调用某个action类,如果需要,获取该action在配置文件中的mapping,并掉用如下dispatcher的serviceAction方法:
public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException {
....
 try {
            UtilTimerStack.push(timerKey);
            String namespace = mapping.getNamespace();
            String name = mapping.getName();
            String method = mapping.getMethod();
            Configuration config = configurationManager.getConfiguration();
            ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
                    namespace, name, method, extraContext, true, false);
            request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, proxy.getInvocation().getStack());
            // if the ActionMapping says to go straight to a result, do it!
            if (mapping.getResult() != null) {
                Result result = mapping.getResult();
                result.execute(proxy.getInvocation());
            } else {
                proxy.execute();
            }
....
}

在serviceAction方法中会创建需要调用的action的代理类,actionProxy,调用代理类的excute()方法。代码为:
public String execute() throws Exception {
....
 retCode = invocation.invoke();
....
} 

如上在excute()方法中,会调用代理类的Invocation()方法,此刻,就会调用struts默认的一系列拦截器在struts-default.xml中定义。如ParametersInterceptor,ActionMappingParametersInteceptor拦截器和用户自己定义的拦截器,执行完后就会调用用户真正执行的action类的指定方法体
分享到:
评论

相关推荐

    Struts框架响应客户请求的工作流程

    详细讲解Struts框架响应客户请求的工作流程

    Struts2执行流程

    Struts2执行流程 1. web.xml 部署描述符 2. FilterDispatcher 实现StrutsStatics, Filter接口 (1)Filter:一个filter是一个对象用于执行过滤任务为每个请求资源(一个servlet或静态内容),或响应一个资源,或两者.过滤...

    struts2工作原理

    struts2工作原理、请求响应流程。。。。。。。。。。。。。。。

    struts2.0.jar

    不像 ActionForwards,Struts 2结果可以帮助准备响应,并提供构建多种输出类型的灵活性。 · 改进的标签: Struts 2标签不单单发送输出数据,还能提供样式表驱动标记,这样就可以用较少的代码构建一致性页面。Struts ...

    Struts开发在线考试系统\.pdf

    介绍目前流行的MVC设计模式以及基于MVC模式的Struts框架;通过模拟传统的考场考试,利用 Struts框架的优势设计...该系统为例分析了Struts框架的请求2响应流程;最后,列出在线考试系统的常见问题,并给出了具体的解决方 案.

    struts教学ppt

    一个很好的学习ppt Struts基本概念和体系结构 配置Struts应用 Struts框架响应客户请求的流程 Struts的内置Action类 Struts应用的国际化(I18N) Struts常用标签库

    struts2.4+spring3.1+hibernate4.1的SSH框架

     系统的基本业务流程是: 在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action...

    其他类别Struts+Hibernate实现MVC-strutsmvc.rar

    在这个示例项目中,Struts框架负责处理用户的请求和响应,以及与视图层的交互。它提供了一个简洁的控制器层,用于处理不同的业务逻辑和导航流程。同时,Struts还提供了一些实用的标签库和验证器,可以帮助开发者更...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    这是因为某个servlet(服务器端Java程序)在应用户的请求而首次调入内存执行之后将一直驻留在内存里,对同一个servlet的后续请求不用再对这个servlet的类进行实例化,因此响应速度更快。 可是,servlet也存在一个...

    java web 开发详解

    Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的流程,支持...

    源码基于JSP的博客系统(struts+hibernate+spring).rar

    Struts作为模型-视图-控制器(MVC)架构的一部分,负责处理Web层的请求和响应流程,简化了用户界面与后端逻辑之间的交互。Hibernate则提供了对象关系映射(ORM),将复杂的数据库操作封装成简单的Java对象处理,极大...

    图书管理系统(struts+hibernate+spring)130225.rar

    该资料包采用了Struts框架来管理Web层的请求与响应,Hibernate作为对象关系映射(ORM)工具以简化数据库操作,并通过Spring框架实现依赖注入和业务逻辑管理,确保了系统架构的健壮性和灵活性。该系统旨在提供一个...

    车辆管理系统(struts+hibernate+spring+oracle)130225.rar

    Struts作为MVC框架,负责处理用户的请求和响应,以及页面之间的跳转。Hibernate作为ORM框架,负责将Java对象映射到Oracle数据库中的表,使得开发者可以用面向对象的方式来操作数据库,而不需要编写复杂的SQL语句。...

    Struts开发在线考试系统 (2006年)

    介绍目前流行的MVC设计模式以及基于MVC模式的Struts框架;通过模拟传统的考场考试,利用Struts框架的...并以该系统为例分析了Struts框架的请求一响应流程;最后,列出在线考试系统的常见问题,并给出了具体的解决方案。

    jsp + servlet + javaben实现springmvc

    C:Controller,控制层,指工程中的Servlet,作用是接受请求和响应请求 MVC的工作流程: 用户通过视图层发送请求到服务器,在服务器中请求被Controller接受,Controller调用相应的Model层处理请求,处理完毕将结果...

    外文翻译 stus MVC

    Struts is a set of cooperating classes, servlets, and JSP tags that make up a reusable MVC 2 design. This definition implies that Struts is a framework, rather than a library, but Struts also contains...

    21道Java Spring MVC综合面试题详解含答案(值得珍藏)

    Spring MVC是Spring框架中的一部分,全称是Spring Web MVC,...Controller再根据请求处理的结果找到对应的View视图,渲染数据后最终响应给浏览器。 此外,Spring MVC还支持本地化/国际化(Locale)解析及文件上传等。

Global site tag (gtag.js) - Google Analytics