[SpringMVC] Dúvida na renderização de páginas .jsp

8 respostas
java
A

Olá,

Quando acesso a url da minha aplicação: http://localhost:8080/olaMundoSpring
Definida em:

`@Controller
public class OlaMundoController {

@RequestMapping("/olaMundoSpring")
public String execute() {
    System.out.println("Executando a lógica com Spring MVC");
    return "hello-world";
}

}`

Eu recebo a pág de resposta com a mensagem:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Jan 14 18:48:28 BRST 2016
There was an unexpected error (type=Not Found, status=404).
No message available

Ele passa pelo Controller, pois printa no console “Executando a lógica com Spring MVC”, mas não renderiza a minha página hello-world.jsp:

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

Insert title here Ola! `

Estou iniciando estudos no SpringMVC.
Estou utilizando a apostila da Caelum, sou novo no fórum.
Utilizo a Intellij 15 ultimate

Grato!

8 Respostas

R

O seu método está sendo acessado com sucesso, o problema é o retorno do método que deveria ser uma página JSP. Porém, ao que parece, ele não está conseguindo encontrar a página para abrir.
Você precisa descobrir o porque ele não encontra a página. Por exemplo:

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

nesta configuração a página deveria ficar dentro do diretório: /WEB-INF/view/

A

Primeiramente obrigado pela resposta.

Então @romarcio, como posso fazer essa definição dos folders para minhas views? Eu estou apontando corretamente para propriedade property prefix. Segue as configurações que estou utilizando nos arquivos
spring-context.xml:
`

<?xml version="1.0" encoding=\"UTF-8\"?>

<context:component-scan base-package="com.example" />
<mvc:annotation-driven />

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/src/main/webapp/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
    <!--<property name="suffix" value="*.jsp"/>-->
    <!--<property name="prefix" value="/WEB-INF/view/"/>-->
    <!--<property name="suffix" value=".jsp"/>-->
    <!--<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>-->
</bean>

`

web.xml:

`<?xml version="1.0" encoding="UTF-8"?>

<servlet>
	<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
	<servlet-class>
		org.springframework.web.servlet.DispatcherServlet
	</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/src/main/webapp/WEB-INF/spring-context.xml</param-value>
	</init-param>
	<!--<load-on-startup>1</load-on-startup>-->
</servlet>

<servlet-mapping>
	<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

`

Segue um print dos folders na IDE: https://drive.google.com/file/d/0B33jJZYjthr1eUJJd3BaN3JhakE/view?usp=sharing
(Não tenho certeza se vai dar para visualizar)

Grato!

R

Tem algumas coisas erradas na sua configuração, vou adicionar a maneira correta e vc modifica.

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

<servlet>
    <description>Configuracao do Spring</description>
    <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/spring-context.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>

Se você está usando o Maven, exclua do seu projeto a pasta WEB-INF( e todo seu conteúdo ) que está abaixo da pasta target na imagem postada.

C

Olá andreluizlunelli

no meu blog disponibilizei um tutorial de como configurar um projeto com Spring MVC e Maven, veja se o link abaixo pode ajudar.

http://www.ciceroednilson.com.br/configurando-um-projeto-java-com-spring-mvc-e-maven/

Também tem esse outro exemplo:
http://www.ciceroednilson.com.br/java-criando-uma-agenda-de-eventos-com-spring-mvc-e-jquery-fullcalendar/

A

Olá @ciceroednilson,

Eu estou usando o SpringBoot e pelo que estou entendendo é diferente de trabalhar somente com o Spring sem esse recurso.

http://projects.spring.io/spring-boot/

Você já usou?

C

O SpringBoot ainda não usei, vou até estudar sobre ele agora.

S

@andreluizlunelli voce nao precisa do contexto da aplicacao?

Tipo: http://localhost:8080/context/olaMundoSpring

C

Olá,

Se está usando o Spring Boot e Spring MVC então sugiro ler essa seção: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-developing-web-applications

A atenção no tópico abaixo:

27.3.5 JSP limitations
When running a Spring Boot application that uses an embedded servlet container (and is packaged as an executable archive), there are some limitations in the JSP support.
With Tomcat it should work if you use war packaging, i.e. an executable war will work, and will also be deployable to a standard container (not limited to, but including Tomcat). An executable jar will not work because of a hard coded file pattern in Tomcat.
Jetty does not currently work as an embedded container with JSPs.
Undertow does not support JSPs.
There is a JSP sample so you can see how to set things up.

E também a nota importante: Do not use the src/main/webapp directory if your application will be packaged as a jar. Although this directory is a common standard, it will only work with war packaging and it will be silently ignored by most build tools if you generate a jar.

Projeto de exemplo de Spring MVC com Spring Boot: https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-ui

Criado 14 de janeiro de 2016
Ultima resposta 25 de jan. de 2016
Respostas 8
Participantes 5