43.什么是MVC设计模式
MVC模式的主要思想是把控制器、数据模型和视图进行分离,达到高内聚和低耦合的作用。使用MVC,应用程序被分为3个核心部件:模型(Model)、视图(View)、控制器(Controller)。
44.什么是Struts 2框架(Struts框架的作用)
- 快速实现MVC模式下的C层开发
- 快速灵活的配置模式,降低开发难度,梳理规范的开发流程
- 易于整合其他框架,提高项目本身的扩展性
- 零配置模式开发引入前沿的开发理念
45.Struts 1与Struts 2之间的区别
- Struts 1的缺点
- 表现层技术单一,只支持JSP;
- Action与Servlet API严重耦合,脱离Web容器难于测试;
- Action与Struts 1的API严重耦合,Action类必须继承Struts 1的Action父类处理业务逻辑时,代码中包含了ActionMapping,ActionForm,ActionForward等大量的Struts 1的API,属于入侵式设计;
- Action本质是一个Servlet,属于单实例的,容易出现线程安全问题;
- Struts 2的优点
- 支持JSP,Freemarker,Velocity等多种表现层技术;
- Action只是一个POJO类,无需与Servlet API耦合,易于测试;
- Action无需与Struts API耦合,Action无需强制继承任何父类或实现任何接口,代码可重用率高,属于非入侵式设计;
- Action本质只是一个POJO类,每一个请求都会产生一个实例,属于多实例的,因此不存在线程安全问题;
- 提供强大的拦截器功能,实现自动注入请求参数,数据类型的转换,数据校验,文件上传等多种通用功能
46.Struts 2框架的基本工作原理
- 客户端发出的请求(request)经过Struts核心过滤器的处理,核心过滤器委托ActionMapper判断请求url的后缀是否是Struts 2能处理的请求后缀(默认后缀名 是.action),如果是则转到步骤(2),否则直接放行;
- 创建Action的代理类对象ActionProxy,该对象委托ConfigurationManager读取struts.xml配置文件的信息并解析,根据请求的url匹配<action>标签的name属性,进而找到class属性(默认值是com.opensymphony.xwork2.ActionSupport类);
- ActionProxy根据<action>标签的class属性,每遇到一次请求,就利用反射创建一个新的Action对象实例;
- ActionProxy创建ActionInvocation对象,该对象调用该Action中配置的一系列的拦截器,并最终调用Action对象的执行方法(默认方法名为execute)
- 执行方法会返回一个字符串,作为跳转的逻辑视图名,再次查找struts.xml配置文件,根据逻辑视图名匹配<result>标签的name属性(默认值是success),进而找到要跳转的物理视图名,并根据<result>标签的type属性(默认值是dispatcher)进行请求转发或重定向,最终将响应(response)发送给客户端;