使用阿里巴巴数据源遇到的监控页面打不开的问题
听说阿里巴巴号称性能最强的连接池,于是用maven 往项目里增加了一个alibaba 引用包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.14</version>
</dependency>
配置好后打开网页 老是出404错误。于是又去查看使用文档https://github.com/alibaba/druid/
相关的配置都一个不漏设置好,但还是 访问 http://localhost:8080/druid/sql.html 出错404错误。难道是这个最新版本有问题,这也不大可能
于是我又看structs 相关的配置。发现了问题。对web.xml配置做了挑战。servlet 映射 和structs action映射范围进行了 修改
首先先alibaba数据源的druid是一个servlet ,这里servlet跟structs
的action 如果不进行限定范围 那么
当我们在页面在请求应用时,struts2将会截获所有请求,对于servlet请求将不能够正常响应的
(报错信息为:HTTP Status 404 - There is no Action mapped for namespace / and action name druid),
这是因为struts2把servlet当成action了,因为servlet和action都是没有后缀的.
这里有几种处理方式
在struts.xml中的<struts>的节点下面添加struts2处理的请求后缀 常量:
<!-- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理。
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
-->
<constant name="struts.action.extension" value="action" /> 这种方式比较优雅
第二种如下:
注释掉 urlrewritefilter ,因为/* 会拦截所有的请求,这样druid就映射不到了,所以需要注释或限定范围
对structs url请求映射也要进行修改,把/*的地方都要注释或限定范围
alibaba连接池访问的 druid是一个servlet,而我配置的structs 设置了为/* 全部监控,所有的请求
都会被认为是structs action请求
于是 我修改了配置,再访问 监控界面出来了。还不错的。。 阿里的技术果然很强