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

把URL 改成classpath:springmvc.xml看看

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


看下行不行

你在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>

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

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

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

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

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

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

struts.xml里有没有定义好

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

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

  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 { //...方法内容 }}

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

先扫描注解:


/context:component-scan

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

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

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

首先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类所在的位置
``

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


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

这样试一下呢

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

<form method="post" action="userlogin.do?method=login" >改成
<form method="post" action="${pageContext.request.contextPath}/userlogin.do?method=login" >

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

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

改成

@Controller
public class UserLoginController {

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

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

@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 { //...方法内容 }}

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

其他配置没问题,就是在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

都是可以收到请求的