【问题标题】:Spring boot MVC : Whitelabel Error PageSpring Boot MVC:白标签错误页面
【发布时间】:2016-08-04 09:52:40
【问题描述】:

同时获取以下 Whitelabel 错误页面 我正在运行 Spring Boot MVC 应用程序。

白标错误页面

此应用程序没有显式映射 /error,因此您将其视为后备。

2016 年 4 月 13 日星期三 15:45:59 IST 出现意外错误(类型=内部服务器错误,状态=500)。 圆形视图路径 [home]:将再次分派回当前处理程序 URL [/rewards/web/home]。检查您的 ViewResolver 设置! (提示:由于默认视图名称生成,这可能是未指定视图的结果。)

application.properties

server.contextPath=/rewards/web

rewardsweb-servlet.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <context:component-scan base-package="com.rewards.web" />

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/views/jsp/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

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

    <mvc:annotation-driven />

</beans>

web.xml

<web-app 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"
    version="2.5">

    <display-name>rewards-web</display-name>
    <welcome-file-list>  
   <welcome-file>index.jsp</welcome-file>  
  </welcome-file-list>  
    <servlet>
        <servlet-name>rewardsweb</servlet-name>
        <servlet-class>
                    org.springframework.web.servlet.DispatcherServlet
                </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

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

</web-app>

Spring Boot 文件

package com.rewards.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.web.SpringBootServletInitializer;


@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

}

package com.rewards.web;

import io.undertow.Undertow.Builder;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.embedded.undertow.UndertowBuilderCustomizer;
import org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
public class ApplicationConfiguration {
    @Bean
    public UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() {
        UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory();
        factory.addBuilderCustomizers(new UndertowBuilderCustomizer() {

            public void customize(Builder builder) {
                builder.addHttpListener(9090, "0.0.0.0");
            }

        });
        return factory;
    }
}

控制器:

package com.rewards.web.controller;

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

@Controller
public class HomeController {

    @RequestMapping("/home")
    public String getHome(){
        System.out.println("-------this is home----------");
        return "home";
    }
}

JSP

home.jsp is in this path : /src/main/webapp/WEB-INF/views/jsp/home.jsp

当我点击时:http://localhost:9090/rewards/web/home 我收到白标签错误

我也尝试了以下解决方案,在控制器类中添加了以下代码。但没有帮助。

package com.rewards.web.controller;

import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController implements ErrorController{

    private static final String PATH = "/error";

    @RequestMapping(value = PATH)
    public String error() {
        return "Error handling";
    }

    public String getErrorPath() {
        return PATH;
    }

    @RequestMapping("/home")
    public String getHome(){
        System.out.println("-------this is home----------");
        return "home";
    }
}

你能帮帮我吗?
谢谢。

【问题讨论】:

    标签: spring spring-mvc spring-boot


    【解决方案1】:

    Spring Boot 中没有 web.xml

    Spring Boot 会忽略上述所有 xml 配置。 Spring Boot 使用 Java Config(虽然您可以使用 xml 配置,但您不应该将 xml 用于新项目)。

    这就是你在 Spring Boot 中定义InternalResourceViewResolver 的方式:

    @Configuration
    @EnableWebMvc
    public class ApplicationWebMvcConfig extends WebMvcConfigurerAdapter{
    
        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }
    
        @Bean
        public InternalResourceViewResolver viewResolver() {
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setPrefix("/WEB-INF/views/jsp/");
            resolver.setSuffix(".jsp");
            return resolver;
        }
    }
    

    这里是Spring Boot JSP Demo App,它将帮助您修改您的项目,使其真正成为 Spring Boot 项目。

    另外我建议您通过 Spring Boot Guide 开始使用 Spring Boot WebApp 和 Spring Boot Reference Guide

    【讨论】:

      【解决方案2】:

      看起来您需要一个 Dispatcher Servlet。也许是这样的:

      调度程序配置:

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

      应用程序配置

      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/spring/application-context.xml</param-value>
      </context-param>
      
      <!-- Creates the Spring Container shared by all Servlets and Filters -->
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        我也遇到过同样的问题,但结果证明不是 Spring Boot 的问题。 如果您在 Angular 2+ 中有前端,请尝试使用

        {
          provide: LocationStrategy,
          useClass: HashLocationStrategy
        }
        

        在您的 app.module.ts 中,它会有所帮助。

        【讨论】:

          【解决方案4】:

          在 Spring Boot 应用程序中渲染 JSP 页面之前,您必须遵循以下步骤。

          1.application.properties

          spring.mvc.view.prefix = /* spring.mvc.view.suffix = .jsp

          2.POM.XML

          <dependency>
             <groupId>org.apache.tomcat.embed</groupId>
             <artifactId>tomcat-embed-jasper</artifactId>
             <scope>provided</scope>
          </dependency>
          <dependency>
             <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          </dependency>
          

          3. 将 JSP 放置在正确的路径中。我更喜欢下面的文件夹结构 -> src\main\webapp\view\

          如果你遵循以上几点,JSP 将愉快地与 springboot 集成

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-01-29
            • 1970-01-01
            • 2022-12-23
            • 2017-06-03
            • 1970-01-01
            • 1970-01-01
            • 2020-06-22
            相关资源
            最近更新 更多