Java URL模式404
servlet映射中的url模式有问题。我正在使用Spring3.0和带注释的控制器。我用Spring的DispatcherServlet映射了*.do。我试图使用带有url-/test.do/{username}的@PathVariable。这是一个404。尝试了几次尝试和错误,但都无济于事。url模式“/”起作用,但我的应用程序的其他部分(CSS、图像等)被破坏了。当使用带有映射扩展名(如.do、.html等)的url到spring时,所有url都将由spring处理。因此,您需要将静态资源映射到另一个URL,并使用其他servlet进行处理 示例:旧css将映射到Java URL模式404,java,spring,spring-mvc,Java,Spring,Spring Mvc,servlet映射中的url模式有问题。我正在使用Spring3.0和带注释的控制器。我用Spring的DispatcherServlet映射了*.do。我试图使用带有url-/test.do/{username}的@PathVariable。这是一个404。尝试了几次尝试和错误,但都无济于事。url模式“/”起作用,但我的应用程序的其他部分(CSS、图像等)被破坏了。当使用带有映射扩展名(如.do、.html等)的url到spring时,所有url都将由spring处理。因此,您需要将静态资源
http://localhost:8080/css/style.css
您的css将映射到http://localhost:8080/static/css/style.css
并为/static/*
url添加servlet映射
<!-- 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>
我认为3.0中的URI模板不支持url中带有扩展名的@pathvariable,比如.do 您需要像在web.xml中那样使用目录url模式/或/soft/ 您可以设置SpringServlet将忽略映射的路径,如以下示例所示, 或
使用web.xml,这样对路径(如/soft/*)的请求将仅由spring servlet处理。请在此处发布映射?还有DispatcherServlet配置?还有什么不了解scanDefaltServlet和包装的。你能详细说明一下吗?你已经实施了吗?你的问题解决了吗?基本上,scanDefaultServlet可以找到要使用的默认servlet(取决于web服务器使用的内容)。然后,它将使用
/static/*
url模式从默认的sources文件夹或根目录(在本例中是您的css文件夹或js)获取资源。
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);
}
}