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
A. Struts 是一个基于JAVA EE的MVC
B. Struts2的框架配置文件是struts-configxml
C. Struts2的控制组建核心包括核心控制和业务控制器
D. 在Struts中解决中文乱码可以通过修改struts。I18n。encoding的值为GBK来实现
A <s:text>
B <s:error>
C <s:faild>
D <s:fielderror>
A. Action
B. ActionForm
C. ActionServlet
D. DispatchAction
A. struts2控制器组件
B. struts2配置文件
C. FilterDispatcher
D. Action
A. <package>
B. <action>
C. <form-bean>
D. <action-mapping>
A. struts1要求Action类继承其框架中的Action父类,struts2则不一定需要继承,可以是POJO类
B. struts1的Action不是线程安全的,struts2的Action是线程安全的
C. struts1和struts2都使用ActionForm对象封装用户的请求数据
D. struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值
A. 每个Action对象实例拥有一个ValueStack对象
B. 每个Action对象实例拥有多个ValueStack对象
C. Action中封装的需要传入下一个页面的值,这些值封装在ValueStack对象中
D. ValueStack会在请求开始时创建,请求结束时消亡
A. 必须在WEB-INF/classes目录下
B. 名字必须为strutss.xml
C. 配置Action时,必须配置包信息
D. 使用<forward>元素配置转发
A. <const>
B. <constants>
C. <constant>
D. <constant-mapping>
A. struts2框架使用包来管理常量
B. struts2框架定义包时必须指定name属性
C. struts2框架中配置包时,必须继承自struts-default包,否则会报错
D. struts2框架中使用包来管理Action
A. 使用ActionContext对象以解耦合的方式访问Servlet API
B. 使用ServletActionContext对象以解耦合的方式访问Servlet API
C. 使用ActionContext对象以耦合的方式访问Servlet API
D. 使用ActionContext对象以耦合的方式访问Servlet API
A. 普通的Action类可以实现
B. 继承自Action接口的可以实现
C. 继承自ActionSupport类可以实现
D. 继承自ActionValidate类可以实现
A. Dispatcher
B. StrutsResultSupport
C. Support
D. Action
A. ${属性名}
B. @{属性名}
C. ${'属性名'}
D. ${"属性名"}
A. <s:text>
B. <s:message>
C. <s:textfile>
D. <s:resource>
A. 实现Interceptor接口
B. 实现AbstractionInceptor接口
C. 继承Interceptor类
D. 继承AbstractionInceptor类
A. <interceptor-ref>
B. <interceptor>
C. <intercep>
D. <defaull-interceptor-ref>
A. 取出符合选择逻辑的第一个元素
B. 取出符合选择逻辑的第=最后一个元素
C. 取出符合选择逻辑的所有元素
D. 以上说法都不对
A. <s:property>
B. <s:iterator>
C. <s:logic>
D. <s:foreach>
A. ActionContext是OGNL上下文环境
B. StackContext是OGNL上下文环境
C. ValueStack是OGNL根
D. ActionContext是OGNL根