* 入口函数的返回值
* @return 上下文对象
*/
@SuppressWarnings("unchecked")
public static Context createContext(HttpServletRequest req, Object obj) {
Context context = Lang.context();
// 复制全局的上下文对象
Object globalContext = req.getSession()
.getServletContext()
.getAttribute(Loading.CONTEXT_NAME);
if (globalContext != null) {
context.putAll((Context) globalContext);
}
// 请求对象的属性列表
Map<String,Object> a = new HashMap<String, Object>();
for (Enumeration<String> en = req.getAttributeNames(); en.hasMoreElements();) {
String tem = en.nextElement();
a.put(tem, req.getAttribute(tem));
}
context.set("a", a);//TODO 是否应该用a呢? attr是不是更加好呢?
// 请求的参数表,需要兼容之前的p.参数, Fix issue 418
Map<String,String> p = new HashMap<String, String>();
for (Object o : req.getParameterMap().keySet()) {
String key = (String) o;
String value = req.getParameter(key);
p.put(key, value);
context.set(key, value);//以支持直接获取请求参数
}
context.set("p", p);
//
Map<String, String> u = new HashMap<String, String>();
AtMap at = Mvcs.getAtMap(req.getSession().getServletContext());
if (at != null) {
for(Object o : at.keys()){
String key = (String) o;
u.put(key, at.get(key));
}
context.set("u", u);
}
// 加入返回对象
if (null != obj)
context.set(ViewProcessor.DEFAULT_ATTRIBUTE, obj);
return context;
}