Web applications Vaadin:禁用Vaadin V14 webapp中的图像文件夹列表

Web applications Vaadin:禁用Vaadin V14 webapp中的图像文件夹列表,web-applications,vaadin,Web Applications,Vaadin,我已经重建了vaadin webapp并删除了所有Spring功能。 My webapp现在是非spring应用程序的GreetService入门版下载 应用程序在tomcat 9.0应用服务器上运行,目录列表的配置如下:tomcat_HOME/conf/web.xml <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.

我已经重建了vaadin webapp并删除了所有Spring功能。 My webapp现在是非spring应用程序的GreetService入门版下载

应用程序在tomcat 9.0应用服务器上运行,目录列表的配置如下:tomcat_HOME/conf/web.xml

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
注册了三个servlet——默认的一个、jsp的一个和my的一个,这是带有注释的my AgentServlet类

我的问题是:-

  • 默认情况下,Vaadin servlet是否允许这些文件夹的列表,即列表默认设置为“true”。使用web init参数将其设置为false似乎没有任何效果

  • 将文件夹放在Vaadin应用程序的webapp上下文文件夹中(即http://appserver:port/vaadin-网络应用/图片。如果使用JSP应用程序执行此操作,则应用程序的行为将与我预期的一样,并且不会列出文件夹内容。您会得到一个404,或者如果index.html在那里,它将被显示。如有任何意见或建议,我将不胜感激

     @WebServlet(value = { "/*"}, initParams= 
         {@WebInitParam(name="listings", value="false")}, asyncSupported =true)
     public class AgentServlet extends VaadinServlet {
     /** the logger. */
         private static final Logger MLOGGER = LogManager.getLogger(AgentServlet.class);
    
     @Override
     protected void servletInitialized() throws ServletException {
         super.servletInitialized();
         MLOGGER.info("In AgentServlet ... servletInitialized()");
     }
    
     @Override
     protected void service(HttpServletRequest request, HttpServletResponse response) {
         MLOGGER.info("In AgentServlet ... service()");
         MLOGGER.info("Request:  Context Path = " + request.getContextPath()
         + "\n, Request URI = " + request.getRequestURI()
         + "\n, Request URL = " + request.getRequestURL()
         + "\n, Servlet Context Path = " + request.getServletContext().getContextPath()
         + "\n, Servlet Context Name = " + request.getServletContext().getServletContextName()
         + "\n, Servlet Mapping = " + request.getHttpServletMapping().getPattern()
         + "\n, Servlet Mapping Match Value = " + request.getHttpServletMapping().getMatchValue()
         + "\n, Servlet Mapping Match Name = " + request.getHttpServletMapping().getMappingMatch().name()
             );
    
         String ListingsSetting = getServletConfig().getInitParameter("listings");
         MLOGGER.info("In AgentServlet ... service().. Listings Setting = " + ListingsSetting);
    
    
     request.getServletContext().getServletRegistrations().forEach((key, value) -> MLOGGER.info(key + ":" + value.getClassName()));
    
     try {
         super.service(request, response);
     } catch (ServletException se) {
         MLOGGER.error("In AgentServlet ... service() caught Servlet Exception " +  se.getMessage());
     } catch (IOException ie) {
         MLOGGER.error("In AgentServlet ... service() caught IO Exception " +  ie.getMessage());
     }
    
    } }


  • 通过在TOMCAT_HOME\conf\web.xml文件中将以下值更改为
    false
    ,可以禁用服务器的目录列表:

    <init-param>
           <param-name>listings</param-name>
           <param-value>true</param-value>
    </init-param>
    
    
    列表
    真的
    

    也许你也可以尝试将一个空的index.html文件添加到目录中。

    我猜你把问题中的
    改为
    false
    。问题仍然存在吗?如果是,请通过编辑您的问题或在答案下进行评论来详细说明。如果没有,您可以接受@Alejandro Duarte的答案,这有助于其他人了解此问题的答案。在TOMCAT_HOME/conf/web.xml的web.xml中,listings值已设置为“false”,但images文件夹的内容仍在列出。这是我的问题-是否在其他地方重置。我已重新编写了问题,并删除了与问题无关的任何内容。我希望这更清楚。为什么要将init param设置为DefaultSerlvet,而不是AgentServlet?我的理解是,我两者都在做。DefaultServlet的init参数在tomcat主目录的web.xml中设置。这是Tomcat的“开箱即用”配置。因为我在我的Vaadin项目中使用了带有“/*”值的@WebServlet注释,所以我在这里的理解是,对我的webapp上下文的任何请求(无论是否用于静态资源)都将由AgentServlet处理,我正试图确保AgentServlet在目录列表中的行为,与DefaultServlet相同。
    <init-param>
           <param-name>listings</param-name>
           <param-value>true</param-value>
    </init-param>