Struts2的优点:1) Struts2设计是无侵入式的,Struts2的应用可以不依赖于Struts2的Servlet API的。
2) Struts2 提供了拦截器,利用拦截器可以进行AOP编程。
实现如权限拦截等功能。
3) Struts2 提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。
4) Struts2 提供支持多种表现层技术。
如JSP。
freeMarker..Velocity等。
5) Struts2 的输入校验可以对指定方法进行校验,解决了Struts1的长久之痛。
6) 提供了全局范围,包范围。
和Action范围的国际化资源文件管理实现。
在Struts中,管理action的是用package管理的。
<bag name=""></bag>Strust2里面配置web.xml文件不再需要Servlet,通过了一个过滤器取代楽。
框架文件的规律,所有的框架开发包中,实际上都有许多的参考实现代码,只要耐心的参考里面的代码就能够正确的使用程序。
所有的请求(*.action)----》DispatcherFilter上,之后根据struts.xml文件中的配置选择对应的action进行处理,通过execute()方法的返回值,来决定最终跳转页面,之后进行显示。
Struts2的框架是通过Filter启动的。
JDK 是包含调试的JRE是不包含调试的.JDK 1.5 和1.6的区别是:1.5中实现了一个接口是不能重写接口中的方法的。
1.6中实现了一个接口后是可以重写接口中的方法的。
设计模式最大的特点就是把简单的东西复杂化,带来的好处是,最大达好处是可扩展性。
\ Struts2核心的是:把请求和最后的结果(试图)分开。
Namespacenamespace决定了action的访问路径,默认为" ",可以接收所有的路径action namespace可以写为/, 或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action , /xxx/index.action, 或者/xxx/yyy/index.action<package name="example" namespace="/" extends="struts-default"><action name="show_Pages"><result name="success">/hello.jsp</result></action></package>在<result name="success"></result>中,凡是名字(name)为success的,都可以不写,默认为success如果一个package里面的namespace属性没有写或者如:namespace="" 表示这个package里面的result 属性囊括了所有的名package处理不了的名为index的action。
<result name="index"></result>在这个Action里面没有配置Class ,而它默认的Class是ActionSupport里面的Action,execute();一个包可以定义为abstract="true" 抽象包,抽象包不能包含action;Action(一)具体视图的返回可以由用户自己定义的Action来决定。
(二)具体的手段是根据返回的的字符串找到对应的配置项,来决定视图的内容。
(三)具体的Action的实现可以是一个普通的JAVA类,里面有publicString execute()方法既可,(四)或者实现Action接口。
(五)不过常量的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法。
Struts1在访问这个action的时候访问的是同一个ActionClass类的对象,如果访问的客户了,容易造成线程同步的情况。
而Struts2则是每次访问的时候,才创建一个ActionClass对象,不会造成线程同步的情况。
ActionSupport实现了Action的接口。
而Action接口里面只有execute()方法,和一系列的常量。
而我们也可以直接实现Action接口。
可以在Struts2的配置文件中<action name="User" class="er" method="Function">可以在method="方法名" 在这里指定这个action调用Class 中的那个方法。
根路径:如果请求的URL地址为http://localhost:8080/user/ 访问的是根目录,如果在Struts 文件中找不到相应的/ 则会重新返回到TOMCAT中,执行web.xml中的<welcome-file-list><welcome-file>hello.jsp</welcome-file></welcome-file-list>访问hello.jsp文件。
namespace 如果不指定默认为"" 也就是/Action实现类的所有属性都会放在它向对应的值栈里面。
通配符:约定优于配置如果有多个都匹配,默认是先调用最精确的哪一个。
但是*是同一等级的(跟*的个数无关)。
那个action在前头就先调用哪一个。
Result 属性:type 的值Chain(action) dispatcher(视图) 内部跳转(转发或服务器端跳转)-->数据不会丢失redirectAction(action) redirect (视图)外部跳转重定向或客户端跳转)-->丢失请求参数数据、请求属性和前一个Action的处理结果重定向:以前存放的变量全部失效,并进入一个新的作用域。
不能共享数据。
转发:转发的源文件和目标组建共享request范围内的共享数据访问Action的时候不需要在目标地址加/局部结果:将<result>作为<action>元素的子元素配置全局结果:将<result>作为<global-result>元素的子元素配置。
域模型DO,VO,DTO一般情况下,如果要获得用户输入的值,直接在action类里面定义和控件名相同的属性就可以了。
或者建一个private User user; 类就行了,这个类属性必须有getter()和setter()方法。
不需要实例化,struts2底层会帮我们实现。
如果需要在一个action类中要实例化一个实体对象,必须要让这个action的类实现(implements)一个modelDriver<Model类名>读源码:先从JSP页面开始,慢慢的往里走。
查询struts2 里面的源文件。
D:\HUdaWei\Jar包\struts-2.0.11-all\struts-2.0.11\docs\docs\strutsxml-examples.html 很多源代码都在里面Struts2 的常量在:—》org.apache.struts2---->default.properties文件里面。
使用(ActionSupport类的)addFieldError方法和s:fieldError标签简单处理数据校验。
Struts2的验证标签内容在Com.opensymphny.xwork2.validator.validators ---->default.xml去掉系统默认的文本样式在使用OGNL标签时使用<constant name="struts.ui.theme" value="simple">接收参数有三种,保存到session,Request,Application z中有两种。
一二控制反转:何谓控制反转(IoC = Inversion of Control),何谓依赖注入(DI =Dependency Injection);IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。
这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
三四验证显示单个的错误的时候用。
<s:fielderror><s:param>name</s:param></s:fielderror>ActionContext和ServletActionContext区别· ActionContextxwork框架的ActionContext是Action执行时的上下文,存放Action执行时需要用到的对象。
在使用webwork时,其中放有Parameter、Session、ServletContext、Locale等信息。
这样,webwork负责将Servlet相关数据转换为与ServletAPI无关的Map对象(即ActionContext),使得xwork的Action实现与web层、逻辑层与表现层的解耦。
ServletActionContext提供直接与Servlet容器交互的途径。
通过它,可以取得HttpServletRequest、HttpServletResponse 、ServletConfig、ServletContext、PageContext 对象。
但是,使用ServletActionContext意味着Action与ServletAPI的紧密耦合。
SpringAOP是什么?AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。
AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
对横切点关注点的具体实现称为Advice。
Advice分为:before Advice,after Advice , Throw Advice。
spring是面向方面编程(AOP)和控制反转(IOC)容器。
IOC 是什么?IoC就是Inversion of Control,控制反转。