java - springmvc不能扫描到Controller,报404?
阿神
阿神 2017-04-17 17:45:41
0
9
235
applicationContext.xml
 <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util"  
        xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="
            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" >
    <!-- 定义支持注解的HanlderMapping -->
        <mvc:annotation-driven/>
        <!-- 开启组件扫描,启用IOC注解配置 -->
        <context:component-scan 
            base-package="com.caibai"/>
            
        <util:properties id="dbParams" 
            location="classpath:db.properties">
        </util:properties>
        
        <bean id="viewResolver" 
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/">
            </property>
            <property name="suffix" value=".jsp">
            </property>
        </bean>
        
    </beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
 <servlet>
     <servlet-name>springmvc</servlet-name>
     <servlet-class>
 org.springframework.web.servlet.DispatcherServlet
     </servlet-class>
     <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:applicationContext.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
     <url-pattern>*.form</url-pattern>
 </servlet-mapping>
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

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)
刘奇

找到癥結所在了

我重新看了一下你的描述, 你說你可以直接訪問.jsp頁面! ! ! 你可以直接访问.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那你的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>
Peter_Zhu

404一般有兩個原因,一個是RequestMapping寫的不對或沒有找到,但是你的配置應該是正確的,另一個是你的模板沒有,確認一下你返回的兩個模板ok.html login .html 或ok.jsp ok.html是否存在吧
另外404的頁面上會有提示到底是哪個原因,把具體的錯誤貼出來吧

左手右手慢动作

@Controller下面没有@RequestMapping("/XXX")

洪涛

雷雷

小葫芦

@ruixie說得比較正確了。
PS:補充一下,可以在controller要呼叫的方法中打個斷點,看看請求是否進入了需要呼叫的方法。

  • 如果沒進入,通常是設定映射出錯。

  • 如果進入方法,則證明傳回的"login"沒被視圖解析器解析到。

刘奇

從設定檔來看是沒有什麼問題的,因為報的是404錯誤,表示這個URL找不到,可以先嘗試debug一下,我猜想應該是能進入Controller層的,問題還得結合你整個工程來看,可以先試試,再結合【墮天使008】的回答,查問題

PHPzhong

應該是jsp目錄不對,沒找到jsp檔吧

Ty80

可以先用JUnit測一下

黄舟

404 Not Found: The requested resource could not be found(請求資源找不到)

LoginController 僅使用@Controller,未結合使用@ResponseBody@RestController,說明使用View請求重定向方式。 "/tologin.form"、"/login.form"是否映射監聽成功,從應用程式啟動日誌就能看到,類似如下日誌: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>

而你配置的springmvc Servlet映射只監聽*.form並不會監聽*.jsp重定向的請求,這些請求會落在Tomcat conf/web.xml配置的default Servlet。 jsp檔案放在哪裡? 這樣修改試試:#🎜🎜# rrreee
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板