5月30日struts2

1.struts2流程分析:
1.导入jar包
2.web.xml中配置过滤器(StrutsPrepareAndExecuteFilter,又叫'前端控制器'或'核心控制器'),用于确定拦截哪些请求,使struts2生效
3.配置struts.xml 使框架知道调用哪个action,创建哪个对象,调用哪个方法;

总结:其实就是struts开始接手响应请求的工作,以前是请求不同的servlet, 相应的servlet来响应,
现在是struts2框架来通过在web.xml中配置来拦截某一类请求,根据请求业务不同,调用不同的action
来做响应操作;

这个时候还存在问题:
1.在action中怎么获取请求参数?
答:可以在action中设置成员属性,并为其提供get ,set 方法,就可以获得相同变量名的请求参数:

2.如何实现路径跳转?
答:1.我们可以action中的方法添加一个String返回值
2.我们在struts.xml配置文件中,在其对应的action标签内部配置<rusult>标签来确定跳转的路径;

2.struts2中需要重点掌握的配置文件:
1.default.properties
位置:struts-core.jar包下 org.apache.struts2包下
作用:主要是声明了struts2框架的常量

2.struts-default.xml
位置:struts2-core.jar
作用:声明了 interceptor  result  bean 

3.struts-plugin.xml
位置:struts2的插件包中
作用:主要用于插件的配置声明

4.struts.xml
位置:在我们自己的工程中,src目录下
作用:用于我们自己工程中使用struts2框架的配置

5.web.xml
位置:我们自己的工程中,WEB-INF目录下
作用:主要是加载struts2框架在web.xml文件中的相关配置



3.struts.xml 配置文件介绍
1.<package>标签配置
1.name属性 , 作用:定义一个包名,它必须唯一; 可以类比java中的包名
2.namespace 属性, 作用:主要是与<action>标签的name属性联合使用,来确定一个action的访问路径;
3.extends属性, 作用:指定继承自哪一个包;一般是 struts-default; 
struts-default包 是在struts-default.xml文件中声明的;
4.abstract 属性, 它代表当前包是一个抽象包,主要用于被继承;

2.<action>标签配置
1.name属性, 作用:主要是与所属<package>的namespace联合使用,确定action的访问路径;
2.class属性, 作用:用于指示当前的action类的 全类名(包名.类名);
3.method属性, 作用:用于指示当前的action类中的哪个方法被调用;

3.<result>标签配置 :主要用于指示结果视图
1.name属性 作用:与action类的method方法的返回值进行匹配,来确定跳转;
2.type属性 作用:用于指定跳转的方式: 比如:redirect(重定向),但默认是转发(dispatcher);
3.标签体: 指向要跳转的页面的路径;

4. 关于<action>中'class属性' 与 'method属性' 的默认值问题  
关于<result>中 'name属性' 与 'type属性' 的默认值问题  
<action name="test"> 
<result>/success.jsp</result>  //默认的name 属性值是"success" ,默认跳转方式是请求转发
</aciton>
当一个请求来时:如果找不到指定的类,会默认去找ActionSupport类(其中在这个类中的 execute 方法,默认返回值是 "success");
   如果找不到指定方法,会默认去找 execute 方法;

5.ValueStack 与 ognl 结合使用, ValueStack就相当于是 action 的域对象, ognl 就相当于是 EL表达式
ValueStace 与 ognl 结合 :        action 与 jsp 之间实现数据共享的解决方案
servlet域对象 与 EL表达式 结合:  servlet 与 jsp 之间实现数据共享的解决方案

在servlet 中 servletContext 是 servlet 的上下文对象,可以用它获得 servlet中的各种对象
在action  中 actionContext  是 action  的上下文对象,可以用它获得 action 中的各种对象

6.在action中获得servlet中对象的方法:
分析:    我们现在使用action,但是之前我们对servlet使用的比较熟,并且请求的大逻辑万变不离其宗,
  所以我们有获得servlet中对象,比如request,response等 的需要,这里我们有两中方式在action中获得servlet对象:
  
方法:   1.利用一个杂交对象:ServletActionContext 顾名思义,这是就相当于是在action中获得ServletContext的对象,
然后通过调用对象的方法获得,Servlet中的对象;
2.利用注入方式,获得servlet中的对象,我们通过实现一些aware接口,然后,通过实现方法,这样struts引擎在创建
action对象时,就会给我们的action传入我们实现的接口相应的servlet对象;


7.在action中获得ValueStack的方法:
分析:   因为ValueStack是存放在Request域中的,所以我们可以通过获得Request对象,然后再获得属性的方式 来获得;
        因为ValueStack属于Action 中的域对象,所以它的上下文对象 actionContext 应该有获得它的域对象的方法:

方法:  

ps:actionContext与servletContext还是有区别的,ActionContext是与线程绑定的,它和Request是:
一一对应: Request---actionContextaction
一一对应: Request ---action
一一对应: Request ---valueStack


8.






猜你喜欢

转载自blog.csdn.net/weixin_36898943/article/details/80754561