Frage Spring MVC gibt Jsp als Text- / Inhaltstyp zurück


Ich habe ein Problem mit Spring MVC und Jsp Webseite.

Wenn ich eine Webseite anfordere, kommt sie als zurück Text / Ebene standardmäßig. Ich habe versucht, das zu setzen Inhaltstyp wie Text / HTML manuell bei der HttpServletResponse Controller, und der Web-Browser rekonstruiert es, zeigt es richtig, aber Codierung der JSP-Tags am Körper. Beispiel:

JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Error 405 ******* </title>
    </head>
    <body> asdasdsasad </body>
</html>

Der Browser empfängt:

<html>
   <body>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%&gt;

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Title</title>

    </body>
</html>

Ich verwende Spring Boot und java webbasierte Annotation zur Konfiguration. Außerdem benutze ich @EnableAutoConfigurationund ich habe festgestellt, dass das Problem dadurch gelöst wird, dass das Sevlet von "/ *" auf "/" abgebildet wird.

Wegen der Java Annotation musste ich das sendedServlet (https://github.com/spring-projects/spring-boot/issues/91#issuecomment-27626036) und die Konfigurationsklasse ist:

@Configuration
public class DispatcherConfiguration {

@Bean
public ServletRegistrationBean dispatcherRegistration() {
    ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet());
    registration.addUrlMappings("/");
    registration.setLoadOnStartup(1);

    System.out.println("~~~~~~~ Servlet regristated " + registration.getServletName());
    return registration;

}

@Bean
public DispatcherServlet dispatcherServlet() {
    return new DispatcherServlet();
}

Beachten Sie, dass ich das verwende @Bean  Annotation missfollowing den vorherigen Kommentar Link, denn wenn Spring Boot nicht eine Ausnahme auslöst. Aber selbst wenn die Bean-Annotation nicht verwendet wird und ein xml verwendet wird, ist das Hauptproblem immer noch hier).

Dies ist die Spring MVC-Konfigurationsdatei:

@Configuration
@EnableWebMvc
@ComponentScan("es.sfacut")
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/login").setViewName("login"); 
    registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}

// Maps resources path to webapp/resources
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    registry.addResourceHandler("/images/**").addResourceLocations("/resources/images/");
    registry.addResourceHandler("/imgs/**")
        .addResourceLocations(Constant.RESOURCE_IMAGES_PATH);
}

@Bean
public UrlBasedViewResolver setupViewResolver() {
    UrlBasedViewResolver resolver = new UrlBasedViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
// resolver.setContentType("text/html");
    resolver.setViewClass(JstlView.class);

    return resolver;
}

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

@Bean
public MultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    // Size in bytes
    resolver.setMaxUploadSize(1752300);
    return resolver;
}

}

Hauptklasse:

@EnableAutoConfiguration
@ComponentScan("es.sfacut")
@EnableJpaRepositories
public class TelocomproMain {

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

}

Regler:

@RestController
@RequestMapping(value = "/api/")  
public class CategoryController {
    @RequestMapping(value="test4", method = RequestMethod.GET, produces = "text/plain;charset=UTF-8")
    public ModelAndView pageTest4(HttpServletResponse response) {

        ModelAndView model = new ModelAndView("elovendo/index");
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");
        return model;
    }
}

Anwendungseigenschaften:

#View resolver
spring.view.prefix= /WEB-INF/views/
spring.view.suffix= .jsp

Ich bin mir nicht sicher, ob ich etwas verpasse, ich poste alles, was du brauchst.

Vielen Dank im Voraus.


5
2017-07-25 09:33


Ursprung


Antworten:


Ihr Controller sollte ein @Controller kein @RestControllerAndernfalls wird die Antwort als String zurückgegeben, wenn Sie beobachten.

Wie bereits in den Kommentaren erwähnt, wird Ihre benutzerdefinierte Konfiguration überhaupt nicht benötigt. Sie können sich das von der Spring boot Mannschaft https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp.


2
2017-07-26 09:43



Hatte das gleiche Problem. Es passiert, wenn Sie Ihre JSP in einem Verzeichnis haben, das von behandelt wird ResourceHandler:

 registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");

Dies ist nur für statische Ressourcen - img, css, js. Du solltest deine JSP nach draußen bewegen


0
2017-07-11 14:26