Struts2的结果类型、ServletAPI获取、参数接收

来源:互联网 发布:邮政网络培训学院官网 编辑:程序博客网 时间:2024/06/05 06:34

结果类型:Struts2共11中结果类型

转发:/hello.jsp

重定向:/hello.jsp

转发到Action(不常用;此种格式为标准格式;当下一目标资源不在同一namespace下):

Demo1Action

/

重定向到Action:

                               

HelloAction_hello

/

全局结果配置:

            /error.jsp

        

 

 

Struts2中的SevletAPI获取:

原理:依赖ActionContext对象(Struts2的数据中心),其本质是map。

存放有:原生request、原生response、原生servletContext、request域(从request中抽取出来、本 质上是map)、session域、application域、attrs、params、ValueStack(值栈)……很多

ActionContext生命周期:

每次请求都会创建一个ActionContext对象

ActionContext对象创建后放在了哪里?

ThreadLocal

请求到来时,ActionContext对象创建并被放置到ThreadLocal中与线程绑定。可以确保本次请 求范围内,获取ActionContext对象时,从ThreadLocal中拿到。☆替代request域

三种方式获取ServletAPI:

获取解耦API:通过ActionContext对象   (常用)

//获取 ActionContext 

 ActionContext context = ActionContext.getContext(); 

//获取解耦application域 

 Map application = context.getApplication();

application.put("name", "applicationName");

 // 获取 解耦session域 

 Map session = context.getSession();

 session.put("name", "sessionName"); 

 //struts2官方不推荐使用request域。推荐使用ActionContext本身作为request域取代原本的 request域,用法依旧沿袭request的用法,只不过实际上是从ActionContex中存取 

 context.put("name", "requestName");

获取原生ServletAPI:通过ServletActionContext   (常用)

//获取原生request

HttpServletRequest request = ServletActionContext.getRequest();

request.setAttribute("name", "requestName");

//获取原生response

HttpServletResponse response = ServletActionContext.getResponse();

//获取原生session

HttpSession session = request.getSession();

session.setAttribute("name", "sessionName");

//获取原生ServletContext

ServletContext sc = ServletActionContext.getServletContext();

sc.setAttribute("name", "applicationName");

实现接口方式获取API:需要什么就实现什么的接口。 (不常用)

步骤:

1. 实现相应接口,比如ServletRequestAware | ServletContextAware

2. 在自己的action类中定义私有属性

3. 在重写的接口的方法内部使用属性接收方法参数传入的API对象

4. 在可执行的方法内部使用属性即可。

 

 

参数接收:

简单参数接收:

属性驱动:在Action中准备与表单提交相同的属性,struts2会自动将提交的参数的值封装到属性中 (常用)

注:struts2接收参数时可以自动进行类型转换。支持8大基本数据类型+Date类型(根据浏览器标识出 中文访问者,时间格式为yyyy-MM-dd)

问题:Action对象的生命周期?答:每次请求都会创建与当前请求对应的Action对象

对象驱动:将表单提交参数封装到对象当中。(不常用)

步骤:

1. 在表单中设置input标签属性name="user.name"/name="user.age"

2. 创建user实体类

3. 在自己的Action类中定义属性user,注意:定义get/set方法

4. 在可执行的方法中即可直接使用user属性了

模型驱动:同样将表单数据封装到对象中。(常用;且类似于对象驱动)

步骤:

1. 表单input属性正常设置,即对应实体类的属性

2. 自定义Action类定义私有属性user,并赋值。即private User user = new User();

3. 自定义Action类实现ModelDriven接口,重写方法 ,将属性user返回

4. 在可执行的方法中即可直接使用user属性了

复杂类型参数接收:数组、List集合、Map集合

步骤:

1. 在自定义Action类中,定义属性,比如String[]、List、Map

2. 在表单input中:

 arr:
 

 arr:
 

 arr:
 

 list:
 

 list:

 list:

 map:
 

 map:

3. 在可执行方法中即可使用接收参数的属性了。

 

 

 

待续……

0 0
原创粉丝点击