Как установить приоритетный порядок отображения параметров контекстного параметра на сервере? - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь получить имена параметров в объекте контекста сервлета из элементов param контекста в порядке, указанном в файле web.xml. Но при запуске кода на сервере порядок отображаемых параметров не совпадает с указанным в файле web.xml.

DemoServlet.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DemoServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter pw=response.getWriter();

    ServletContext context=getServletContext();

    //we are getting all the initialization parameter from the web.xml file
    Enumeration<String> e=context.getInitParameterNames();



    while(e.hasMoreElements()) {
        String s=e.nextElement();
        pw.println("<br>"+context.getInitParameter(s));
        }

    pw.close();
    }

}


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Servlet6ServletContextInterface2</display-name>

  <servlet>
  <servlet-name>demo</servlet-name>
  <servlet-class>DemoServlet</servlet-class>
  </servlet>

  <context-param>
  <param-name>DriverName</param-name>
  <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>

  <context-param>
  <param-name>Username</param-name>
  <param-value>Pranay Singh</param-value>
  </context-param>

  <context-param>
  <param-name>Password</param-name>
  <param-value>abc123</param-value>
  </context-param>

  <servlet-mapping>
  <servlet-name>demo</servlet-name>
  <url-pattern>/context</url-pattern>
  </servlet-mapping>

</web-app>

Ожидаемые результаты:

com.mysql.jdbc.Driver Пранай Сингх abc123

Фактические результаты:

Пранай Сингх com.mysql.jdbc.Driver abc123

1 Ответ

0 голосов
/ 11 мая 2019

Параметр предназначен для доступа по имени, поэтому заказы не гарантируются.

Если вы действительно нуждаетесь в них в определенном порядке, вы можете жестко закодировать имена параметров (в вашем собственном порядке) в коллекцию:

List<String> paramNames = Arrays.asList("DriverName", "Username", "Password");

for(String paramName: paramNames) {
    pw.println("<br>" + context.getInitParameter(paramName));
}

Или, если вы хотите сохранить динамические параметры без какого-либо жесткого кодирования, вы можете хотя бы отсортировать их.

Enumeration<String> e = context.getInitParameterNames();
List<String> paramNames = Collections.list(e);
Collections.sort(paramNames);

for(String paramName: paramNames) {
    pw.println("<br>" + context.getInitParameter(paramName));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...