taddy4944
坐功资深者
采纳率100%
2013-06-16 12:34 阅读 35.2k

spring mvc注解不能访问到controller

web.xml配置

<servlet>  
<servlet-name>annomvc</servlet-name>  
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
<init-param>    
<param-name>contextConfigLocation</param-name>    
<param-value>/WEB-INF/annomvc-servlet.xml</param-value>   
</init-param>   
<load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping>   
<servlet-name>annomvc</servlet-name>   
<url-pattern>*.do</url-pattern> 
</servlet-mapping>

annomvc-servlet.xml配置

<context:annotation-config />    
    <!-- 把标记了@Controller注解的类转换为bean -->            
    <context:component-scan base-package="com.svs.master.controller" />

   <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->    
  <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />     

   <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->     
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"     
      p:prefix="/csy/page/" p:suffix=".htm" />
   <bean id="multipartResolver"     
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver"     
      p:defaultEncoding="utf-8" />

controller类

    @Controller@RequestMapping(value = "/userlogin.do")
   public class UserLoginController  {    
   @RequestMapping(params="method=login", method = RequestMethod.POST)    
public String userLogin(HttpServletRequest request,   HttpServletResponse response) throws Exception {    //...方法内容    }}

页面请求

<form method="post" action="userlogin.do?method=login" >

后台错误

20:45:52,098 DEBUG DispatcherServlet:693 - DispatcherServlet with name 'annomvc' processing POST request for [/test/csy/page/userlogin.do]
20:45:52,098  WARN PageNotFound:947 - No mapping found for HTTP request with URI [/test/csy/page/userlogin.do] in DispatcherServlet with name 'annomvc'
20:45:52,098 DEBUG DispatcherServlet:674 - Successfully completed request
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

22条回答 默认 最新

  • shiweihang shiweihang 2014-11-18 14:46

    form中的action 最好写绝对路径 这样写是相对当前路径 将method改为get 看看请求的地址有没有问题

    后台的报错中提示 /test/csy/page/userlogin.do 正确的的uri应该是 /项目名/userlogin.do

    点赞 1 评论 复制链接分享
  • u013672953 钟先珄 2014-11-18 01:34

    把URL 改成classpath:springmvc.xml看看

    点赞 评论 复制链接分享
  • u011109042 小老虎Love 2014-11-18 02:35

    你的springmvc配置文件在WEB-INF下么,如果在WEB-INF下,这里就不用配置,DispatcherServlet这个类默认会加载annomvc-servlet.xml文件的。还有你这里 p:prefix="/csy/page/" p:suffix=".htm" />配置改成这样


    看下行不行

    点赞 评论 复制链接分享
  • float_z_leaf float_z_leaf 2014-11-18 09:35

    你在annomvc-servlet.xml里配置了扫描@Controller注解了嘛?下面的cn.com表示你的Controller所在的包的路径

    <context:component-scan base-package="cn.com" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    
    点赞 评论 复制链接分享
  • WangJing_Java WangJing_Java 2014-11-19 00:45

    1、首先你的访问路径应该改成绝对路径,这样会很规范,而且不容易出错。
    2、/WEB-INF/annomvc-servlet.xml

    如果你的配置文件在/WEB-INF下,是可以不配置的,如果在/src下,你可以配置为:
    classpath:annomvc-servlet.xml

    点赞 评论 复制链接分享
  • YH_L2050 刘玉毫 2014-11-19 03:26

    1,是否页面中有报错。2,核实请求的路径是否正确。3,spring 配置可能有问题,判断这个类是否扫描到了。

    点赞 评论 复制链接分享
  • crazy123456789 mask哥 2014-11-19 04:35

    mvc:anotation注解标签scan范围检查下

    点赞 评论 复制链接分享
  • u011731233 _LDL 2014-11-19 05:02

    struts.xml里有没有定义好

    点赞 评论 复制链接分享
  • wojiushiwo945you 毕小宝 2014-11-19 08:18

    检查下Controller类添加注解@Controller了吗?

    点赞 评论 复制链接分享
  • jdjz123 jdjz123 2014-11-20 03:34

    1、是否扫描到了类
    2、确保annotation配置好了

    点赞 评论 复制链接分享
  • lchenweihan lchenweihan 2014-11-20 09:10
    1. 需要确保您的Controller是定义在com.svs.master.controller 包内
    2. @RequestMapping要匹配

    @Controller@RequestMapping(value = "/test/csy/page)
    public class UserLoginController {

    @RequestMapping(value="/userlogin", params="method=login", method = RequestMethod.POST)

    public String userLogin(HttpServletRequest request, HttpServletResponse response) throws Exception { //...方法内容 }}

    点赞 评论 复制链接分享
  • YxSimple YxSimple 2014-11-22 03:28

    /test/csy/page/userlogin.do 这个路径映射对了吗?正常情况下应该是/test/userlogin.do test一级表contextpath userlogin.do表mappingurl

    点赞 评论 复制链接分享
  • u014274324 韩哥123456 2014-11-23 12:03

    先扫描注解:


    /context:component-scan

    然后映射路径:allocation/department.do
    @Controller("allocationController")
    @RequestMapping("/allocation")
    public class AllocationController {

    @RequestMapping("/department.do")
    public String list(Map map){

    也可能把所有路径都拦截了,映射不到,问题具体不知道是哪个,配置代码太少了

    点赞 评论 复制链接分享
  • cnicys cnicys 2014-11-27 07:52

    首先spring mvc地址映射到方法上面有几个需要注意的地方,第一个在web.xml需要配置那些地址需要mvc拦截,可以这样

    <!-- DispatcherServlet是spring mvc前置控制器,拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理 -->
    SpringMVCDispatcherServlet
    org.springframework.web.servlet.DispatcherServlet

    contextConfigLocation

    classpath:applicationContext-war.xml


    1


    SpringMVCDispatcherServlet
    /

    确认了拦截路径之后,需要在我们的controller上面标识注解信息这样在我们在请求这个地址的时候才能找到对应的处理方法,一般来说要注意几点,第一在controler类上面要添加@controller 第二最重要的就是在配置文件里边要能扫面到你包下面的类信息也就是我们controller类所在的位置
    ``

    一般来说一个请求就能到达我们的方法,从配置文件上面看


    应该这个问题,没有上下文信息,

    这样试一下呢
    点赞 评论 复制链接分享
  • cnicys cnicys 2014-11-27 07:56

    额~这个格式怎么不对呢~~~~
    我写的怎么都不见了,还不能更改 从配置上面看应该是没有设置上下文路径

    <form method="post" action="userlogin.do?method=login" >改成
    <form method="post" action="${pageContext.request.contextPath}/userlogin.do?method=login" >
    
    点赞 评论 复制链接分享
  • s09122289 s09122289 2014-11-27 09:18

    在annomvc-servlet.xml配置没有AdapterMapping的配置;另外,最好把优先级置为1

    点赞 评论 复制链接分享
  • CSDNyjp csdnyjp 2014-12-01 12:59

    额~这个格式怎么不对呢~~~~
    我写的怎么都不见了,还不能更改 从配置上面看应该是没有设置上下文路径

    改成
    点赞 评论 复制链接分享
  • ding43930053 D哈迪斯 2014-12-08 11:55

    @Controller
    public class UserLoginController {

    @RequestMapping(value = "/userlogin")
    public String userLogin
    (HttpServletRequest request, HttpServletResponse response) throws Exception { //...方法内容 return "返回的页面"; }}

    点赞 评论 复制链接分享
  • nohero1 nohero1 2014-12-12 08:27

    我很好奇你的访问路径 为什么会带 csy/page/ 不是应该 test/userlogin.do的吗?

    点赞 评论 复制链接分享
  • mz848083987 mz848083987 2014-12-29 08:38
    @Controller@RequestMapping(value = "/userlogin.do")
    
        这里不用加   .do吧
    

    public class UserLoginController {

    @RequestMapping(params="method=login", method = RequestMethod.POST)

    public String userLogin(HttpServletRequest request, HttpServletResponse response) throws Exception { //...方法内容 }}

    点赞 评论 复制链接分享
  • qq_28878909 qq_28878909 2015-10-12 09:34

    把方法名上面的mapping .do去掉,然后请求路径加上.do

    点赞 评论 复制链接分享
  • taddy4944 坐功资深者 2016-07-20 08:51

    其他配置没问题,就是在controller中注解有点问题,现在已经改好了,看我现在的配置方法

    @Controller
    @RequestMapping(value="/webpages/**")
    public class ProjectApprovalController extends BaseController {

    /**
    * 根据条件分页查询
    * @param request
    * @param response
    */
    @RequestMapping(value="/projectApprovalController.do",params="method=getProjectApprovalList")
    public void getProjectApprovalList(HttpServletRequest request,
    HttpServletResponse response){
    //方法实现
    }
    }

    配合我的页面文件结构就可以看懂了
    图片说明

    controller上的Mapping指明了请求过来的URL路径,必须包含/webpages/,后面的两个星号表示,后面的内容随意,并且不限制层级如下:
    */webpages/appv.do
    /webpages/login/login.do

    都是可以收到请求的

    点赞 评论 复制链接分享

相关推荐