我有一个配置为处理所有URL(*
)的servlet :
<servlet>
<servlet-name>MyServ</servlet-name>
<servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServ</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我需要为URLS开头/static/
,它应该从静态服务它们WEB-INF
.也就是说,MyServ应该成为一切不过 /static
.
我怎样才能做到这一点?
更新:澄清一下,我想要的是:
/*/
- 转到MyServ
/static/dir/file.css
- Jetty从/ dir /提供静态file.css.
我不确定要做什么的web.xml,或者放置静态文件的位置.
我尝试添加这个:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
但是,当我转到/static/
URL时,我得到:
HTTP ERROR 404
Problem accessing /static/dir/file.css. Reason:
Not Found
Powered by Jetty://
Run Code Online (Sandbox Code Playgroud)
我不知道如果我的web.xml文件是错误的,或者如果我只是把文件在错误的地方(我已经下试过src/main/webapp
和src/main/webapp/lib/META-INF/resources/
)
我正在使用Jetty.我想避免任何其他层,如Nginx,Apache等.
为了赢得赏金,请确保您回答Jetty的作品.
你最好的选择可能是在规则之前出现静态规则*
.
URL路径映射规则:
它按以下顺序使用.使用第一次成功匹配,无需进一步尝试.
- 容器将尝试查找请求路径与servlet路径的完全匹配.成功匹配选择servlet.
- 容器将递归地尝试匹配最长的路径前缀.这是通过使用'/'字符作为路径分隔符一次单击目录的路径树来完成的.最长匹配确定所选的servlet.
- 如果URL路径中的最后一个段包含扩展名(例如.jsp),则servlet容器将尝试匹配处理扩展请求的servlet.扩展名被定义为最后一个'.'之后的最后一个段的一部分.字符.
- 如果前三个规则都不会导致servlet匹配,则容器将尝试提供适合所请求资源的内容.如果为应用程序定义了"默认"servlet,则将使用它.
所以它将匹配规则/static/
,并停在那里.