JavaServlet-将Servlet映射到除字符串以外的每个URL
我配置了一个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要做什么,或者静态文件放在哪里 我尝试添加以下内容: 违约 /静止的/*
*
):
迈瑟夫
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路径映射规则:
它按以下顺序使用。使用第一个成功匹配,无需进一步尝试
因此,它将与
/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,只是静态文件。