0

I'm new to Spring MVC. While trying for basic program I'm facing the 404 error page.

Web.xml

<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>My Demo App</display-name>
    <servlet>
        <servlet-name>myDemoApp</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/config/myDemoApp-servletConfig.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>myDemoApp</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

</web-app>

myDemoApp-servletConfid.xml

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

    <mvc:annotation-driven/>

    <!-- Components Scanner...package name should be the one which is having the controllers -->
    <context:component-scan base-package="com.demo.controllers"></context:component-scan>

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

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
</beans>

Controller class

package com.demo.controllers;

import java.util.Random;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MyDemoController {

    private String[] quotes = {"Hi I am vikram,"
            + "I am from Bangalore,"
            + "Bangalore is full of traffic"};

    @RequestMapping("/getQuote")
    public String getRandomQuote(Model model){

        int rand = new Random().nextInt(quotes.length);
        String randomQuote = quotes[rand];

        //http://localhost:8080/springMVCDemo/getQuote.html
        model.addAttribute("randomQuote",randomQuote);
        return "quote";
    }

}

JSP Page

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>My Demo App</title>
</head>
<body>
    <h1>The Quote is: </h1>
    <p>${randomQuote}</p>
</body>
</html>

URL Used:

http://localhost/8050/springMVCDemo/getQuote.html

Folder structure: [enter image description here][1]

Kindly suggest me the solution for the error.

Rahul Sharma
  • 194
  • 1
  • 3
  • 18
Vikram R
  • 99
  • 2
  • 9
  • 1
    Turn on debug logging and you might get a better clue. – OrangeDog Mar 21 '16 at 11:31
  • What server are you using to run this application? Is context root "springMVCDemo" properly set in server configuration? – Braj Mar 21 '16 at 11:32
  • this [post](http://stackoverflow.com/questions/6451377/loading-context-in-spring-using-web-xml) might help you to properly set context config location. declare `ContextLoaderListener` in `web.xml` and properly initialize `context-param` – Braj Mar 21 '16 at 11:35
  • Not related to the question but you've placed `InternalResourceViewResolver` bean twice in bean configuration file – Pragnani Mar 21 '16 at 11:44
  • 1
    @Pragnani first one is commented. – Braj Mar 21 '16 at 11:44
  • not able to see folder structure snapshot. – Braj Mar 21 '16 at 11:48

2 Answers2

1

It's clear from the error that spring was failed to load the controller as per your current configuration. Always keep an eye on debug logs and look what beans are registered with spring container on start-up. Logging will help you better to solve this problem.

Try with Bootstrap listener ContextLoaderListener that will read and load the configuration from contextConfigLocation set in context-param

For example:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/config/myDemoApp-servletConfid.xml</param-value>
</context-param>

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

Follow the related post

Community
  • 1
  • 1
Braj
  • 46,415
  • 5
  • 60
  • 76
0

changes the myDemoApp (dispatcher) servlet mapping as below.

<servlet-mapping>
    <servlet-name>myDemoApp</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
Lovababu Padala
  • 2,415
  • 2
  • 20
  • 28