目录
1.对struts2的理解
a.struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个Servlet处理,这个Servlet再参照一个配置文件(通常为/WEB-INF/struts-config.xml)将各个请求分别分配给不同的action去处理。
b.ActionServlet把请求交给action去处理之前,会将请求参数封装成一个formbean对象,然后调用formbean的validate方法进行校验,只有校验通过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,这个错误页面由input属性指定
c.action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml配置文件为jsp页面设置的
2.Struts2执行流程
1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被FilterDispatcher接收。
3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
6、返回HTTP响应到客户端浏览器。
3.拦截器和过滤器
1.拦截器是基于java反射机制的,而过滤器是基于函数回调的;
2.过滤器依赖于servlet容器,而拦截器不依赖于servlet容器;
3.拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用;
4.拦截器可以访问Action上下文、值栈里的对象,而过滤器不能;
5.在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
4.Struts2与SpringMVC的区别
a.Springmvc的入口是一个servlet即前端控制器,而Struts2入口是一个filter过虑器;
b.Springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例;
c.Struts2采用值栈存储请求和响应的数据,通过OGNL存取数据,Springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用JSTL。
5.struts2如何防止用户表单重复提交?
第一步:在表单中加入<s:token />
第二步,使用token栏截器,定义invalid.token结果集
要使用<s:token /> 必须要在struts.xml的action中引用token的预定义拦截器。
<interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>
当然还可以使用tokenSession
<interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"
6.MVC,分析一下struts是如何实现MVC的
m:JavaBean 或结合 EJB 组件或者pojo构成
c:Action 来实现
v:一组 JSP 文件及其标签构成。