再学struts2

来源:互联网 发布:淘宝p图用什么软件好 编辑:程序博客网 时间:2024/06/06 03:08

1、Action类中的getter和setter方法

系统根据action中的getter和setter方法来处理参数。而处理的参数当然要有声明,不管在jsp页面中还是在action中,这样在跟action同在一个请求中的文件将都能够这些参数的值。

2、一个action类可实现Action接口或继承ActionSupport基类

为了用户开发的Action类更规范,建议实现Action接口或继承ActionSupport基类。

3、Action没有与任何Servlet API耦合,但提供了几种访问ServletAPI的方式

       对于web应用的控制器而言,不访问servletAPI几乎是不可能的,例如跟踪HTTP Session状态等。

(1)利用ActionContext类来访问

      Struts2框架提供了一种更轻松的方式来访问ServletAPI。Web应用中经常要被访问的ServletAPI是HttpServletRequest、HttpSession和ServletContext,这三个类分别代表JSP内置对象中的request、session和application(见上篇文章“再学jsp与servlet”)。

      在struts2中,Action类可通过ActionContext类来访问ServletAPI,ActionContext可与jsp中的PageContext等比较一下,都是提供上下文的,底层就是一个Map

Map<String Object> context;。

我们需要在Action中取得request请求参数“username”的值:

 

ActionContext context = ActionContext.getContext();//上面这行是利用ActionContext类获得当前的actioncontextMap params = context.getParameters();String username = (String) params.get(“username”);

 

以下是利用ActionContext分别访问request、session、application范围的属性。

ActionContext ctx=ActionContext.getContext();//获得ActionContextctx.put("user","这是request范围的user");//request范围属性设置ctx.getSession.put("user","这是session范围的user");//session范围属性设置(String)ctx.getSeesion.get("user");//session范围属性设置ctx.getApplication.put("user","这是application范围的user");//application范围属性设置(String)ctx.getApplication.get("user");//application范围属性设置

 

(2)Action通过实现接口直接访问ServletAPI

虽然Struts2提供了ActionContext来访问ServletAPI,但这种访问不能直接获得ServletAPI实例。为了在Action中直接访问ServletAPI,Struts2提供了如下几个接口。

ServletContextAware:实现该接口的Action可以直接访问web应用的ServletContext实例。

ServletRequestAware:实现该接口的Action可以直接访问用户请求的HttpServletRequest实例。

ServletResponseAware:实现该接口的Action可以直接访问用户请求的HttpServletResponse实例。

(3)Action通过ServletActionContext工具类直接访问ServletAPI

为了能够直接访问servletAPI,Struts2还提供了一个工具类ServletActionContext。这个类包含了几个静态方法:

static PageContext getPageContext():取得web应用的PageContext对象

static HttpServletRequest getRequest():取得web应用的HttpServletRequest对象

static HttpServletResponse getResponse():取得web应用的HttpServletResponse对象

static ServletContext getServletContext():取得web应用的ServletContext对象

4、Action不能生成对服务器的响应,它只是业务控制器

虽然可以在Action类中获取HttpServletResponse,但如果希望通过HttpServletResponse来生成对服务器的响应是不可能的,因为Action只是业务控制器。

response.getWriter().println("hellon workd");


在servlet中会生成对客户端的响应,但在Action中无任何意义。

但response在Action中可以执行传递参数、写入cookie等操作。

5、Struts2的Action是多例的,即同一个Action类,不同的Session中都会产生独有一个Action的对象,防止竞争资源现象。

Servlet是单例的,即一个Servlet类在容器中只有一个实例;因为Jsp是Servlet的一种简易实现,所以Jsp也是单例的,其中声明的变量将在多个Session中通用,直至Servlet实例销毁。

原创粉丝点击