MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。
视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。
模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性。
控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。然后根据处理的结果调用相应的视图来显示处理的结果。
MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。
Struts2框架是一个按照MVC设计模式设计的WEB层框架,是在Struts 1和WebWork的技术基础上进行了合并的全新的框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开。
我们可以把Struts2理解为一个大大的Servlet,而这个Servlet就是ActionServlet。Struts2在处理客户端请求时,会先读取web.xml配置文件,根据前端控制器将符合条件的请求分给各个不同的Action处理。在此之前,ActionServlet会把数据封装成一个JavaBean。
Struts2框架提供了许多的拦截器,在封装数据的过程中,我们可以对数据进行一些操作,例如:数据校验等等。当Action执行完后要返回一个结果视图,这个结果视图可以跟据struts2的配置文件中配置,选择转发或者重定向。
1.在软件设计上Struts2的应用可以不依赖于Servlet API和struts API。 Struts2的这种设计属于无侵入式设计;
2.拦截器,实现如参数拦截注入等功能;
3.类型转换器,可以把特殊的请求参数转换成需要的类型;
4.多种表现层技术,如:JSP、freeMarker、Velocity等;
5.Struts2的输入校验可以对指定某个方法进行校验;
6.提供了全局范围、包范围和Action范围的国际化资源文件管理实现;
1.Struts2框架是通过Filter启动的,即StrutsPrepareAndExecuteFilter,此过滤器为struts2的核心过滤器;
2.StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。struts2读取到struts.xml的内容后,是将内容封装进javabean对象然后存放在内存中,以后用户的每次请求处理将使用内存中的数据,而不是每次请求都读取struts.xml文件。
1)通过ActionContext可以获得request,application,session三个作用域(struts2实际上是通过适配器来把servlet的api转换为一个map,并把这些map放在ActionContext里面)。
2)通过ActionContext的子类ServletActionContext去获取原滋原味的API。
3)可以通过实现ServletRequestAware接口,重写里面的setServletRequest方法可以获得request,实际上是通过set的依赖注入。
1)感叹号定位方法(动态方法)。
2)在xml配置文件中通过配置多个action,使用action的method指定方法。
3)使用通配符(*)匹配方法。
一共10种:
dispatcher是默认的结果类型,把控制权转发给应用程序里的某个资源。
redirect把响应重定向到另一个资源(包括一个外部资源)
redirectAction把响应重定向到另一个 Action
freemarker、velocity、chain、httpheader、xslt、plainText、stream
1.ActionContext是当前的Action的上下文环境,通过ActionContext可以获取到request、session、ServletContext等与Action有关的对象的引用;
2.ServletContext是域对象,一个web应用中只有一个ServletContext,生命周期伴随整个web应用;
3.pageContext是JSP中的最重要的一个内置对象,是JSP四个域对象中最小的。可以通过pageContext获取其他域对象的应用,同时它是一个域对象,作用范围只针对当前页面,当前页面结束时,pageContext销毁。
常量可以在struts.xml或struts.properties中配置,两种配置方式如下:
1.在struts.xml文件中配置常量
<constant name="struts.action.extension" value="do"/>
2.在struts.properties中配置常量(struts.properties文件放置在src下):
struts.action.extension=do