404-请求的Http不可用JavaEE Spring MVC

问题描述

我对Spring MVC DriverManagerDataSource不太熟悉,我正在尝试从控制器返回JSP。我的Controller方法运行良好,但是返回视图时出现404错误

我不知道为什么会出现此错误,如果我在Web.xml中告诉了这一点


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

spring-servlet

<?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.xsd  
    http://www.springframework.org/schema/mvc  
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    "> 
    <context:component-scan base-package="controllers"></context:component-scan> <!-- com.javatpoint. -->
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">    
        <property name="prefix" value="/WEB-INF/jsp/"></property>    
        <property name="suffix" value=".jsp"></property>    
    </bean>   
    
    <bean class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name = "driverClassName" value = "com.MysqL.jdbc.Driver"></property>
        <property name = "url" value = "jdbc:MysqL://localhost:3306/empleados"></property>
        <property name = "username" value = "---"></property>
        <property name = "password" value = "---"></property>
    </bean>
    
    <bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate">    
        <property name="dataSource" ref="ds"></property>    
    </bean> 
    
    <bean id = "dao" class = "dao.EmpDao">
        <property name = "template" ref = "jt"></property>
    </bean>
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <display-name>SpringMVC</display-name>
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.dispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

HomeController.java

package EjemploCRUD.SpringMVC.controller;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

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

@Controller
public class HomeController {

    @RequestMapping(value="/")
    public ModelAndView test(HttpServletResponse response) throws IOException{
        return new ModelAndView("index");
    }
}

MvcConfiguration.java

package EjemploCRUD.SpringMVC.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@ComponentScan(basePackages="EjemploCRUD.SpringMVC")
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{

    @Bean
    public ViewResolver getViewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }

    
}

错误

Type Status Report

Message The requested resource [/SpringMVC/] is not available

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

文件夹结构,

enter image description here


解决方法

在您的应用程序中,您同时使用了(基于Java和基于xml)两种配置类型。在此答案中,使用了基于xml的配置。

尝试以下步骤。

按如下所示修改spring-servlet.xml文件,

<context:component-scan base-package="controllers,EjemploCRUD.SpringMVC.controller"></context:component-scan>

<mvc:resources mapping="/resources/**" location="/resources/" />

按如下所示在web.xml文件中配置spring-servlet.xml文件的位置,

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-servlet.xml</param-value>
</context-param>

在您的应用程序中,spring-servlet.xml和web.xml文件位于WEB-INF / views目录下。但是这些文件与view不相关。因此,请将这两个文件移到WEB-INF文件夹中练习)。

根据web.xml文件,配置的视图(jsp文件)路径为WEB-INF / views目录。但是在您的文件夹结构中,index.jsp文件位于WEB-INF文件夹下。因此,得到此错误。请将index.jsp文件移至WEB-INF / views文件夹。