I am new to Spring MVC. I am writing a simple maven web project to display a hello world on view when it is invoked. In addition to this I am using apache tomcat 7.
I am following this
The Controller is getting invoked and I am able to set and print the modelmap.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>springmvc</groupId>
<artifactId>demo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<finalName>demo</finalName>
</build>
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
HelloWeb-servlet.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="com.tutorialpoint" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/hello/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
HelloController
package com.tutorialpoint;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/hello")
public class HelloController {
public HelloController(){
System.out.println("hiii");
}
@RequestMapping(method = RequestMethod.GET)
public String printHello(Model model){
System.out.println("this is controller");
model.addAttribute("testvalue", "Hello World!!");
System.out.println(model.toString());
return "output";
}
}
Output.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ 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>Output</title>
</head>
<body>
<p>This is output jsp page message is </p> ${testvalue}
</body>
</html>
But on resulting view(output.jsp) I am unable to fetch the value. I tried
Thanks in advance.
Edit - adding output.jsp screen shot
If you want to use EL you need to declare your deployment descriptor (web.xml) as Servlet 2.4 or higher. As you use Tomcat 7 which supports Servlet 3.0 I'd recommend you to use that version.
You can achieve it by changing your opening bracket in web.xml to this:
<web-app version="3.0"
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_3_0.xsd">
If that hasn't resolved your problem try to include below directive in your view:
<%@ page isELIgnored="false" %>
Hope it helped.
Here the problem is with the web.xml
header
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
Change it to the following.
<?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">
You don't need to add <%@ page isELIgnored="false" %>
to every page instead change the web.xml
header once.
It will not work, as you are modifying the modal
in controller and then moving to new view
altogether which will have its own model
. Hence any change you do will be nullified
.
I would recommend you to use flash attribute
facility of Spring MVC by adding RedirectAttributes
in your controller method as follows,
@RequestMapping(method = RequestMethod.GET)
public String printHello(Model model, RedirectAttributes redir){
System.out.println("this is controller");
// model.addAttribute("testvalue", "Hello World!!");
redir.addFlashAttribute("testvalue", "Hello World!!");
System.out.println(model.toString());
return "redirect:/output";
}
Or Create a new ModelAndView
and return it,
@RequestMapping(method = RequestMethod.GET)
public ModelAndView printHello(Model model){
ModelAndView model= new ModelAndView("output");
System.out.println("this is controller");
model.addAttribute("testvalue", "Hello World!!");
System.out.println(model.toString());
return model;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.