java - springmvc不能扫描到Controller,报404?

 潇洒D-An_na 发布于 2022-10-31 00:03
applicationContext.xml
 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
            http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd" >
    
        
        
        
            
        
        
        
        
            
            
            
            
        
        
    

web.xml


http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
 
     springmvc
     
 org.springframework.web.servlet.DispatcherServlet
     
     
         contextConfigLocation
         classpath:applicationContext.xml
     
     1
 
 
        springmvc
     *.form
 
 
  
    index.jsp
  

LoginController.java

package com.caibai.controller;

import javax.annotation.Resource;
//import javax.ejb.Remove;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.caibai.search.User;
import com.caibai.search.UserService;

@Controller
public class LoginController {
    @Resource
    private UserService service;
    
    
    @RequestMapping("/tologin.form")
    public String toLogin(){
        return "login";
    }
    @RequestMapping("/login.form")
    public String login(
        String username,String number,Model model){
        User user = service.checkLogin(username,number);
        if(!"".equals(user.getCard())){
            model.addAttribute("name", user.getName());    
            model.addAttribute("card", user.getCard());    
            model.addAttribute("number", user.getNumber());    
            model.addAttribute("score", user.getScore());    
            return "ok";
        }else {
            model.addAttribute("msg", "会员信息错误!");
            return "login";
        }

    }
}

代码如上,页面访问login.jsp静态页面是可以的,但是填写上登陆数据不能跳转,直接访问login.form也是报404错误,请各位大神看下是什么原因?

9 个回答
  • 404 Not Found: The requested resource could not be found(请求资源未找到)

    LoginController 仅使用 @Controller,未结合使用 @ResponseBody 或者@RestController,说明使用 View 请求重定向方式。"/tologin.form"、"/login.form"是否映射监听成功,从应用启动日志就能看到,类似如下日志:

    2016-04-12 23:29:35.157 INFO 2398 --- [main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String hello.HelloController.index()
    

    而你配置的springmvc Servlet映射只监听*.form并不会监听*.jsp重定向的请求,这些请求会落到Tomcat conf/web.xml配置的default Servlet。jsp文件放在哪里?
    这样修改试试:

     <servlet-mapping>
         <servlet-name>springmvc</servlet-name>
         <url-pattern>/</url-pattern>
     </servlet-mapping>
    
    2022-10-31 22:29 回答
  • 可以先用JUnit测一下

    2022-10-31 22:30 回答
  • 应该是jsp目录不对,没找到jsp文件吧

    2022-10-31 22:30 回答
  • 从配置文件来看是没有什么问题的,因为报的是404错误,说明这个URL找不到,可以先尝试debug一下,我猜想应该是能进入Controller层的,问题还得结合你整个工程来看,你可以先试试,再结合【堕天使008】的回答,查问题

    2022-10-31 22:30 回答
  • @ruixie说得比较正确了。
    PS:补充一下,可以在controller要调用的方法中打个断点,看看请求是否进入了需要调用的方法。

    • 如果没进入,一般是配置映射出错。

    • 如果进入方法,则证明返回的"login"没被视图解析器解析到。

    2022-10-31 22:30 回答
  • <context:component-scan base-package="cn.com.xxx.xxx">
        <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/>
    </context:component-scan>
    2022-10-31 22:31 回答
  • @Controller下面没有@RequestMapping("/XXX")

    2022-10-31 22:31 回答
  • 404一般有两个原因,一个是RequestMapping写的不对或者没有找到,但是你的配置应该是正确的,另一个是你的模板没有,确认一下你返回的两个模板ok.html login.html 或者ok.jsp ok.html是否存在吧
    另外404的页面上会有提示到底是哪个原因,把具体的错误贴出来吧

    2022-10-31 22:31 回答
  • 找到症结所在了

    我重新看了一下你的描述, 你说你可以直接访问.jsp页面!!!
    那你的jsp就应该是直接放在根路径下的! 那你就不应该配置 prefix参数或者value="/"

    而且之所以将view放置到WEB-INF下就只为了防止用户不经由控制器直接访问,这样会导致页面上的Model数据不存在,所以劝你也放到那里。
    ——————————————————————————————————

    看起来配置都好像没什么问题, 建议你打个断点在.form方法里。

    现在这个样子看起来像是Mapping映射成功了,但是返回的View视图没有找到
    你确认一下/WEB-INF/ok.jsp/WEB-INF/login.jsp存不存在。

    另外,我一般见到的 view好像没有直接扔到/WEB-INF/下的,都是/WEB-INF/views或者/WEB-INF/jsps目录下的。
    你看看你是不是也这样放置的,如果是,那你就是配置文件写错了

    <bean id="viewResolver"   class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsps/">
        </property>
        <property name="suffix" value=".jsp">
        </property>
    </bean>
    
    2022-10-31 22:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有