Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaServlet-将Servlet映射到除字符串以外的每个URL_Java_Servlets - Fatal编程技术网

JavaServlet-将Servlet映射到除字符串以外的每个URL

JavaServlet-将Servlet映射到除字符串以外的每个URL,java,servlets,Java,Servlets,我配置了一个servlet来处理所有URL(*): 迈瑟夫 MyServlet 迈瑟夫 /* 对于以/static/开头的URL,我需要它从静态WEB-INF为它们提供服务。也就是说,MyServ应该提供除/static之外的所有服务 我该怎么做 更新:为了澄清,我想: /*/-转到MyServ /static/dir/file.css-Jetty从/dir/提供static file.css 我不确定web.xml要做什么,或者静态文件放在哪里 我尝试添加以下内容: 违约 /静止的/*

我配置了一个servlet来处理所有URL(
*
):


迈瑟夫
MyServlet
迈瑟夫
/*
对于以
/static/
开头的URL,我需要它从静态
WEB-INF
为它们提供服务。也就是说,MyServ应该提供除
/static
之外的所有服务

我该怎么做


更新:为了澄清,我想:

/*/
-转到MyServ
/static/dir/file.css
-Jetty从/dir/提供static file.css

我不确定web.xml要做什么,或者静态文件放在哪里

我尝试添加以下内容:


违约
/静止的/*
但是,当我转到
/static/
URL时,我只得到:

HTTP错误404 访问/static/dir/file.css时出现问题。原因: 找不到 由码头提供动力:// 我不确定我的web.xml是不是错了,或者我只是把文件放错了位置(我在
src/main/webapp
src/main/webapp/lib/META-INF/resources/
下尝试过)


码头 我正在使用码头。我希望避免任何其他层,例如Nginx、Apache等


要赢得赏金,请确保您的答案适用于Jetty。

您最好的选择可能是在
*
规则之前有一个静态规则

URL路径映射规则:

它按以下顺序使用。使用第一个成功匹配,无需进一步尝试

  • 容器将尝试找到请求路径与servlet路径的精确匹配。成功匹配将选择servlet
  • 容器将递归地尝试匹配最长路径前缀。这是通过使用“/”字符作为路径分隔符,一次将路径树从一个目录中删除来完成的。最长匹配确定所选的servlet
  • 如果URL路径中的最后一段包含扩展名(例如.jsp),servlet容器将尝试匹配处理扩展名请求的servlet。扩展名定义为最后一个“.”字符后最后一段的一部分
  • 如果前三个规则都没有导致servlet匹配,那么容器将尝试提供适合所请求资源的内容。如果为应用程序定义了“默认”servlet,则将使用它

  • 因此,它将与
    /static/
    的规则相匹配,并到此为止。

    您的问题可以通过使用
    Nginx
    解决。Nginx提供静态内容HTML文件、图像(.jpg、.png、.gif)、样式表(.css)和JavaScript(.js)。这些文件不需要由web服务器处理。Nginx将完成这项工作

    server {
      listen          80;
      server_name     YOUR_DOMAIN;
      root            /PATH/TO/YOUR/WEB/APPLICATION;
      location / {
        index index.jsp;
      }
      location ~ \.jsp$ {
        proxy_pass              http://localhost:8080;
      }
      location ^~/servlets/* {
        proxy_pass              http://localhost:8080;
      }
    }
    

    要提供静态内容,甚至不需要servlet。您可以将静态内容放在可通过服务器直接访问的文件夹中

    例如,如果应用程序名为
    TestApp
    ,则可以将内容放在
    TestApp/static/dir
    目录中。基于此,您的目录结构将是:

    TestApp
       |
       |_____ WEB-INF
       |
       |_____ static
                 |
                 |____ dir
    
    通过执行上述目录结构,您的所有静态内容(例如
    Sample.css
    )都可以通过以下URL访问:

    /TestApp/static/dir/Sample.css
    
    请查看此问题以了解更多信息


    请注意,通过这样做,您的静态目录将对所有人开放,没有任何限制,这意味着任何人都可以访问您的静态内容,而无需任何身份验证。但由于它是您的静态内容,我想它很好,除非您有任何理由。

    首先,位于“WEB-INF”目录中的文件不能直接通过WEB访问

    另外,我注意到您的条目“src/main/webapp/lib/META-INF/resources/”不包括解压缩的WAR目录,即web应用程序文件夹

    例如: src/main/webapp/[WAR文件夹]/lib/META-INF/resources/

    我以为你在用Tomcat。所以,创建WAR文件后,将其放入“webapp”目录,然后启动Tomcat。WAR文件应解压缩到与WAR文件同名的web应用程序文件夹中。现在,您应该可以从浏览器访问“WEB-INF”之外的任何文件

    示例:
    localhost:8080/[web应用文件夹名称]/[some file]


    希望这有帮助,

    只需将您的静态内容放入webapp目录即可。 该部分可以直接访问。使用localhost:port/yourAppName/ResourceName

    根据我的经验(正如Srinivasu Talluri所建议的),反向代理是解决您问题的答案

    您可以使用Nginx或将Apache配置为反向代理

    可以找到通过Nginx提供静态内容的详细配置

    当静态内容由web服务器本身处理时,就可以按原样使用servlet配置。因此,servlet将只服务于动态资源


    希望有帮助。

    谢谢-但是什么样的规则会告诉它使用本地资源?它不是servlet,只是静态文件。