struts2是一个按照MVC模式设计的一个web层的框架,其实它就相当于一个大的servlet.但是它和servlet是有区别的.servlet默认在第一次访问的时候创建,只创建一次,是单实例对象.struts2的action是多实例对象,每次访问的时候都会创建action对象
struts.xml配置文件中的package标签的namespace属性值和action标签里面的name属性值构成访问路径,action标签里的class值表示所对应的Action类的全路径.如果不配置method属性的时候,Action类里面默认执行的方法是execute方法.action标签里的method属性值对应类中Action的方法名.在result标签里面配置方法的返回值到页面.但是,如果一个类的方法很多,就需要写多个action标签,这时可以使用通配符来简化配置
在继承ActionSupport类后,可以使用ActionContext和ServletActionContext类来获取表单提交的数据
struts2封装表单数据的方式,就是将表单数据封装到实体类对象中..可以使用表达式封装(主要是通过生成get,set方法来完成页面和action的双向交互),模型驱动封装(通过实现ModelDriven接口类)
在Action类里面可以把数据存到值栈里面,在页面中获取到值栈的数据;在页面中可以通过struts2标签和ognl表达式来获取值栈中的数据
struts2中的默认包struts-default有什么作用?
struts-default包是由struts内置的,它定义了struts2内部的众多拦截器和Result类型,而Struts2很多核心的功能都是通过这些内置的拦截器实现,如:从请求中
把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。当包继承了struts-default包才能使用struts2为我们提供的这些功能。
6、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
7、返回HTTP响应到客户端浏览器。
StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。struts2读取到struts.xml的内容后,是将内容封装进javabean对象然后存放在内存中,以后用户的每次请求处理将使用内存中的数据,而不是每次请求都读取struts.xml文件。
2、作用:
负责拦截由
不带后缀或者后缀以.action结尾,这时请求将被转入struts2框架处理,否则struts2框架将略过该请求的处理。
可以通过常量"struts.action.extension"修改action的后缀,如:
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
拦截器在action对象创建之后,action的方法执行之前执行在action没有直接调用拦截器的方法,使用配置文件方式进行操作
aop思想
Aop是面向切面(方面)编程,有基本功能,扩展功能,不通过修改源代码方式扩展功能
责任链模式
要执行多个操作,有添加、修改、删除三个操作。
首先执行添加操作,添加操作执行之后 做类似于放行操作,执行修改操作,修改操作执行之后做类似于放行操作,执行删除操作
在struts2里面有很多的拦截器,这些拦截器是struts2封装的功能,但是在实际开发中,struts2里面的拦截器中没有自己要用的,这个时候需要自己写拦截器实现功能
第一步 创建类,继承MethodFilterInterceptor类
第二步 重写MethodFilterInterceptor类里面的方法写拦截器逻辑
第三步 配置action和拦截器关系(注册拦截器)
(1)在要拦截的action标签所在的package标签里面声明拦截器
(2)在具体的action标签里面使用声明的拦截器
(3)struts2里面执行很多的默认拦截器,但是如果在action里面配置自定义拦截器,
问题:默认的拦截器不会执行了
解决:把默认拦截器手动使用一次
struts2中的Action是多实例的,在每次被访问的时候都会创建Action对象。而被static修饰的变量可以在多个对象中共享资源。所以被static修饰的类变量在Action中不是线程安全的