Struts2的面试知识点

来源:互联网 发布:app相册制作软件 编辑:程序博客网 时间:2024/06/05 05:56

框架(framework):是一个基本概念上的结构,用于去解决或者处理复杂的问题.其实就是一组组件,供选用完成自己的系统,简单说就是使用别人搭好的舞台,自己来表演.框架只能在待定的领域解决问题.
框架的优点是:
  1. 重用代码大大增加,软件生成效率和质量也得到了提高
  2. 使用框架开发,框架提供了统一的标准,大大降低了我们的后期维护.

1.Struts2

概念:Struts2是一个基于MVC设计模式的web应用框架.本质上是一个Servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互Strut2=Struts1+webwork
Struts2的MVC:
    Model---->javaBean
     View----->jsp
    Controller------->Servlet
Struts2的核心:
  • 拦截器interceptor(提供功能)
  • Action
  • ognl与valuestack(值栈)

Struts2的执行流程:
  1. 浏览器发送一个请求
  2. 被StrutsPrepareAndExcuteFilter(前端控制器,核心控制器)拦截
  3. 调用Struts2框架默认的拦截器(interceptor)完成部分功能
  4. 在执行Action中操作
  5. 根据Action中方法的执行结果来选择跳转页面result视图.

Struts2框架封装数据方式:
  1. 属性驱动
             直接在Action类中提供与请求参数匹配的属性,提供get/set方法
   
    2. 模型驱动
  • 让Action类实现一个指定接口ModelDriven
  • 实例化模型对象,(就是需要先new出一个javaBean)
  • 重写getModel方法将实例化的模型返回.
Struts2中获取Servlet API
1,从ServletActionContext中获取
2,采用注入的方式.
OGNL表达式
ognl是object-graph Navigation Language(对象图导航语言)
OGNL作用:
  1. 支持对象的操作,调用对象的方法
  2. 支持静态成员访问
  3. 支持赋值操作与表达式串联
  4. 访问OGNL上下文,访问ActionContext
  5. 操作集合对象
valueStack值栈
使用valueStack的主要目的是为我们action中产生的数据携带到页面上,也就是说valueStack是一个容器
当客户端向我们发送一个请求,服务器就会创建一个Action来处理请求,struts2中的action是一个多例,每一次请求都会有一个新的action对应,.所以action不存在线程安全问题.
一个请求对应一个action,对应一个actionContext,对应一个valueStack,对应一个OGNLvalueStack,对应一个SerletActionContext.
值栈(valuestack)实际上就是对OGNL的封装,OGNL主要的功能就是赋值与取值.Struts2正是通过ValueStack来进行赋值与取值的.
值栈的生命周期是一次请求,等同于request的周期
值栈的对象栈(root)实质上是List,保存Model.Action对象.上下文栈(context)实质上是Map,保存request,reponse,session.servletContext.attr.parameters等

Interceptor拦截器
struts2中的interceptor是基于spring aop(面向切面编程)思想,而aop思想本质上是通过动态代理来实现.我们struts2的拦截器主要是拦截action的操作,在action的执行前或者执行后进行一些其他的功能操作
拦截器与过滤器的区别:
  1. 拦截器是基于java反射机制的,而过滤器是基于函数回调的
  2. 拦截器不依赖于Servlet容器,而过滤器是依赖于Servlet容器的
  3. 拦截器只能对Action请求起作用.而过滤器则可以对几乎所有请求起作用
  4. 拦截器可以访问Action上下文.值栈里的对象,而过滤器不能.
  5. 在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次.

结论:struts2中可复用的代码功能都是基于Interdceptor(拦截器)来实现的.Strut2有很多内置拦截器,用来实现不同的功能.
Action是执行具体的业务逻辑代码的,在拦截器之后执行




Struts2和springMVC的区别:
SpringMVC的入口是一个Servlet即前端控制器,而Struts入口是一个Fileter过滤器.SpringMVC是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参.可以设计为单例或多例(建议单例).struts2是基于类开发的.传递参数是通过类的属性.只能设计为多例
Struts2采用值栈存储请求和响应的数据.通过OGNL存取数据.springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象.最后又将ModelAndView中的模型数据通过request域传输到页面.JSP视图解析器默认使用JSTL
原创粉丝点击