Spring MVC – 07 – RequestMapping – 01
Merhaba Arkadaslar
Bu bolumde @Controller ve @RequestMapping annotation’i inceleyecegiz.
Ilk ornegimizde bu annotation’lari kullanarak ornek bir uygulama yapmistik. Burada daha detayli olarak incelemeye baslayacagiz.
Annotation-based Controller son derece esnektir. Bunun icin @Controller annotation kullanarak sinifimizi Controller olarak tanimlayabiliriz.
@RequestMapping annotation’ini method ve class taniminda kullanabiliriz.
(org.springframework.web.bind.annotation.RequestMapping)
Hatirlayacagimiz gibi , Spring MVC yapisinda FrontController olarak DispatcherServlet gorev almaktadir.
DispatcherServlet gelen istegin URL adresine bakar ve bu istegi karsilayacak uygun controller’i bulur. Yani bir nevi istek (request) ile controller’i eslestirir (mapping).
Iste bu kavrama uygun olacak sekilde @RequestMapping annotation’ini kullanabiliriz.
Oncelikle bu orneklerimizde kullanacagimiz XML konfigurasyon dosyamizi olusturalim ve web.xml dosyamizda duzenlememizi yapalim.
@RequestMapping annotation’ini kullandigimiz metotlara request mapped method , mapped method ya da handler method isimleri verilir.
06.requestMapping.xml
<context:component-scan> tag’ini kullanarak Spring’in otomatik olarak @Controller annotation’larini bulmasini saglayabiliriz.
Bu sayede sadece @Controller degil , stereotype denilen @Repository , @Service , @Component gibi annotation’lari da bulacaktir.
Bunun icin package bilgisini vermemiz yeterli olacaktir. Ilk uygulamamizda da incelemistik.
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" 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"> <!--Auto-scanning ozelligini aktif ettigimizde bean tanimlamasini xml dosyamizada yapmamiza gerek kalmaz. @Controller @Service gibi annotation icin yeterli olacaktir. --> <context:component-scan base-package="_06.requestMapping.controller" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
web.xml
.... <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> <!-- /WEB-INF/01.appContext.xml /WEB-INF/02.00.appContext.xml /WEB-INF/03.multiActionController.xml /WEB-INF/04.propertiesMethodNameResolver.xml /WEB-INF/05.parameterMethodNameResolver.xml --> /WEB-INF/06.requestMapping.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> ....
Simdi de bu annotation’larin kullanim alanlarina ve attribute’lere gore olusacak senaryolari inceleyelim ;
- class
@RequestMapping(“/test”) - method
@RequestMapping(method = {RequestMethod.GET}) - description
Tum HTTP GET istekleri /test URL icin bu metot tarafindan karsilanacaktir.
Bunun disindaki HTTP istekleri karsilanmayacaktir. (HTTP POST vs )
TestController.java
package _06.requestMapping.controller; 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("/test") public class TestController { @RequestMapping(method = {RequestMethod.GET}) public String testMethod(Model model) { model.addAttribute("message", "testMethod..."); return "06.requestMapping.view/testPage"; } }
WEB-INF/06.requestMapping.view dizininde basit jsp dosyalarimiz yer alacaktir.
Ornegimizi calistirdigimizda;
http://localhost:8080/injavawetrust.springmvc/test
- class
@RequestMapping(“/test”) - method
@RequestMapping(method = {RequestMethod.GET} , value=”/test2″) - description
HTTP GET istekleri /test/test2 URL icin bu metot tarafindan karsilanacaktir.
package _06.requestMapping.controller; 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("/test") public class TestController { // // @RequestMapping(method = {RequestMethod.GET} , value="/test2") public String testMethodWithValue(Model model) { model.addAttribute("message", "testMethodWithValue..."); return "06.requestMapping.view/testPage"; } }
Ornegimizi calistirdigimizda ;
http://localhost:8080/injavawetrust.springmvc/test/test2
Onceki bolumlerde MultiActionController sinifini kullandik. Benzer sekilde ayni ornegi @Controller ve @RequestMapping annotation’i kullanarak yapabiliriz.
OrderController.java
package _06.requestMapping.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("/order") public class OrderController { @RequestMapping("/add") // http://localhost:8080/injavawetrust.springmvc/order/add public String add(Model model) { model.addAttribute("message", "OrderController#add"); return "06.requestMapping.view/addOrder"; } @RequestMapping(value = "/list", method = RequestMethod.GET) // http://localhost:8080/injavawetrust.springmvc/order/list public String list(ModelMap modelMap) { modelMap.addAttribute("message", "OrderController#list"); return "06.requestMapping.view/getOrderList"; } @RequestMapping(value = { "/remove", "/delete" }, method = RequestMethod.GET) // http://localhost:8080/injavawetrust.springmvc/order/delete // http://localhost:8080/injavawetrust.springmvc/order/remove public ModelAndView remove() { ModelAndView mv = new ModelAndView(); mv.setViewName("06.requestMapping.view/removeOrder"); mv.addObject("message", "OrderController#remove"); return mv; } }
@RequestMapping annotation’i metotlarla birlikte kullaniyoruz. value attributte’u kullanarak birden fazla path bilgisi verebiliriz.
method attribute ile karsilanacak HTTP metodunu belirtebiliriz , boylelikle ozellikle HTTP POST ve HTTP GET isteklerini kolaylikla birbirinden ayirabiliriz.
Metotlara dikkat edecek olursak Model , ModelMap ve ModelAndView tiplerini kullandik.
- org.springframework.ui.Model
arabirimdir. Spring 2.5.1 versiyonundan beri vardir. - org.springframework.ui.ModelMap
Map arabirimini uygulayan bir siniftir. Map’in sahip oldugu metotlara sahip olacaktir. Spring 2.0 versiyonunda beri vardir. - org.springframework.web.servlet.ModelAndView
ModelMap ve view objelerini tutar.
Ornegimizi calistirdigimizda;
http://localhost:8080/injavawetrust.springmvc/order/add
http://localhost:8080/injavawetrust.springmvc/order/list
value attribute ile birden fazla URL bilgisi verebiliriz ;
http://localhost:8080/injavawetrust.springmvc/delete http://localhost:8080/injavawetrust.springmvc/remove
Github kaynak kodlar / source folder
Injavawetrust-springmvc-tutorial
Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer
Leave a Reply