7
回答
求助springmvc rest路径映射问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

web.xml配置

<servlet>
     <servlet-name>cms</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/smcms-servlet.xml</param-value>
  </init-param>
     <load-on-startup>1</load-on-startup>
    </servlet>   

 <servlet-mapping>
       <servlet-name>cms</servlet-name>
       <url-pattern>/my/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>cms</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
       <servlet-name>cms</servlet-name>
       <url-pattern>*.do</url-pattern>
    </servlet-mapping>

 

action 代码

@RequestMapping(value="/my/{userName}",method=RequestMethod.GET)
 public ModelAndView index(HttpServletRequest request,HttpServletResponse response,@PathVariable("userName")String userName) throws Exception{
  this.log.info("member index!");
  ModelAndView mav = new ModelAndView("member/index");
  return mav; 

 }

 

请求URL:http://localhost:8080/smcms/my/sysadmin

后台报:2013-12-27 11:26:23 org.springframework.web.servlet.DispatcherServlet noHandlerFound
警告: No mapping found for HTTP request with URI [/smcms/my/sysadmin] in DispatcherServlet with name 'cms'

一直想不明白为啥我这个请求URL,找不到映射?

当我把web.xml中的映射改成下面:

<servlet-mapping>
       <servlet-name>cms</servlet-name>
       <url-pattern>/</url-pattern>
    </servlet-mapping>就是可以的,但是这样的话,所有请求都会被拦截器拦截,包括js,css,image之类的。所以请大家看下上面的只拦截/my/*,.html,*.do为啥报错?

<无标签>
举报
programers
发帖于4年前 7回/3K+阅
共有7个答案 最后回答: 4年前
<servlet-mapping>
       <servlet-name>cms</servlet-name>
       <url-pattern>/my/*</url-pattern>

    </servlet-mapping> ,

你的配置文件中已经映射/my到这个路径,你这个时候的访问路径已经是http://localhost:8080/cms/my,

@RequestMapping(value="/my/{userName} 你的请求路径中你又配置了一次。如果你想访问到它,应该是在前面配置的路径 http://localhost:8080/cms/my再加上/my/{userName},即http://localhost:8080/cms/my/my/{userName}。

--- 共有 1 条评论 ---
andy-hu谢谢分享!回答的很好 2年前 回复
<mvc:resources mapping="/css/**" location="/css/"/>
 <mvc:resources mapping="/images/**" location="/images/"/>
 <mvc:resources mapping="/js/**" location="/js/"/>这个我也使用了。但是还是会把静态资源还是会被SPRING的拦截器给拦截。

URI [/smcms/my/sysadmin] smcms是你的工程名字吧,运行之前可以设置下Context,路径不要带工程名应该能解决找不到映射的问题

你设置的是

/my/*

表示会拦截 /my/sysadmin

那么你的@RequestMapping url应该匹配这里的*号,不带/my

比如你这里的应该配成:@RequestMapping(value=“/{userName}")

虽然你的/smcms/my/sysadmin  会找到这个action方法,但是你的userName是获取不到的,应为这不是rest的url。你还是重新设计一下rest url吧

哦。吼吼。感谢各位大神。@ never_say  ,@hao123.com ,你们说的都对。请教了另一位spring大神,他指导加上: <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="alwaysUseFullPath" value="true"></property>  
  </bean>
这样也是可以的。呵呵。灰常感谢谢。
--- 共有 1 条评论 ---
never_say长知识了,这个配置我也没见过 4年前 回复
顶部