Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC在呈现页面时忽略servlet配置_Java_Spring_Jsp_Spring Mvc_Servlets - Fatal编程技术网

Java Spring MVC在呈现页面时忽略servlet配置

Java Spring MVC在呈现页面时忽略servlet配置,java,spring,jsp,spring-mvc,servlets,Java,Spring,Jsp,Spring Mvc,Servlets,我编写了一个RESTAPI作为Spring引导应用程序,在我完成这项工作后,我尝试添加一个web前端,从一个基本的“Hello World”类型索引页开始。尝试持续点击主页会导致以下消息: 在名为“DispatcherServlet”的DispatcherServlet中找不到URI为[/WEB-INF/index.jsp]的HTTP请求的映射 这是控制器(我已经验证过它是通过断点命中的): 下面是带有视图解析器的主要应用程序,它似乎是基于该消息合并的: @Configuration @Enab

我编写了一个RESTAPI作为Spring引导应用程序,在我完成这项工作后,我尝试添加一个web前端,从一个基本的“Hello World”类型索引页开始。尝试持续点击主页会导致以下消息:

在名为“DispatcherServlet”的DispatcherServlet中找不到URI为[/WEB-INF/index.jsp]的HTTP请求的映射

这是控制器(我已经验证过它是通过断点命中的):

下面是带有视图解析器的主要应用程序,它似乎是基于该消息合并的:

@Configuration
@EnableWebMvc
@EnableJpaRepositories("com.name.api.repositories")
@ComponentScan(basePackages = {
        "com.name.api.controllers",
        })
@EntityScan("com.name.api.entities")
@SpringBootApplication
public class RestApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(RestApiApplication.class, args);
    }

    @Bean
    public ViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver bean = new InternalResourceViewResolver();
        bean.setViewClass(JstlView.class);
        bean.setPrefix("/WEB-INF/");
        bean.setSuffix(".jsp");
        return bean;
    }
}
这是我的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" 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_3_0.xsd">

  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>

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

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>/WEB-INF/views/*</url-pattern>
 </servlet-mapping>

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>/WEB-INF/*</url-pattern>
</servlet-mapping>
</web-app> 

调度员
org.springframework.web.servlet.DispatcherServlet
1.
jsp
org.apache.jasper.servlet.JspServlet
调度员
/
jsp
/WEB-INF/views/*
jsp
/WEB-INF/*
如您所见,消息中的名称始终是“dispatcherServlet”,即使我重命名上面的Servlet,它也是不变的

我还有一个dispatcher-servlet.xml,我怀疑它是否正在被使用

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:default-servlet-handler></mvc:default-servlet-handler>
</beans>

WebContent/WEB-INF/(我将动态网页方面添加到项目中时创建的文件夹)下面有一个index.html文件和一个index.jsp文件。它始终无法找到它们,即使我将WEB-INF复制到它自己的文件夹中,该文件夹与WebContent处于同一级别,而不是在它下面(或者WEB-INF复制到src/main/webapp/)。我使用了一个调试器,发现消息在找不到处理程序映射时会被打印出来,但我怀疑当servlet的名称与配置中的名称不一致时,这太深入了(甚至故意将格式错误的xml添加到文件中也没有什么区别,尽管这可能只是编译器在识别错误后没有用坏代码替换好代码)


这似乎是一个相当基本的错误,我相信这里的其他人已经问过并得到了回答,但我在这里遇到了很多类似的问题,没有一个解决方案是有效的。

我首选的方法是使用Springbean XML配置文件,而不是基于Java的配置,因此我的解释是使用我的首选红色的选择。你可以选择必要的“翻译”

我认为您缺少一些配置:

  • 第一次加载dispatcher servlet时,它将查找spring bean配置文件名:
    dispatcher servlet.xml
    ,如果您的
    dispatcher servlet.xml
    未按预期位于
    /WEB-INF/
    下,那么您应该对其进行配置。例如,它位于
    /WEB-INF/s下spring/dispatcherservlet.xml
    ,然后在
    web.xml
    中,您应该:

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextLocation</param-name>
            <param-value>/WEB-INF/spring/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    

  • 在您的例子中,您将视图解析器bean不按预期放在web应用程序上下文中,您有点混合了您所有的“生活”一个上下文中的bean。当然,您没有看到前面提到的配置

    dispatcher-servlet.xml在WEB-INF下,但正如我所说的,我怀疑它是否真的被读取了。@Controller类型注释已经被我的REST API使用,以及我作为第一段代码包含的HomeController。我的RestApiAppl初始化已经告诉程序在哪些包中查找控制器、存储库等,并且这些东西起作用。无法读取的是xml内容。我尝试扩展AbstractAnnotationConfigDispatcherServletInitializer以复制xml,但调试器显示没有调用其任何函数。
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextLocation</param-name>
            <param-value>/WEB-INF/spring/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>