在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. 從web.xml中爲特定的url模式強制404錯誤
- 2. 配置nginx在URL匹配模式時返回404
- 3. URL給404 ..Angularjs
- 4. URL重寫404頁
- 5. URL重寫模塊模式
- 6. 替換URL模式
- 7. 檢測URl模式
- 8. URL模式在Django
- 9. mean.io angularjs引導模式未找到404
- 10. Nginx的 - 如果模式404 - 去
- 11. Zend公司拋404頭髮展模式
- 12. 如何在rails應用程序中將特定的url模式發送到404?
- 13. HTTPClient給404沒有WWW的URL url
- 14. .htaccess轉到404 - url重寫
- 15. Magento FishPig/wp-admin/URL 404
- 16. ASP.NET友好URL 404錯誤
- 17. 在joomlaping joomla給404的url
- 18. URL重寫造成404
- 19. 用cookiephp登錄404'd URL
- 20. .aspx給404的URL - Umbraco 6.2.1
- 21. 與404和URL重寫
- 22. Roku SceneGraph - 檢查URL爲404
- 23. REST URL的攔截URL模式
- 24. URL模式不能識別多個URL
- 25. Spring MVC的:URL模式
- 26. Spring Security URL模式配置
- 27. Servlet映射URL模式
- 28. Spring 3.0 URL模式驗證
- 29. Java過濾URL模式PARAMS
- 30. Android - 匹配url模式?
請你可以在這裏發佈你的映射?還有DispatcherServlet配置? – Nilesh 2011-03-04 08:41:37