Java获取系统属性、环境变量和反射获取当前请求内容
获取环境变量:
System.getenv()
获取系统属性:
System.getProperties()
反射调用ServletRequest和HttpServletRequest的get方法获取请求数据:
ServletRequest sr= (ServletRequest)request; Method[] cm = request.getClass().getDeclaredMethods(); Method[] rm = sr.getClass().getDeclaredMethods();
Invoke的时候应该用当前的request而不是newInstance():
m.invoke(request, new Object[]{})
代码:
/**
* Server info
* @param request
* @return
*/
public Map<String,Object> getServerInfo(HttpServletRequest request){
Map<String,Object> map = new HashMap<String, Object>(),
sp = new HashMap<String, Object>(),
req = new HashMap<String, Object>();
map.put("env", System.getenv());
for(Object s:System.getProperties().keySet()){
sp.put((String) s, System.getProperty((String)s));
}
map.put("property", sp);
try {
ServletRequest sr= (ServletRequest)request;
Method[] cm = request.getClass().getDeclaredMethods();
Method[] rm = sr.getClass().getDeclaredMethods();
for(Method m:cm){
m.setAccessible(true);
if(m.getName().startsWith("get")&&!Pattern.compile("getInputStream|getReader").matcher(m.getName()).find()&&
m.getName().indexOf("")==-1&&m.getParameterTypes().length==0){
req.put(m.getName(),""+m.invoke(request, new Object[]{}));
}
}
for(Method m:rm){
m.setAccessible(true);
if(m.getName().startsWith("get")&&!Pattern.compile("getInputStream|getReader").matcher(m.getName()).find()&&
m.getParameterTypes().length==0){
req.put(m.getName(),""+m.invoke(request, new Object[]{}));
}
}
}catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return map;
}