@PathVariable
annotation is used to bound a method parameter to a URI template variable.
web.xml
For
example, consider below snippet, I bound the URI template variable (Template
variable are declared in curly braces) userName to the method parameter name.
@Controller
@RequestMapping("greeting")
public
class HelloWorldController {
@RequestMapping("welcome/{userName}")
public ModelAndView
getWelcomeMessage(@PathVariable("userName") String name) {
ModelAndView modelAndView =
new ModelAndView("hello");
String msg =
String.format("Hello %s, Welcome to spring MVC programming", name);
modelAndView.addObject("message",
msg);
return modelAndView;
}
}
If
I hit the url 'http://localhost:8080/springdemo/greeting/welcome/krishna', then
the method parameter name is bound with value "krishna".
If
I hit the url 'http://localhost:8080/springdemo/greeting/welcome/Deeepa', then
the method parameter name is bound with value "Deepa".
Find
the below working application.
HelloWorldController.java
package com.sample.myApp.controllers; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("greeting") public class HelloWorldController { @RequestMapping("welcome/{userName}") public ModelAndView getWelcomeMessage(@PathVariable("userName") String name) { ModelAndView modelAndView = new ModelAndView("hello"); String msg = String.format("Hello %s, Welcome to spring MVC programming", name); modelAndView.addObject("message", msg); return modelAndView; } }
Create
hello.jsp file under WEB-INF/jsp folder.
hello.jsp
<%@ 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>Hello World Spring Web MVC</title> </head> <body> <h2>${message}</h2> </body> </html>
Create
web.xml, HelloWorld-servlet.xml files under WEB-INF folder.
<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>Spring MVC Hello WorldApplication</display-name> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
HelloWorld-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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"> <context:component-scan base-package="com.sample.myApp" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
Create
index.jsp file under webapp folder.
index.jsp
<html> <body> <h2>Hello World!</h2> </body> </html>
Total
project structure looks like below.
Run
the application on server and hit the below url.
Can I bound multiple
path variables in one url?
Yes,
you can bound any number of path variables in one url.
For
example,
@RequestMapping("welcome/{countryName}/{userName}")
public
ModelAndView getWelcomeMessage(@PathVariable("userName") String name,
@PathVariable("countryName") String country)
In
the above example, countryName is mapped to the method argument country,
username is mapped to the method argument country.
Update
HelloWorldController class like below and rerun the application.
HelloWorldController.java
package com.sample.myApp.controllers; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("greeting") public class HelloWorldController { @RequestMapping("welcome/{countryName}/{userName}") public ModelAndView getWelcomeMessage(@PathVariable("userName") String name, @PathVariable("countryName") String country) { ModelAndView modelAndView = new ModelAndView("hello"); String msg = String.format("Hello %s, You are from %s", name, country); modelAndView.addObject("message", msg); return modelAndView; } }
When
you hit the url ‘http://localhost:8080/springdemo/greeting/welcome/India/krishna’.
,
you can able to see below kind of message.
No comments:
Post a Comment