在servlet映射中遇到url-pattern的问题。我正在使用spring 3.0并使用带注释的控制器。我用Spring的DispatcherServlet映射了* .do。我试图使用@PathVariable与URL - /test.do/{username}这是投掷404.试过几次试验和错误,并没有帮助。 url-patter“/”的作品,但我的应用程序的其他部分被破坏(CSS,图像等)URL模式404
URL模式404
回答
当使用带有out映射扩展名(如.do,.html等)的url来弹出时,将在春季处理。因此您需要将您的静态资源映射到另一个URL并使用其他servlet进行处理。
例如:旧的CSS将映射到http://localhost:8080/css/style.css
和你的CSS将映射到http://localhost:8080/static/css/style.css
,并添加servlet映射为/static/*
网址
<!-- Servlet for static resource -->
<servlet>
<servlet-name>static</servlet-name>
<servlet-class>com.jegbagus.servlet.DefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>basic</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Mapper for static resource -->
<servlet-mapping>
<servlet-name>static</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
和处理那些静态的请求添加的servlet。
package com.jegbagus.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DefaultServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
// Tomcat, Jetty, JBoss, and GlassFish
private static final String COMMON_DEFAULT_SERVLET_NAME = "default";
// Resin
private static final String RESIN_DEFAULT_SERVLET_NAME = "resin-file";
// WebLogic
private static final String WEBLOGIC_DEFAULT_SERVLET_NAME = "FileServlet";
// WebSphere
private static final String WEBSPHERE_DEFAULT_SERVLET_NAME = "SimpleFileServlet";
public String scanDefaultServlet(){
if(this.getServletContext().getNamedDispatcher(COMMON_DEFAULT_SERVLET_NAME) != null) {
return COMMON_DEFAULT_SERVLET_NAME;
} else if(this.getServletContext().getNamedDispatcher(RESIN_DEFAULT_SERVLET_NAME) != null) {
return RESIN_DEFAULT_SERVLET_NAME;
} else if(this.getServletContext().getNamedDispatcher(WEBLOGIC_DEFAULT_SERVLET_NAME) != null){
return WEBLOGIC_DEFAULT_SERVLET_NAME;
} else if(this.getServletContext().getNamedDispatcher(WEBSPHERE_DEFAULT_SERVLET_NAME) != null){
return WEBSPHERE_DEFAULT_SERVLET_NAME;
} else {
throw new IllegalStateException("Cannot determine what Server you currently use");
}
}
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
RequestDispatcher rd = getServletContext().getNamedDispatcher(this.scanDefaultServlet());
HttpServletRequest wrapped = new HttpServletRequestWrapper(req) {
public String getServletPath() {return "";}
};
rd.forward(wrapped, resp);
}
}
什么不明白scanDefaltServlet和包装。你能否详细说明一下?你已经实现了 – 2011-03-04 16:48:40
吗?你的问题解决了吗?基本上scanDefaultServlet找到您的默认servlet使用(取决于您的Web服务器使用什么)。比它将通过'/ static/*'url模式从默认源文件夹或根(在这种情况下是您的css文件夹或js)获取资源。 – 2011-03-04 17:14:08
谢谢!现在我明白了,它的工作原理 – 2011-03-07 00:32:12
我不认为在3.0中的URI模板支持@扩展名为.do的url中的@pathvariable。
您需要使用目录的网址模式,比如你做了/或者/柔和/在你的web.xml。
您可以设置该弹簧servlet将忽略像在下面的示例中的映射的路径,https://src.springframework.org/svn/spring-samples/mvc-basic/trunk/ 或 使用web.xml中,使得到的路径的请求,诸如/软/ *将仅由处理春天servlet。
- 1. 配置nginx在URL匹配模式时返回404
- 2. Dropwizard Jersey设置URL模式打破Swagger 404?
- 3. 从web.xml中为特定的url模式强制404错误
- 4. SoundCloud流URL 404
- 5. URL给404 ..Angularjs
- 6. Overiding URL模式
- 7. URL重写模式在URL
- 8. URL重写404页
- 9. URL重写模块模式
- 10. 检测URl模式
- 11. URL的QRegExp模式
- 12. 强制url模式
- 13. 泉和/ * URL模式
- 14. 替换URL模式
- 15. URL模式在Django
- 16. Grails URL映射。将404重定向到URL http://www.mysite.com/404.html
- 17. Zend公司抛404头发展模式
- 18. Nginx的 - 如果模式404 - 去
- 19. mean.io angularjs引导模式未找到404
- 20. 如何在rails应用程序中将特定的url模式发送到404?
- 21. 在www中导致404的URL的URL
- 22. HTTPClient给404没有WWW的URL url
- 23. 404上的Opensift URL,URL上的罚款
- 24. URL没有显示404页
- 25. asp mvc 404当+在url
- 26. Magento FishPig/wp-admin/URL 404
- 27. .aspx给404的URL - Umbraco 6.2.1
- 28. CodeIgniter的URL - 404错误
- 29. 在joomlaping joomla给404的url
- 30. 重定向URL怪〜404
请你可以在这里发布你的映射?还有DispatcherServlet配置? – Nilesh 2011-03-04 08:41:37