项目使用Struts2.1.8。配置Proxool数据源,在利用proxool官方的AdminServlet查看数据库连接状态的时候,始终报错:找不到相应的Action name。
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
struts2 的拦截器过滤了所有的请求,我们为proxool配置的servlet,无法访问到。网络上找了些资料,主要有两种方法:
1,在struts2 core包org.apache.struts2下的default.properties:修改这个键值对 struts.action.extension=action,,
2,在web.xml里添加一个拦截器,过滤我们的Servlet。web.xml文件内容:
- <!-- 自定义过滤器,过滤servlet请求。解决struts和servlet冲突问题 -->
- <filter>
- <filter-name>ServletFilter</filter-name>
- <filter-class>org.bts.base.filter.ServletFilters</filter-class>
- <init-param>
- <param-name>includeServlets</param-name>
- <param-value>proxool_admin</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>ServletFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!-- 定义Struts2的FilterDispathcer的Filter -->
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- </filter>
- <!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求 -->
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!-- 用于初始化Spring容器的Listener -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>WEB-INF/classes/applicationContext.xml</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!-- 配置proxool管理工具 -->
- <servlet>
- <servlet-name>proxool_admin</servlet-name>
- <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet </servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>proxool_admin</servlet-name>
- <url-pattern>/proxool_admin</url-pattern>
- </servlet-mapping>
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>proxool</web-resource-name>
- <url-pattern>/proxool_admin</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <role-name>manager</role-name>
- </auth-constraint>
- </security-constraint>
- <login-config>
- <auth-method>BASIC</auth-method>
- <realm-name> proxool manager Application</realm-name>
- </login-config>
- <security-role>
- <description>
- The role that is required to log in to the Manager Application
- </description>
- <role-name>manager</role-name>
- </security-role>
- <error-page>
- <error-code>401</error-code>
- <location>/jsp/error/401.jsp</location>
- </error-page>
过滤器的实现(来源于网络):
- package org.bts.base.filter;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.RequestDispatcher;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- public class ServletFilters implements Filter {
- private List<String> initParameters = new ArrayList<String>();
- @Override
- public void destroy() {
- System.out.println("ServletFilters destroied!");
- }
- @Override
- public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest) req;
- String target = request.getRequestURI();
- System.out.println("1: "+target);
- target = target.lastIndexOf("?") > 0 ? target.substring(target
- .lastIndexOf("/") + 1, target.lastIndexOf("?")
- - target.lastIndexOf("/")) : target.substring(target
- .lastIndexOf("/") + 1);
- System.out.println("2:"+target);
- if (this.initParameters.contains(target)) {
- RequestDispatcher rdsp = request.getRequestDispatcher(target);
- rdsp.forward(req, resp);//转发我们的请求,跳出FilterChain
- } else
- chain.doFilter(req, resp);
- }
- @Override
- public void init(FilterConfig config) throws ServletException {
- String parameters = config.getInitParameter("includeServlets");
- System.out.println("************"+config.getFilterName()+" initing with value "+parameters+"********************");
- this.initParameters.addAll(Arrays.asList(parameters.split(",")));
- }
- }
过滤器用多了,所有的请求都得经过他们。不知道会不会使系统的反应变得相对迟缓!