Merhaba,
şuana kadarki yazılarımdaki örnekleri incelediğinizde işlemlerin tamamını tek bir
Jsp sayfasında yaptığımı göreceksiniz. Bu yazımda ise bir
Jsp sayfası içerisine başka sayfalarında dahil edilmesi işleminden bahsedeceğim.
Template oluşturma yapısından bahsediyorum(alttaki görüntü)
Aslında bütün web ve yazılım projelerinde ortak kullanılan alanlar
(Header,Footer,Menu) belirlenerek ilgili sayfada çağrılır. Bu şekilde her sayfada aynı kodların yazılmasının önüne geçilmiş olur. Esasında her sayfa için aynı kodları yazarak ta sonuca gidebilirsiniz ancak bakım,tutum ve yeni eklenecek özellikleri de(geliştirme) göz önünde bulundurursak bu yazımda anlatacağım yöntem ilginizi çekecektir diye düşünüyorum. Evet anahtar kelimeyi paylaşıyorum :
Apache tiles (Döşeme)
Öncelikle bu yapıyı kullanmak için illede
Apache Tiles kullanmak durumunda değilsiniz.
<jsp:include
page="WEB-INF/common/header.jsp" />
|
Şeklinde ki direktiflerle de ortak kullanılan kısımları tek sayfada toplayabilirsiniz. Güzel ama daha iyi bir yolu yok mu bu işin diye soracağınızı düşünerek sizlere
Apache Tiles Kullanmanızı tavsiye ediyorum. Nasıl kullanacağız sorusuna cevaben bu yazıda
Spring ile entegre ederek bu işlemi gerçekleştireceğiz.
1- Projemize
intelliJ ile bir web projesi oluşturarak başlıyoruz.
2-
log4j yi
pom.xml'e ekleyin.
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
|
3-
tiles'ı
pom.xml e ekleyin
<!-- Tiles -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>${tiles-version}</version>
</dependency>
|
4-
mvc-dispatcher-servlet.xml üzerinden
spring/apache-tiles bağlantısını yapın
<!-- Tiles configuration -->
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/tiles-definitions.xml</value>
</list>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
</bean>
|
5-
tiles-definitions.xml dosyasında
layout yapısını tasarlıyoruz.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="singleLayout" template="/WEB-INF/template/singleLayout.jsp" />
<definition name="mainLayout" template="/WEB-INF/template/mainLayout.jsp">
<put-attribute name="header" value="/WEB-INF/template/fragments/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/template/fragments/menu.jsp" />
<put-attribute name="footer" value="/WEB-INF/template/fragments/footer.jsp" />
</definition>
</tiles-definitions>
|
burada
singleLayout ve
mainLayout diye iki tanım yaptım. Birinde sade bir sayfa yapısı olacak diğerinde
üst menü ve footer bilgileri de gelecek.
Ben bu projede
header ve
footer alanlarına
bootstrap kaynaklarını ekledim. Yavaş yavaş görsel tarafada ağırlık verelim istedim.
Sayfalarda yukarıda tanımladığımız
layout-tiles çağrısı yapıldıktan sonra içerik sayfaya özgü olarak girilir.
örnek sayfa içeriği aşağıdaki gibidir:
about.jsp:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertDefinition name="mainLayout">
<tiles:putAttribute name="body">
<h1>About page !</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit
anim id est laborum.</P>
</tiles:putAttribute>
</tiles:insertDefinition>
|
AboutController.java
package com.company.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
/**
* Created by root on 6/14/15.
*/
@Controller
public class AboutController {
private static final Logger logger = LoggerFactory.getLogger(AboutController.class);
@RequestMapping(value = "/about", method = RequestMethod.GET)
public ModelAndView about(){
ModelAndView mv = new ModelAndView("about");
return mv;
}
}
|
NOT: log4j kütüphanesi
apache tiles ın gereksinimlerinden biridir. projenize
log4j yi dahil etmeniz gerekmektedir.
NOT2:
Tiles versiyonları önemlidir. Burada ben
tiles3 kullandım. Diğer versiyonlarda ki ufak tefek farklılıklar başlangıç aşamasında kafanızı karıştırabilir. ilk aşamada benimle aynı
spring versiyonunu ve
apache-tiles versiyonunu kullanmanızı tavsiye ediyorum