ServletAPI到底提供了什么?
HTTP信息保存到了对应的Servlet对象中,如HttpServletRequest,HttpServeletResponse等;
会话机制,这使得我们能够确定哪些请求是来自同一个用户的。
ServletAPI没给我们提供什么?
请求参数到java数据类型的绑定和数据的验证
这一步繁琐,无聊,且容易出错
访问业务逻辑和访问数据层
设计出来的业务逻辑和数据层应该与是不是web程序访问它这件事儿无关。他们应该独立于web程序。
呈现表示层和国际化
HTML?现在表示层已经不仅仅是纯HTML这么简单了
Struts和MVC
MVC概念 | Struts概念 |
模型 | 动作 |
模型的概念比较模糊,他应该是数据和操作的一个集合 | |
视图 | 结果 |
JSP,Velocity等 | |
控制器 | FilterDispatcher |
不处理核心业务,只负责路由客户端请求,把请求发送给对应着的Servlet去处理。他是一个Servlet的过滤器。 需要我们设定这种映射规则 |
Struts2 工作原理
这个图里面涉及了几个没有介绍过的东西:拦截器,OGNL,ValueStack,ActionContext。
拦截器:一般来说是一组Servlet过滤器,它会过滤所有传递进来的请求并在把结果返回给用户之前再过滤一次。
可以设置拦截器是在动作之前工作,还是在动作之后工作。
ValueStack:是用来存储与请求相关的数据的一个存储区域。他会把所有相关的信息存储在ValueStack中,而不是把用到的信息传来穿去。
OGNL:他是一种表达式语言,能够让我们引用到或者修改存储在ValueStack中的数据。
ActionContext:就是用来存储ValueStack以及一些被Struts2封装的request,session等对象的地方。它能够从任何地方访问到,因为Struts2的每一次访问都是ThreadLocal。
而我们为了获取其中的内容,也是通过OGNL。