将参数从.txt文件传递到web.xml

时间:2017-01-25 06:31:55

标签: java web.xml session-timeout

如何从Session.txt读取值并将该值传递给web.xml? 我试图通过将Session.txt文件放在项目文件夹之外并将值读取到web.xml来为Java Web应用程序设置会话超时。

<session-config>
        <session-timeout>Value read from Session.txt</session-timeout>
</session-config>

Session.txt
60

2 个答案:

答案 0 :(得分:1)

想象一下这是你的web.xml文件

 <session-config>
        <session-timeout>Value read from Session.txt</session-timeout>
</session-config>

此java代码替换标记值 如果需要,可以使用更高效的正则表达式或XML解析器

 String str = "<session-config>this it to be replaced</session-config>";
    System.out.println(str.replaceAll("(?<=<session-config>)(.*?)(?=</session-config>)", "replacement of value read from text file"));

此代码可以帮助您阅读文本文件

String content = new Scanner(new File("filename")).useDelimiter("\\Z").next();
System.out.println(content);//replaceable content 

答案 1 :(得分:1)

我认为您无法修改web.xml文件,以便在部署应用程序时替换某些配置。根据您的web.xml配置,首先创建ServletContext,这允许Servlet与托管您的应用程序的容器进行通信。我不认为有办法从web.xml文件更改配置。要解决您的问题,您可以配置侦听器以接收上下文生命周期事件并执行某些一次初始化,例如从外部文件读取值等。

您可以做的一件事是以编程方式设置会话超时值。要从外部文件读取值,您可以使用servlet上下文侦听器初始化参数从文件中读取值并将其存储在某个单例实例中 -

<listener>
    <display-name>ContextLoader</display-name>
    <listener-class>com.simple.web.app.ContextLoader</listener-class>
</listener>



<context-param>
    <param-name>SessionTimeoutFile</param-name>
    <param-value>file_location</param-value>
</context-param>    



HttpSession session = request.getSession();
session.setMaxInactiveInterval(value_read_from_text_file);



       public class ContextLoader implements ServletContextListener {

        /**
         * Default constructor. 
         */
        public ContextLoader() {
            // TODO Auto-generated constructor stub
        }

        /**
         * @see ServletContextListener#contextDestroyed(ServletContextEvent)
         */
        public void contextDestroyed(ServletContextEvent arg0)  { 

        }

        /**
         * @see ServletContextListener#contextInitialized(ServletContextEvent)
         */
        public void contextInitialized(ServletContextEvent arg0)  { 
            ServletContext context = arg0.getServletContext();
            System.out.println(context.getInitParameter("SessionTimeoutFile"));

        WebProperties.INSTANCE.init(context.getInitParameter("SessionTimeoutFile"))
    }

    public enum WebProperties {
    INSTANCE;

    private static Properties PROPERTIES;

    public void init(String filePath) {
         InputStream inputStream;
            try {
                inputStream = new FileInputStream(filePath);
                if(inputStream != null) {
                    PROPERTIES = new Properties();
                    try {
                        PROPERTIES.load(inputStream);
                        System.out.println(PROPERTIES.get("value"));
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                }
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
    }

    public String getConfigurationValue(String key) {
        return PROPERTIES.getProperty(key);
    }
}

然后,您可以通过WebProperties访问它在您的应用程序中使用它

   long sessionValue = Long.parseLong(WebProperties.INSTANCE.getConfigurationValue("value"));
HttpSession session = request.getSession();
session.setMaxInactiveInterval(sessionValue);