2010-07-15 58 views
0

在我Tomcat的Spring的Java项目,我想有以下URL让Spring DispacherServlet解析正确的URLmap

/索引 - 显示登录页面
/登录 - 登录页

/汽车/ - 列表中提供的汽车
/汽车/(编号) - 显示特定汽车
/汽车/ {ID} /动作 - 在这个特别的车做动作

/人/ - 列出可用的人
/人/(编号) - 显示一个特定的人
/人/(编号)/动作 - 在这个特别的人

Ive得到了我的dispacher-的servlet地图像这样的web.xml中做动作。

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/login</url-pattern> 
    <url-pattern>/logout</url-pattern> 
    <url-pattern>/index</url-pattern> 
    <url-pattern>/cars/*</url-pattern> 
    <url-pattern>/people/*</url-pattern> 
</servlet-mapping> 

而且我调度-servlet.xml中图所示:

 <bean id="urlMap" 
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="urlMap"> 
     <props> 
      <prop key="/login">loginController</prop> 
      <prop key="/logout">logoutController</prop> 
      <prop key="/index">welcomeController</prop> 
      <prop key="/cars">listCarsController</prop> 
      <prop key="/cars/">listCarsController</prop> 
      <prop key="/cars/*">showCarController</prop> 
      <prop key="/cars/*/action">actionCarController</prop> 
      <prop key="/people">listPeopleController</prop> 
      <prop key="/people/">listPeopleController</prop> 
      <prop key="/people/*">showPersonController</prop> 
      <prop key="/people/*/action">actionPersonController</prop> 
     </props> 
    </property> 
</bean> 

这是工作不正常,因为当我访问例如/人/ 1 /动作,Dispacher的servlet的servlet说[1 /动作]的寻找处理者,当然这不是搜索,而是与人/前面的人分离到汽车身份证。

就像'*'将是唯一输入的URL。

顺便说一句,我想保持我的URL的扩展较少,我知道要将调度器映射到web.xml文件中的* .htm,将会照顾到这个问题。
但它必须是映射派发或使调度程序搜索完整的URL定义的一种方式。

回答

1

你可以设置一个alwaysUseFullPath属性:

<bean id="urlMap" 
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 

    <property name = "alwaysUseFullPath" value = "true" /> 

    ... 
</bean> 

或者,您可以设置一个<url-pattern>用于调度的servlet。由于它不能是/*,您需要use UrlRewriteFilter

+0

准备好尝试alwaysUseFullPath。我已经尝试使用UrlRewriteFilter来创建无扩展名的URL.spring,但它看起来很糟糕,除了使用/ people /因为没有文件来添加扩展名,所以在末尾用.spring填充我的URL地图... – JorgeO 2010-07-16 00:20:48

+0

我试过UrlRewriteFilter它使用这个帖子http://blog.ericdaugherty.com/2010/03/web-file-extensions-are-bad.html – JorgeO 2010-07-16 00:23:08

+0

工作!我不知道为什么不是默认行为。或者更好地记录。谢谢 – JorgeO 2010-07-16 00:48:14