Bir önceki yazımda Spring MVC konusu üzerine açıklamar yapmıştım. Bu yazımda ise Hello World Örnegi üzerinden işleyişine deginecegim.
Tomcat 8
Spring 4.3.7
JDK 1.8
1.Adım: İlk olarak Eclipse'ı açıp Dimanik Web Projesi oluşturuyoruz.
Projeyi oluşturktan sonra bunu Maven projesine dönüştürüyoruz.
Web.xml eklemek için ise;
2.Adım:
Bu işlemlerden sonra Maven projemiz hazır hale geliyor.
Spring kütüphaneleri için pom.xml aşagıdaki gibi olmalıdır.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>SpringMVCHelloWorld</groupId>
<artifactId>SpringMVCHelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
|
-----------------------------------------------------------------------------------------------------------------------
3.Adım:
/WebContent/WEB-INF/ dosya yoluna serdar-servlet.xml oluşturulmalıdır.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc" 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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.serdarkocerr.controller" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
|
serdar-servlet.xml içerinde bulunan
<context:component-scan base-package="com.serdarkocerr.controller" />
controller'ın nerede aranması gerektigi hakkında bilgi verir. Bizim projemizde com.serdarkocerr.controller package içerisinde controllerın oldugu bilgisi vardır. Handler Mapping'i bu kısım saglar. Bu kısım dikkate alınarak ilgili controller bulunmak için tarama yapılır.
Ayırca bu kısımda View Resolver tanıtılır. Dönen view bilgisinde view'ın nerede oldugu bilgisi burada belirtilir. Dispatcher Controller bize bir view ismi döner ama uzantısını dönmez. Bu kısımda
<property name="prefix" value="/WEB-INF/jsp/" />
prefix bilgisi view'ın dosya yolunu verir.<property name="suffix" value=".jsp" />
suffix bilsi ise gelen view bilgisinin sonuna ne koyarak sayfayı bulacagımızı söyler. Örnegin gelen view bilgisi "welcome" olarak geldi. prefix ( ön-ek ) olarak /WEB-INF/jsp/ koyacagız. Son-ek olarak ise .jsp koyup view ( sayfa) bilgisini elde edecegiz.
/WEB-INF/jsp/welcome.jsp
-----------------------------------------------------------------------------------------------------------------------
4.Adım:
/WebContent/WEB-INF/web.xml 'de bulunan web.xml dosyasının içerigi asagıdaki gibi editlenir.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>SpringMVCHelloWorld</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>serdar</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>serdar</servlet-name>
<url-pattern>/welcome.html</url-pattern>
</servlet-mapping>
</web-app>
|
web.xml i inceleyecek olursak,
web.xml sadece ilk proje çalıştırıldıgında hangi sayfanın açılacagını belirtir.
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Ayrıca web.xml de Dispatcher Servlet tanımı yapılmaktadır. Dispatcher servlet konfigürasyon dosyası daha önce belirttigimiz gibi serdar-servlet.xml dosyasıydı. web.xml de ki tanımlamaya dikkat edersek servlet-name serdarolarak verilmiş. Yani serdar-servlet.xml ismiyle aynı verilmiş.
Bu tanımlama bu şekilde olmalıdır aksi taktirde tanımlanan servlet bulunamaz.
servlet mapping kısmına dikkat edersek;
<servlet-mapping>
<servlet-name>serdar</servlet-name>
<url-pattern>/welcome.html</url-pattern>
</servlet-mapping>
şekilinde tanımlanmıştır. Bu kısımda gelen request mesajının URL'inin uzanısına bakarak hangi Dispatcher Servlet'e gidilecegini belirler. Request olarak kullanıcıdan gelen URL
http://localhost:8080/SpringMVCHelloWorld/welcome.html şeklinde ise servlet name de ismi belirtilen servlet çalıştırılır yani serdar-servlet.xml çalıştırılır.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Detay Bilgi :
<url-pattern> kısmına birden fazla pattern tanıtılabilir ama Controller'da bu patternlere karşılık bir metod yoksa proje çalıştırılırken Console ekranında WARNING vermektedir. Bu sebepten proje çalışamamaktadır.
Yani sonuç olarak Controllerda eger karşılıgı yoksa url-patterne ilgili pattern eklenmemelidir.
Örnegin;
<servlet-mapping>
<servlet-name>serdar</servlet-name>
<url-pattern>/welcome.html</url-pattern>
<url-pattern>/kayit.jsp</url-pattern>
</servlet-mapping>
şeklinde url-patternler belirtildiyse Controllerda aşagıdaki gibi olmalıdır.
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
..... //.....
}
@RequestMapping("/kayit")
public ModelAndView kayit() {
//.....
}
Eger yukarıdaki gibi olmazsa proje run ediliyor ama çalışmıyor.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-----------------------------------------------------------------------------------------------------------------------
5.Adım:
Java Resources
-> src
sag tıklanır ve
New
-> Class
ile aşagıdaki gibi bir class oluşturlur.
Package: com.serdarkocerr.controller
FileName : HelloWorld.java
olarak verilir.
package com.serdarkocerr.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloWorld{
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
String message = "<br><div style='text-align:center;'>"
+ "<h3>********** Hello World, Spring MVC Tutorial</h3>This message is coming from HelloWorld.java **********</div><br><br>";
return new ModelAndView("welcome", "message", message);
}
}
|
Oluşturulan class'ı incelersek;
@Controller annotation ile class'ın Controller oldugunu belirtilir.
@RequestMapping("/welcome")
annotation ile gelen request mesajının URL'ine bakılır. "/welcome" ile başlayan bütün URL pathler bu methodta işlem görür. Örnek verecek
olursak:
/welcome/*
ve/welcome.html
URL path'leri bu metodta işlem görür.helloWorld metdunda işlem bittikten sonra ModelAndView tipinde bir nesne return eder. Bu
nesneyi inceleyecek olursak ModelAndView("welcome","message",message) şeklinde nesne
doldurularak return ediliyor.
"welcome" olarak belirtilen, return edilen View ismidir.
"message" bir id belirtir. Peki neyin id'sini belirtir derseniz ardından gelen message degiskeninin
id'sini belirtir. Yani message içeriginde yazan aşagıdaki string'i "message" id ile map ediyoruz.
String message = "<br><div style='text-align:center;'>"
+ "<h3>********** Hello World, Spring MVC Tutorial
</h3>This message is coming from HelloWorld.java **********</div><br><br>";
View'da "message" id ile yukarıda yazan String'i işleyebiliriz.
Sonuç olarak bu class Controller olarak işleve sahiptir. Controller'da Dispatcher Servlete bir ModelAndView nesnesi döner.
Daha sonra da Dispatcher Servlet bu nesneye göre bir View dönecektir.
-----------------------------------------------------------------------------------------------------------------------
6.Adım:
/WebContent/ altına index.jsp sayfası oluşturuyoruz. web.xml incelenirse başlangıç sayfası olarak index.jsp göstermiştik.
<html>
<head>
<title>serdarkocerr HelloWorld Example </title>
<style type="text/css">
body {
background-image: url('https://crunchify.com/bg.png');
}
</style>
</head>
<body>
<br>
<div style="text-align:center">
<h2>
Hey You..!! This is your 1st Spring MCV Tutorial..<br> <br>
</h2>
<h3>
<a href="welcome.html">Click here to See Welcome Message... </a>(to
check Spring MVC Controller... @RequestMapping("/welcome"))
</h3>
</div>
</body>
</html>
|
index.jsp başlangıç sayfası olarak açılır.
Başlangıçta açılan sayanın
URL: http://localhost:8080/SpringMVCHelloWorld/
Sayfa incelendiginde
<a href="welcome.html">Click here to See Welcome Message... </a>
kısmına dikkat edersek, bu kısma tıklanıldıgında URL'in sonuna "welcome.html" eklenecek.
Tıklandıktan sonra oluşan URL: http://localhost:8080/SpringMVCHelloWorld/welcome.html
Bu eklemeden sonra Dispatcher Servlet'e bir request gönderilcek. Spring öncelikle hangi dispatcher servlete gidecegine bakmak için web.xml dosyasına gidecek. web.xml'de, <url-patten> da aşagıdaki ifadeyi görüp eşleşecek.
<servlet-mapping>
<servlet-name>serdar</servlet-name>
<url-pattern>/welcome.html</url-pattern>
</servlet-mapping>
Eşleştikten sonra serdar isimli servlet'e gidecegini biliyor olacak. serdar isimli servlet için konfigürasyon dosyasına ise serdar-servlet.xml şeklinde gidecek. Bu konfigürasyon dosyasına göre Controller bulup işlemleri gerçekleştirecek.
--------------------------------------------------------------------------------------------------------------------------
7.Adım:
Controller'dan dönecek olan ModelAndView nesninde belirtilen welcome view'ını oluşturmak için
/WebContent/WEB-INF/jsp/ altına welcome.jsp dosyası yaratılır.
<html>
<head>
<title>Hello World Spring MVC
Example</title>
<style type="text/css">
body {
background-image: url('https://crunchify.com/bg.png');
}
</style>
</head>
<body>
${message}
</body>
</html>
|
Jsp dosyasını incelersek,
$(message): ModelAndView nesnesinde message id'ye map edilen ifadeler welcome.jsp sayfasında gösterilecektir.
String message = "<br><div style='text-align:center;'>"
+ "<h3>********** Hello World, Spring MVC Tutorial
</h3>This message is coming from HelloWorld.java **********</div><br><br>";
----------------------------------------------------------------------------------------------------------------------
Son olarak projenin genel görünümü aşagıdaki gibidir.
--------------------------------------------------------------------------------------------------------------
8.Adım:
Maven projesi derlenmesi ve server'da koşturulması için aşagıdaki adımlar takip edilmelidir.
Projeye sag tıklanıp Run As =>Maven Build 'e tıklanmalıdır.
Açılan pencerede Goals: clean install yazılıp Run edilmelidir.
Run edildikten sonra Console ekranında BUILD SUCCESS yazmalıdır.
Derleme bittikten sonra, projey sag tıklanıp Run As => Run On Server ( Tomcat 8 Seçilmelidir. ) => Finish
Bu işlemlerden sonra Tomcat Server'a proje eklendi ve çalıştırıldı. Çalıştırılırken Console ekranı aşagıdaki gibi olmalıdır.
Herhangi bir WARNING dikkate alınmalıdır.
Düzgünce çalıştıktan sonra sayfa görüntüleri aşagıdakiler gibi olmalıdır.
Kaynaklar:
https://crunchify.com/simplest-spring-mvc-hello-world-example-tutorial-spring-model-view-controller-tips/
Hiç yorum yok:
Yorum Gönder