Spring Web应用程序问题(MVC)状态404

时间:2016-01-24 04:36:34

标签: java spring jsp spring-mvc intellij-idea

我知道这里有很多代码可以扔掉,但如果有人能帮助我找出问题,我会很感激。它只是一个基本的MVC,主页上只有一个链接,“登录”,点击后它会带你到login.jsp。但是,它没有这样做。我认为问题出在控制器上,因为控制器文件中的注释是浅灰色的(使用intellij idea),好像它们没有被使用一样。 “/ login”确实显示在网址中。

的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">

<welcome-file-list>
    <welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/config/spring-servlet.xml</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

spring-servlet.xml(config):

<?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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <mvc:annotation-driven />
    <context:component-scan base-package="com.nusuth.controllers"></context:component-scan>
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

loginController.java:

package com.nusuth.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class loginController {
    @RequestMapping(value="/login" , method=RequestMethod.GET)
    public ModelAndView loadLoginPage() {
        ModelAndView mav = new ModelAndView("login");
        return mav;
    }
}

4 个答案:

答案 0 :(得分:0)

我想你也可以写&#34;登录&#34;控制器:

@Controller
public class loginController {
    @RequestMapping(value="/login" , method=RequestMethod.GET)
    public String loadLoginPage(Model model) {
        model.addAttribute(new LoginForm()); // empty login form
        return "login"; //jsp page name
    }
}

答案 1 :(得分:0)

@ Muninn9, 我注意到你的web.xml,它缺少ContextLoaderListener配置,它最终加载并初始化你的bean容器。  将log4j.xml / log4j.properties添加到web.xml并使用此侦听器(Log4jConfigListener)来启用控制台日志。 确保项目类路径设置中有一个有效的log4j.xml / log4j.properties。

答案 2 :(得分:0)

从您的日志消息中我可以看到catalina没有找到所需的类SpringServlet。

这意味着Web项目不包含所需的库。 Web应用程序的所有必需库都应位于WEB-INF / lib目录中。

如果您使用MAVEN或gradle等构建工具,它们将自动处理它。

否则你可以

  
      
  1. 创建文件夹WEB-INF / libs
  2.   
  3. 将所有必需的库放在那里。
  4.   

IntelliJ idea在您的主目录中创建一个名为 libs 的目录,如果选择自动下载库的选项,则将所有库放在那里。您可以将该目录复制到 WEB-INF

答案 3 :(得分:0)

架构配置修复为:

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"

否则<mvc:annotation-driven />将无法正确注册。

我在这里为你修好了一切:

enter image description here

弹簧servlet.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:mvc="http://www.springframework.org/schema/mvc"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <mvc:annotation-driven />
    <context:component-scan base-package="com.nusuth.controllers"></context:component-scan>
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">

<welcome-file-list>
    <welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/config/spring-servlet.xml</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

的login.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>login Page</title>
    </head>
    <body>
        <h1>Hello This is login page!</h1>
    </body>
</html>

loginController.java

package com.nusuth.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class loginController {
    @RequestMapping(value="/login" , method=RequestMethod.GET)
    public ModelAndView loadLoginPage() {
        ModelAndView mav = new ModelAndView("login");
        return mav;
    }
}

现在请求 login.jsp

http://localhost:8080/LoginDemo/login