Java代码
- public String execute(){
-
//得到 ActionContext对象
- ActionContext ac = ActionContext.getContext();
-
//取得HttpServletRequest中request对象中的请求参数Map
- Map paramMap = ac.getParameters();
- //注意:使用key从Map中取得的是Striing数组引用,即取得同样名字的请求参数集合
- String[] ids = (String[]) paramMap.get("id" );
- String[] names = (String[]) paramMap.get("name" );
- //取得存放Session属性的Map
-
Map sessionMap = ac.getSession();
- sessionMap.put("id" , ids[ 0 ]);
- sessionMap.put("name" , names[ 0 ]);
- return "toSession" ;
-
}
在struts1中访问HttpServletResponse,HttpServletRequest 等对象是通过execute方法的参数得到,这样Action类就依赖了Servlet API ,在struts2中Action类的execute方法参数是空的 并且可以不继承任何类 实现任何接口 那么Action如何访问Servlet呢?
在struts2中提供了两种方式:1、提供ActionContext类访问Servlet对象 2、通过IOC由从容器注入
下面来一一说明 做个总结
一、通过ActionContext类访问Servlet对象分为两种方式
1、ActionContext类位于com.opensymphony.xwork2中提供一系列相关方法用于访问保存在 ServletContext、HttpSession、HttpServletRequest中的信息,并且存储在Map中。在 ActionContext类中定义了一个静态方法public static ActionContext getContext()用于获取自己的一个实例,不能new此类的对象!
常用的方法:
public static ActionContext getContext() |
获得ActionContext 对象 |
public Map getParameters() |
从请求对象(HttpServletRequest)中获取请求参数 |
public Map getApplication() |
获取ServletContext中保存的Attribute |
public Map getSession() |
获取HttpSession中保存的Attribute |
下面演示如何得到request中的参数 并放在session中
注:通过getParameters()方法获取到的请求参数类型都是String[],必须根据实际情况取值。如果只有一个值的话,取出数组中第0个元素即可。
2、由于ActionContext是webwork定义的类,struts2定义了一个新类org.apache.struts2. ServletActionContext,该类继承自ActionContext ,ServletActionContext类和ActionContext相比扩展了更多的方法,主要是一些静态方法。读者可查看源代码
下面演示下如何使用ServletActionContext获得request的参数 并放在session中
public String execute(){
String id = ServletActionContext.getRequest().getParameter("id");
String name = ServletActionContext.getRequest().getParameter("name");
Map sessionMap = ServletActionContext.getContext().getSession();
sessionMap.put("id", id);
sessionMap.put("name", name);
System.out.println("id=" + sessionMap.get("id"));
System.out.println("name=" + sessionMap.get("name"));
return "toSession";
}
在使用ServletActionContext的时候返回的对象直接就是HttpServletResponse,HttpServletRequest 和前一种方式是有所区别的!
二、通过IOC访问Servlet对象
在Struts2中,可以通过IOC(依赖注入)将Servlet对象注入到Action中,这一切都是由一组接口决定的,这一组接口有一个共同点,名称都由Aware结尾。以下是这些接口的解释说明:
接口定义 |
作用 |
public interface ApplicationAware {
public void setApplication(Map application);
}
|
以Map类型向Action注入保存在ServletContext中的Attribute集合。 |
public interface SessionAware {
public void setSession(Map session);
}
|
以Map类型向Action注入保存在HttpSession中的Attribute集合。 |
public interface ServletResponseAware {
public void setServletResponse(HttpServletResponse response);
}
|
向Action中注入HttpServletResponse对象 |
public interface ServletRequestAware {
public void setServletRequest(HttpServletRequest request);
}
|
向Action中注入HttpServletRequest对象 |
public interface RequestAware {
public void setRequest(Map request);
}
|
以Map类型向Action注入保存在HttpServletRequest中的Attribute集合。 |
public interface CookiesAware {
void setCookiesMap(Map cookies);
}
|
以Map类型向Action注入Cookie中的数据集合。 |
public interface ParameterAware {
public void setParameters(Map parameters);
}
|
向Action中注入请求参数集合。 |
只要让Action实现这些接口就可以了,Struts2会自动将数据及对象注入Action
- public class ServletAction2 implements
-
CookiesAware,ParameterAware, RequestAware,
-
SessionAware, ServletRequestAware,
-
ServletResponseAware, ApplicationAware {
-
- private Map sessionMap;
- private HttpServletRequest request;
- private HttpServletResponse response;
- private Map applicationMap;
-
- private Map cookieMap;
-
- private Map requestMap;
-
- private Map parameterMap;
-
-
-
- public String execute(){
-
- String id = this .request.getParameter( "id" );
-
- String name = this .request.getParameter( "name" );
-
- sessionMap.put("id" , id);
-
- sessionMap.put("name" , name);
-
- return "toSession" ;
-
-
}
-
- }
分享到:
相关推荐
详细讲解了struts2的Action访问ServletAPI的几种方法.
详解Struts2中Action访问Servlet API的几种方法 在通常的web开发中Request和Response对象比较常见,但在Struts2框架中由于Action能与JSP页面进行数据交互,所以通常都不会用到这两个对象。如果想在Struts2程序中用到...
struts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 ...
2、使用struts2提供的ActionContext类直接获取Servlet API。 在同一个项目中,如果既用到servlet又用了struts框架,运行项目时可能无法正常使用servlet,解决办法如下: 该类是定义了一个过滤器,当既用到struts2...
Struts 2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。 当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以访问...
在MyEclipse环境下运用Struts2技术访问Servlet API,包括HttpServletRequest、HttpSession和ServletContext
NULL 博文链接:https://mvplee.iteye.com/blog/2240323
3、Struts1 与ServletAPI、strutsAPI 紧密耦合;Struts1 则不 4、Struts2 利用拦截器进行AOP 编程,实现如权限拦截功能 5、Struts2 提供了类型转换器 6、Struts2 提供多种表现层技术,如JSP/Freemarker/Velocity 等 ...
struts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 ...
2、Servlet把最底层的api暴漏给程序员,使程序员更能清楚的了解mvc的各个特点。 3、程序员可以对servlet进行封装。Struts2就是从servlet中封装以后得到的结果。 1.2Servlet的缺点 1、每写一个servlet在web.xml中都要...
Action的execute 默认方法不再与Servlet API耦合,更易测试 支持更多视图技术(JSP(转译java文件,编译成class文件,才可以运行)、(模板技术,html,把数据和模板html一起以流方式输出)FreeMarker、Velocity) 基于AOP...
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。struts-2.3.16.1.zip就是struts2.3的一个版本...
org.apache.struts2.dispatcher Classes for action dispatching in Struts (the Controller part of MVC). org.apache.struts2.dispatcher.mapper org.apache.struts2.dispatcher.multipart Classes to help ...
6.Action中访问servlet API 3 7.Action访问资源文件 3 8.资源文件_各国代码 4 9.将struts.xml分开 4 10全局结果result 4 11模型驱动 4 12.创建拦截器 5 13表单提交中文乱码问题 5 14.Jsp不能识别EL 5 15.自定义...
本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...