我有一个servlet配置为处理所有URL(*):
<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>
我需要以/ static /开头的URLS,它应该从静态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>
但是,当我去/静态/ URL,我只是得到:
HTTP ERROR 404 Problem accessing /static/dir/file.css. Reason: Not Found Powered by Jetty://
我不知道我的web.xml是否错误,或者我只是将文件放在错误的地方(我已经在src / main / webapp和src / main / webapp / lib / Meta-INF /资源/)
码头
我正在使用码头.我想避免任何其他层,如Nginx,Apache等.
要赢得赏金,请确保您回答Jetty的作品.
解决方法
你最好的赌注可能是在*的规则之前有一个静态规则.
Rule for URL path mapping:
It is used in the following order. First successful match is used with no further attempts.
- The container will try to find an exact match of the path of the request to the path of the servlet. A successful match selects the servlet.
- The container will recursively try to match the longest path-prefix. This is done by stepping down the path tree a directory at a time,using the ’/’ character as a path separator. The longest match determines the servlet selected.
- If the last segment in the URL path contains an extension (e.g. .jsp),the servlet container will try to match a servlet that handles requests for the extension. An extension is defined as the part of the last segment after the last ’.’ character.
- If neither of the prevIoUs three rules result in a servlet match,the container will attempt to serve content appropriate for the resource requested. If a “default” servlet is defined for the application,it will be used.
所以它将匹配/ static /的规则,并停止在那里.