Struts的一些总结

1Struts2Struts1的区别

Action

Struts1Action必须继承

Struts2Acton可以不继承

线程

Struts1单例的,存在线程安全问题,如果用actionform的话,ActionForm是多例的,所以可以保证线程安全

Struts2多例的,没有线程安全问题

psstruts2只能是多例的,struts1action交给spring管理可以是多例的)

ActionForm

Struts1收集数据使用ActionFormActionForm需要继承。复用率低。

Struts2可以不用ActionForm,之间让Action来收集数据,采用ModelDriven支持Struts1ActionForm方式。

表达式语言方面

Struts1中使用jstl

Struts2中使用ognl

类型转换

Struts1中对ActionForm的类型转换采用commons-beanutils工具,一个转换器对所有ActionForm起作用,不能针对单个配置。

Struts2使用OGNL进行类型转换,可以针对某个类型进行配置。

校验

Struts1采用覆盖ActionForm中的validate方法或采用验证框架commons validator验证

Struts2支持覆盖validate来完成验证,也支持验证框架xWork来验证

Action执行控制

Struts1固定不变

Struts2通过拦截器,可以改变执行流程,灵活配置

2Struts1的流程

浏览器请求到ActionServlet类,该类将响应请求并进行分发到ActionAction调用Model。将请求返回给ActionServlet,ActionServlet将请求回的数据forwardjsp,并将jsp返回给浏览器。

Struts的一些总结_第1张图片

3Struts2的流程

Struts的一些总结_第2张图片

客户端浏览器发起请求,请求先经过一系列的Filter(所以filter的生命周期)最先到达ActionContextCleanUp,再到其他的过滤器,之后到StrutsPrepareAndExecuteFilter过滤器,接着StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请求需要调用的Action,如果ActionMapper决定需要调用某个ActionStrutsPrepareAndExecuteFilter把请求交给ActionProxy处理;Actionproxy通过Configuration Manager询问框架的配置文件,找到需要调用的action类。ActionProxy创建一个ActionInvocation实例。ActionInvocation实例使用命名模式来调用,在调用Action的过程前后都涉及到相关拦截器的调用,默认是18个拦截器。一旦Action执行完毕,ActionInvocation负责根据struts.xml中配置找到对应的返回结果。表示过程中可以使用struts2标签,需要Actionmapper

 

 

4FilterServletInterceptorListener区别?

 

项目

Servlet

Listener

Filter

Interceptor

包名

javax.servlet.http.HttpServlet

javax.servlet.ServletContextListener

javax.servlet.Filter

com.opensymphony.xwork2.interceptor.AbstractInterceptor

功能

生成响应内容并且将其传给服务器

做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。基于函数回调

基于java反射机制。面向切面编程。

生命周期

由容器控制,可以配置。无配置时默认在第一次调用前加载,容器关闭时销毁,当容器做内存回收时也可能被销毁。不能离开web容器

web容器启动,只初始化一次,不能离开web容器。

Web容器启动时启动,初始化一次,不能离开web容器。在容器初始化时被调用一次

加载struts.xml后,初始化相应拦截器,服务器停止销毁拦截器。不依赖web容器,可以多次调用

配置位置

Web.xml3.0后开始支持注解

Web.xml

Web.xml

Struts配置文件中

作用对象

url

对象,如session的创建,session.setAttribute发生

urlaction几乎所有对象

Action

Web.xml加载顺序:context- param -> listener ->filter -> servlet.

执行流程图:

Servlet

Struts的一些总结_第3张图片

Filter

Struts的一些总结_第4张图片

 

Struts的一些总结_第5张图片

Listener

Struts的一些总结_第6张图片

Interceptor

Struts的一些总结_第7张图片

5struts.xml文件什么时候加载与特性

StrutsPreparedAndExecuteFilterinit方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。Struts2读取到struts.xml的内容后,是将内容封装进javabean对象然后存放在内存中,以后用户每次请求处理将使用内存中的数据,而不是每次都请求读取struts.xml文件。

6struts2框架的核心过滤器?作用?

StrutsPrepareAndExecuteFilter。作用:拦截url-pattern指定的所有用户请求,当请求到达时,该filter会过滤用户请求。

7、值栈ValueStack的原理和生命周期?

保存在request域中和request的生命周期一样。每个action都有一个对应的值栈,值栈存放的数据类型是该action的实例,以及该action中的实例变量,action默认保存在栈顶。ValueStack本质上是ArrayList

8OGNLJSTLEL表达式?

Jstl:是jsp标签;ognlel类似都是表达式语言。Eljstl联用,jstl用来取值,el用来展示。

产品

Struts2标签

Ognl

Jstl

El

使用方式

引入:<%@ taglib uri="/struts-tags" prefix="s"%>

使用:好多种取值方式

对象图形化导航语言,要结合struts标签使用。符号:#$%

标签库,引入<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

${}

 

 

你可能感兴趣的:(SSH)