本文主要介绍Druid监控页面的生成流程及代码手法
监控效果图
以下是Druid自带的监控页面图,主要用于展示在DruidDataSource数据源当中存储的监控信息,这部分监控信息存储在内存中,通过json格式的数据展示到页面上。
Druid监控页面
页面分析
问题1: 页面是如何展示出来的?
步骤一: 先找到资源文件
查看源码jar包可以知道,页面被存放在support文件目录下的http.resources和monitor文件夹中
源码资源目录
我们知道展示html页面最原生的方式就是PrintWriter.print(String)相应的html文本内容到浏览器上,但习惯了使用SpringMVC框架后可能会思维定式的想怎么配置jsp路径,由框架来完成资源展示
步骤二: 找到相关类
通过追溯监控页面的开启的使用方法可以知道,由StatViewServlet WebStatFilter两个类实现了页面展示的特性。
步骤三: 分析类代码逻辑
StatViewServlet与SpringMVC的DispatcherServlet类似,直接继承了HttpServlet进行了方法重写
1. init方法重写
public void init() throws ServletException {
// 初始化权限属性
initAuthEnv();
}
从servletConfig中获取username
String paramUserName = getInitParameter(PARAM_NAME_USERNAME);
if (!StringUtils.isEmpty(paramUserName)) {
this.username = paramUserName;
}
从servletConfig中获取password
String paramPassword = getInitParameter(PARAM_NAME_PASSWORD);
if (!StringUtils.isEmpty(paramPassword)) {
this.password = paramPassword;
}
从servletConfig中获取远程ip地址
String paramRemoteAddressHeader = getInitParameter(PARAM_REMOTE_ADDR);
if (!StringUtils.isEmpty(paramRemoteAddressHeader)) {
this.remoteAddressHeader = paramRemoteAddressHeader;
}
从servletConfig获取ip白名单,以,隔开的IP地址
try {
String param = getInitParameter(PARAM_NAME_ALLOW);
if (param != null && param.trim().length() != 0) {
param = param.trim();
String[] items = param.spli