struts2的工作原理

Struts2是一个基于前端控制器模式的MVC框架,它采用拦截器处理用户请求,使得业务逻辑与Servlet API分离。请求先经过ActionContextCleanUp等过滤器,然后由FilterDispatcher调用ActionMapper决定是否调用Action。ActionProxy根据struts.xml找到Action类,创建ActionInvocation执行Action,其间涉及多个拦截器。Action执行完后返回结果,ActionInvocation再次拦截并生成响应。Struts2的优点包括开源、异常处理机制和方便的页面导航。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

what?

  struts2是一个基于mvc模式的web层框架,基于前端控制器的模式,以webWork为核心,采用拦截器的机制来处理用户的请求,使业务逻辑控制器与servlet的ApI完全脱离。

什么是前端控制器模式?

     传统方式的开发,有一次请求就会对一个Servlet,这样会导致出很多servlet

      struts2框架:   将所有的请求都先经过一个前端控制器,在前端控制器中实现框架的部分功能,剩下具体操作要提交到具体的Action中。

而前端控制器就是通过过滤器来实现的,因为需要所有的请求都可以被过滤器拦截,然后再过滤器中实现部分的功能。

如图所示:



工作原理    

点击打开链接

http://blog.youkuaiyun.com/laner0515/article/details/27692673/

   1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

   2.这个请求经过一系列的过滤器,(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)

   3.接着FilterDispatcher被调用,FilterDispather询问ActionMapper来决定这个请求是否需要调用某个Action

  4.如果ActionMapper决定需要调用某个Action,FiletrDispatcher把请求的处理交给ActionProxy

  5.ActionProxy通过ConfigurationManager询问框架的配置文件(struts.xml),找到需要调用的Action类

  6..ActionProxy创建一个ActionInvocation的实例

  7.ActionInvocation的实例使用命名模式来调用,在调用Action的过程前后,涉及到相应的拦截器的调用

  8.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到相应的返回结果。返回结果通常是一个需要被jsp或者FreeMaker的模板。在表示的过程中, 可以使用 struts2框架中继承的标签,在这个过程中需要涉及到ActionMapper


框架图:


Struts2工作原理(基于看完上图的理解):参考链接http://blog.youkuaiyun.com/izard999/article/details/39891281

当一个HttpServletRequest请求来了,先经过ActionContextCleanUp过滤器,清除Action环境,

再经过其他的过滤器,例如说SiteMesh和用户自定义过滤器等等, 最后到达Struts2的核心过滤器StrutsPrepareAndExecuteFilter,

此时,StrutsPrepareAndExecuteFilter会去找ActionMapping看此Action路径是否存在,如果存在,则会参照Struts.xml文件产生Action的代理,

并且执行Action,Struts2很多功能是靠拦截器完成的,所以这个Action代理真正调用Action的处理请求的方法的时候会经过拦截器1,2,3,

才真正调用Action的方法,Action方法结束后会返回一个视图,视图也会去参照ActionMapping,还会参照Template(JSP,FreeMarker),此时,

拦截器会再次拦截(说明Struts2的拦截器是进入Action和返回结果的时候都会拦截的,这比Filter好!),最后产生HttpServletResponse,相应结果!

   工作流程:

     1.客户端浏览器发出HTTP请求

     2.根据web.xml配置,该请求被FilterDispatcher 接收(即前端核心控制器)

     3.根据struts.xml配置,找到需要调用的Action类和方法,并通过IOC方式,将值注入给Action

     4.Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证

     5..Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应的页面

     6.返回HTTP响应到客户端浏览器

优点和缺点:

     1.开源方便拓展

     2.提供Exception处理机制

     3. result方式的页面导航,方便实现重定向和页面跳转

     4. 拥有简单的插件,只需放入相应的jar包,

Struts2与Struts1的区别.

          最根本的区别是Struts2基于Filter,Struts1基于Servlet, 在Web容器中, Filter的优先级是高于Servlet的

创建步骤:

 1.  导包:

              其中  

2.配置web.xml文件

StrutsPrepareAndExecuteFilter源码解析

<filter>
     <filter-name>StrutsPrepareAndExecuteFilter</filter-name>
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
     <filter-name>StrutsPrepareAndExecuteFilter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>
2.添加struts.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

 <struts>
	<constant name="struts.enable.DyanmicMethodInvocation" value="false"></constant>
	<constant name="struts.devMode" value="true"></constant>
	  <package name="default" namespace="/" extends="struts-default" >
	    <action name="emp-*" class="employeeAction" method="{1}">
	      <result name="list" >list.jsp</result>
                 。。。。。。此处省略多个 result标签。。。。。。。。。。
	    </action>
	  </package>
	
	</struts>
3.写对应的Action,Service,Dao类等  .java文件

4.写对应的页面 .jsp 文件


servlet匹配原则详细介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值