我在 web.xml 中有一个过滤器和参数
web.xml是这样的:
<filter>
<description>
</description>
<display-name>AllClassFilter</display-name>
<filter-name>AllClassFilter</filter-name>
<filter-class>com.datval.homework.AllClassFilter</filter-class>
<init-param>
<param-name>DB_URL</param-name>
<param-value>jdbc:derby:C:/Users/admin/workspace/homework03/homework/databases/StudentsDB;create=true</param-value>
</init-param>
<init-param>
<param-name>DB_DIALECT</param-name>
<param-value>org.hibernate.dialect.DerbyDialect</param-value>
</init-param>
<init-param>
<param-name>DB_DRIVER</param-name>
<param-value>org.apache.derby.jdbc.EmbeddedDriver</param-value>
</init-param>
</filter>
映射运行良好。 但我无法在过滤器中获取此参数。
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
debugMessage = config.getInitParameter("debugMessage");
ctx = config.getServletContext();
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
ctx.log("Start - " + debugMessage);
String myDbUrl = ctx.getInitParameter("DB_URL");
String DB_DIALECT = ctx.getInitParameter("DB_DIALECT");
String DB_DRIVER = ctx.getInitParameter("DB_DRIVER");
Map<String,String> pr = new HashMap<String,String>();
pr.put("hibernate.connection.url", myDbUrl);
pr.put("hibernate.dialect", DB_DIALECT);
pr.put("hibernate.connection.driver_class", DB_DRIVER);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("students",pr);
EntityManager em = emf.createEntityManager();
request.setAttribute("em", em);
chain.doFilter(request, response);
em.close();
ctx.log("end - " + debugMessage);
}
我已经检查过,myDbUrl 为空。我做错了什么?任何想法? 抱歉代码,我稍后会更改:)
最佳答案
DB_URL
是 FilterConfig
中的参数,而不是 ServletContext
中的参数。从传递给 init()
方法的 FilterConfig
实例访问它。
关于JAVA:无法获取过滤器中的上下文参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3009199/