前言:此总结是观看佟刚老师的Struts2 视频总结的,之前看过另一老师将的视频,有点模糊,然后网上查了一下,很多人说这个视频同好的,然后自己去看,的确很好 视频链接
关于获得 Web 资源
以下是应该注意的地方 :
1. 所谓 WEB 资源是指,request,session,application,paraeters( 可以获得请求参数 )
2. ActionContext 是 Action 的上下文,可以获的 Action 的一切所需要的信息
3.获取web资源有以下两种 :
1. 由 ActionContext 获得
2. 实现 XxxAware 接口
一. 获得与 Servlet 无关的Web 资源
I. 由 ActionContext 获得
public class TestActionContext {
/**
1. ActionContext 是 Action的上下文,可以得到一切Action需要的信息
2. 这个类TestActionContext 不用继承,或者是实现其他类
3. 需要注意的是,这里的得到requestMap,sessionMap,applicationMap 和并不是HttpServletRequest,HttpSession... 但是 这些map封装的是request,session,application..域对象里面的键和值(.attribute(key,value) )
4. 注意 parametersMap 这个比较特殊,因为Servlet 里面并没有这个相对应的对象,这个map表示请求参数的键值对 uri?age=100, key=age,valeu=100
5.
*/
public String execute(){
// ActionContext 是 Action的上下文,可以得到一切Action需要的信息
ActionContext actionContext = ActionContext.getContext(); // 得到
// 获得application 对应的 map
Map<String,Object> applicationMap = actionContext.getApplication();
applicationMap.put("applicationKey", "applicationValue");
// 得到session 对应的 map
Map<String,Object> sessionMap = actionContext.getSession();
sessionMap.put("sessionKey", "sessionValue");
// 获得 request对象的方法比较特殊,需要由 Action 的上下文调用方法获得,注意此时所有的 request,session ,application 都不是 Servlet里面的
Map<String,Object> requestMap = (Map<String, Object>) actionContext.get("request");
requestMap.put("requestKey", "requestValue");
/**
* actionContext.getParameters() 放回的是 Map<String,Object> 但实际上,Object 就是 String[]数组
* 1. parameters 对象写入的数据,读不出,所以仅用于读键的值
* 2. 注意其输出的时需要强转为 String[],然后按下标进行读取,
* 3. 值为 Strig[] 数组的原因是,一个 key 可以对应多个值
*/
Map<String ,Object> parameters = actionContext.getParameters(); // 得到请求参数的 map
/**
* 当访问 : http://localhost:8089/Struts02/testActionContext.action?age=100
* request - > null
* parameters -> 100
* // 这里表名 parameters 表示对参数的读取操作
*/
System.out.println("request : "+requestMap.get("name")); // 验证其输出的值,是否与 parameters 输出的相同 !! 验证表名不一致
System.out.println("parameters : "+((String[])parameters.get("age"))[0] ); // 通过请求参数读出键
return "success";
}
}
II. 继承相对于的 XxxAware 接口
public class TestApplicationAware02 implements ApplicationAware,SessionAware,RequestAware,ParameterAware{// 可以同时 implements SessionAware,RequestAware,当一个类
/**
* 1. 会自动赋值,由框架内部调用函数进行操作
* 2. 所以可以在 execute 里面直接进行上面的操作
*/
private Map<String,Object> applicationMap;
private Map<String,Object> sessionMap;
private Map<String,Object> requestMap;
private Map<String, String[]> parameters;
public String execute(){
return "success";
}
public void setApplication(Map<String, Object> arg0) {
// TODO Auto-generated method stub
applicationMap = arg0;
}
public void setSession(Map<String, Object> arg0) {
// TODO Auto-generated method stub
sessionMap = arg0;
}
public void setRequest(Map<String, Object> arg0) {
requestMap = arg0;
}
public void setParameters(Map<String, String[]> arg0) {
parameters = arg0;
}
}
二. 获得与 Servlet 相关的Web 资源
I. 利用 ServletActionContext 上下文获得
public class TesstHttpServlet {
public String execute(){
/**
* 1. 由 ServletActionContext 可以得到与 Servlet相关的所有对象
* 2, 可以得到 Servlet 的上下文
*/
ServletContext servletContext = ServletActionContext.getServletContext();
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = ServletActionContext.getRequest().getSession();
HttpServletResponse response = ServletActionContext.getResponse();
System.out.println(request);
System.out.println(session);
System.out.println(response);
return "success";
}
}
II. 实现 XxxAware 接口
public class TestServlet02 implements ServletContextAware,ServletRequestAware,ServletResponseAware {
/*
* 通过实现 ServletXxxAware 为 Struts2 为其注入需要的 Servlet 相关的对象
* ServletContextAware 注入 ServletContext
* ServletRequestAware 注入 ServleHttpServletRequest
* ServletResponseAware 注入 ServletHttpServletResponse
*/
private ServletContext servletContext;
private HttpServletRequest req;
private HttpServletResponse resp;
public String execute(){
/**
* 实现了 类的 aware 接口都能自动为其赋值
*/
System.out.println(req);
System.out.println(resp);
System.out.println(servletContext);
return "success";
}
public void setServletContext(ServletContext servletContext) {
// TODO Auto-generated method stub
this.servletContext = servletContext;
}
public void setServletRequest(HttpServletRequest req) {
// TODO Auto-generated method stub
this.req = req;
}
public void setServletResponse(HttpServletResponse resp) {
// TODO Auto-generated method stub
this.resp = resp;
}
}