我在web.xml中创建了这样的映射:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/about/*</url-pattern>
</servlet-mapping>
在我的控制器中,我有类似的东西:
import org.springframework.stereotype.Controller;
@Controller
public class MyController{
@RequestMapping(value="/about/us", method=RequestMethod.GET)
public ModelAndView myMethod1(ModelMap model){
//some code
return new ModelAndView("aboutus1.jsp",model);
}
@RequestMapping(value="/about", method=RequestMethod.GET)
public ModelAndView myMethod2(ModelMap model){
//some code
return new ModelAndView("aboutus2.jsp",model);
}
}
我的dispatcher-servlet.xml有一个视图解析器,如:
<mvc:annotation-driven/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp"/>
令我惊讶的是:请求.../about/us
未到达控制器中的myMethod1。浏览器显示404错误。我在方法中放了一个记录器,但它没有打印任何东西,这意味着它没有被执行
.../about
工作正常!如何使.../about/us
请求工作?有什么建议吗?
答案 0 :(得分:12)
您需要使用@RequestMapping(value="/us", method=RequestMethod.GET)
,或者需要about/about/us
答案 1 :(得分:2)
由于您已在web.xml中映射“/ about”,因此它将传递的网址将如下所示www.xyz.com/about / *
正如您的配置所说,它适用于
为了正常使用或使用
web.xml中的/*
代替/about
或将控制器的端点更改为
@RequestMapping(value="/us", method=RequestMethod.GET)
@RequestMapping(value="/", method=RequestMethod.GET)
答案 2 :(得分:-3)
好的,我把事情搞定了,这是我在dispatcher-servlet.xml中添加的内容:
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="alwaysUseFullPath" value="true" />
</bean>
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="alwaysUseFullPath" value="true" />
</bean>