1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Spring 3 MVC - Urls/mapeamentos não encontrados (HTTP 404).

Olá.

Minha aplicação está funcionando perfeitamente no localhost (Tomcat 7), mas quando coloco em produção (também Tomcat 7) somente a url da página inicial (/) fica acessível, as demais não conseguem ser encontradas (HTTP 404). Exemplo: /login

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
    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">

<annotation-driven />

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

<!-- FreeMarker Config -->
<beans:bean id="freemarkerConfig"
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <beans:property name="templateLoaderPath" value="/WEB-INF/views/" />
</beans:bean>

<!-- FreeMarker View Resolver -->
<beans:bean id="viewResolver"
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <beans:property name="cache" value="true" />
    <beans:property name="prefix" value="" />
    <beans:property name="suffix" value=".html" />
</beans:bean>

<context:component-scan base-package="com.x.y" />

</beans:beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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">

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

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

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

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

</web-app>

Em uma das tentativas de resolver o problema eu alterei o servlet-mapping de <url-pattern>/</url-pattern> para <url-pattern>/*</url-pattern> e não resolveu nada, mas começou a encontrar as urls se eu colocasse o sufixo ".jsp" no final da url. Por exemplo: /login.jsp

Até a pagina inicial aceita o .jsp: "/.jsp".

Alguém já passou por isso?

Pode ter alguma configuração no Tomcat que esteja esperando sempre um sufixo ".jsp"?

Obrigado.

  • Será que o freemaker não está intervindo em nada? Já tentou colocar o prefix do ViewResolver como / ou contextoAplicacao/

    Hiyuri   02 de ago de 2013
  • Pior que não tem a ver com o FreeMarker, não chega nem a reconhecer o mapeamento =/

    Isaias Pfaffenseller   02 de ago de 2013
  • Tenta mudar isso no seu web.xml, tive problemas com o init-param e fiz isso e funcionou inclusive o prefix do view resolver.

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

    `

    appServlet org.springframework.web.servlet.DispatcherServlet `

    Hiyuri   02 de ago de 2013
  • Não funcionou. Mas descobri que colocando o sufixo ".do" na url o mapeamento é encontrado (Ex: /login.do). Que bizarro.

    Isaias Pfaffenseller   02 de ago de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags spring-mvc tomcat rest java spring web web.xml ou faça a sua própria pergunta.