JAVA:无法获取过滤器中的上下文参数

标签 java filter web.xml

我在 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_URLFilterConfig 中的参数,而不是 ServletContext 中的参数。从传递给 init() 方法的 FilterConfig 实例访问它。

关于JAVA:无法获取过滤器中的上下文参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3009199/

相关文章:

java - 如何将我的 foo.war 的根路径设置为/foo/bar 而不是/foo?

java - 带有 URL 模式的 servlet 映射不起作用,必须使用 URL-servlet/servletclassname 才能使用 servlet

java - 如何使用AsyncTask从JSON获取数据并将其放入RecyclerView中?

java - MongoTemplate 更新在数组中为同一文档设置多个对象

javascript - 根据用户输入字符串和菜单下拉项过滤数组

angularjs - 如何动态禁用 ng-repeat 内的过滤器

java - 从 web.xml 调用 spring Controller (异常类型)

java - 如何在java中比较两个通用列表的元素?

java - 关于内存不足异常

c++ - Qt:如何向操作系统/窗口系统发送事件?