18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

struts2第二天

1. Struts2结果处理方式(转发,重定向等)

经常遇到的是Struts2核心配置struts-default下的package包被继承的。这些具体怎么用?搜相关class导入源码。查看doc文档有案例。

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

1)dispatcher--doExecute()方法

源码里封装了HttpServletRequestServletActionContext.getRequest())然后放行forward()。和以前学的类似。提高了代码的复用。

2)redirect-doExecute()方法

封装了HttpServletresponse.sendRedirect();方法

3)Chain-转发到Action(不常用)

转发到Action使用chain(链),

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

4)redirectAction-重定向到Action(不常用)

拼装了路径并调用了父类的重定向方法、 

18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

如何查看/**文档?

会翻译文档

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

2. 访问servletAPI方式  1  ActionContext

原理:它并不影响原本的域啥的。。。

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

ActionContext的生命周期和request相同,所以它不推荐数据存在request域中,直接存在ActionContext中即可。

1ActionContext.getContext()拿到大map.put(,)即可,至于转发后如何取得数据,和request域取数据相同!

原理:struts2框架更改了request域取数据的方法,当取数据时,既从request域中取也从ActionContext的 map中取。

2)精确从各个域取得数据

${requestScope.xxx}|${sessionScope.xxx}|${applicationScope.xxx}

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

3)以后往三个域放数据

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

访问servletAPI方式  2  ServletActionContext(不推荐)

1)其中获得原生request和原生response,servletContext的都是在底层调用ActionContextgetContext().get(“”)的方法。

2)获得原生session是通过获得的request对象拿到:request.getSession();

访问servletAPI方式  3  实现接口方式以...Aware结尾(不推荐)

每一种对象都有一个接口对应。如:servletRequestAware

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

3. 如何获得参数!!

1)获得表单提交的参数  Post  Action的生命周期+线程安全

写一个成员变量(与参数键名相同)加此成员变量的属性。Get/set方法。然后使用这个即可。

Servlet对象在整个服务器当中只有一个!!!所以servlet不允许这样写一个成员变量由request拿到参数赋值给这个变量。因为它是线程不安全的,当其它线程同时访问时,会有错误出现!

然而s2Action对象是每次请求时都会创建一个Action对象。所以其成员变量不会受到干扰。(线程安全)

2)拓展

Struts2 MVC 设计思想:

M:Filter   c:Action    v:result

3)不止hibernate框架的成员变量使用包装类,建议Struts2也使用包装类修饰变量。例:private Integer age

4)提交上来的参数一律为String类型,Struts2框架可以自动转换8种数据类型和对应的包装类。

5)支持特定类型的字符串转换为Date

1998-01-05 接收:private Date date+get/set方法

4. 以上(属性驱动获得)获得参数方式不常用:

1)对象驱动获得参数:

和属性驱动类似,也是在成员变量位置声明一个成员变量,只不过这个成员变量不是基本数据类型,而是一个对象,给出get/set方法,准备这个domain类,在提交数据的页面这样写:

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

5. 模型驱动获得提交的参数(暂时只记怎么做)

1)后台操作:

实现接口modelCriven<>泛型给定封装的对象,实现方法返回对象,该对象必须在成员变量位置new出。否则返回为null

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

6. 集合类型参数封装

1)List

后台:成员变量位置:private List<String> list;+get/set方法

前台:18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

2)Map前台必须给键名

Private map<String ,String> map+get/set方法;

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

7.struts2hibernate有重复的包,需要删除一个

 18.01.11,web学习第四十天,还有一年,努力吧青年 struts2第二天 action创建+result处理+获取数据方式

8.一般重定向 return toxxx”;

9.注意:当主键为native时,注意主键不能为字符串

10. 复习

1

App包下有一个blank-war包,解压。得到需要jar

书写Action

书写src/struts.xml文件

配置filter过滤器:StrutsprepareAndExceptionFilter

2)struts2的核心配置

<Struts>

  <Package name=”” namespace=”” extends=””>

<action name=”” class=”” method=””>

  <result name=”” type=””></result>

</action>

  </package>

</Struts>

3)常量配置

   解决乱码

   后缀名配置

   开发模式

   动态方法调用

4)动态方法调用符合搜索优化

xxxAction_*+{1}

5)action的创建方式

POJO类(略),实现接口Action(略),继承类ActionSupport

Action方法注意:

无参,public,返回值String,可抛异常Throw