How can I read context parameter/web.xml values in a non-servlet java file?

后端 未结 5 1168
长发绾君心
长发绾君心 2020-12-28 17:46

I\'ve got a regular java file that I use to update and query a mysql database but I need to take configurable options in that file (like host name, password, etc) and put it

相关标签:
5条回答
  • 2020-12-28 18:14

    Implement a ServletContextListener:

    package util;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    public class MyConfigListener implements ServletContextListener {
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            ServletContext ctx = sce.getServletContext();
    
            String hostname = ctx.getInitParameter("my.config.hostname");
    
            // now go and do something with that
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent sce) {}
    
    }
    

    And don't forget to register it in web.xml:

    <context-param>
      <param-value>somewhere.example.org</param-value>
      <param-name>my.config.hostname</param-name>
    </context-param>
    <listener>
      <listener-class>util.MyConfigListener</listener-class>
    </listener>
    
    0 讨论(0)
  • 2020-12-28 18:18

    One way is to read xml file and parse it.

    You can put it on some static map in after parsing in ServletContextListener

    0 讨论(0)
  • 2020-12-28 18:26

    You need to put the required parameters in env-entry entries of your web.xml file:

    <env-entry> 
        <env-entry-name>dbhost</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>localhost</env-entry-value> 
    </env-entry>
    

    and then access them via the jndi context

    import javax.naming.Context;
    import javax.naming.InitialContext;
    ...
    // Get the base naming context
    Context env = (Context)new InitialContext().lookup("java:comp/env");
    
    // Get a single value
    String dbhost = (String)env.lookup("dbhost");
    
    0 讨论(0)
  • 2020-12-28 18:31

    You could use context-parameters in your web.xml and a javax.servlet.ServletContextListener to populate some static fields.

    In you normal java class you read this this static fields.

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    ...
    <context-param>
        <description>Prameter</description>
        <param-name>myParam</param-name>
        <param-value>123456790</param-value>
    </context-param>
    ...
    </web-app>
    

    You can access this context parameter with ServletContext.getInitParameter

    0 讨论(0)
  • 2020-12-28 18:41

    Create a static class that would be initialized from one of the servlets init.

    0 讨论(0)
提交回复
热议问题