RSS
email

SPRING WEB MVC APA DAN BAGAIMANA DIA BEKERJA


A.    APA ITU SPRING FRAMEWORK?
Spring merupakan framework IoC (Injection of Control) atau disebut juga Dependency Injection (DI), yaitu suatu mekanisme dimana tidak diperlukannya suatu pendeklarasian object untuk mendapatkan object tersebut. Hal ini dikarenakan object tersebut akan secara otomatis di instansi atau diinject oleh spring.
Spring dapat digunakan untuk melakukan pengaturan deklarasi manajemen transaksi, remote access dengan menggunakan RMI atau layanan web lainnya, fasilitas mailing, dan beragam opsi untuk pengaturan data ke database. Spring juga memungkinkan kita menggunakan hanya modul-modul tertentu sehingga kita tidak usah menggunakan semua modul spring dalam aplikasi apabila tidak diperlukan

Fitur-fitur dari Spring Framework :
  1. Transaction Management : Spring framework menyediakan sebuah layer abstrak yang generik untuk manajemen transaksi, sehingga memudahkan para developer dalam melakukan manajemen transaksi.
  2. JDBC Exception Handling : layer abstrak JDBC menawarkan exception yang bersifat hierarki sehingga memudahkan penanganan error.
  3. Integration with Hibernate, JDO, and iBatis : Spring menawarkan layanan integrasi terbaik dengan Hibernate, JDO dan iBatas
  4. AOP Framework : Spring merupakan framework AOP Terbaik yang pernah ada.
  5. MVC Framework : Spring hadir dengan framework aplikasi web MVC, yang dibangun di atas inti Spring. Spring merupakan framework yang sangat fleksibel dalam pengaturan strategi interface, dan mengakomodasi beberapa teknologi view seperti JSP, Velocity, Tiles, iText, dan POI.
Arsitektur Spring :
1.      Spring AOP Salah satu komponen utama Spring adalah AOP Framework, AOP framework digunakan untuk :

  • Untuk menyediakan layanan Enterprise, terutama sebagai pengganti EJB. Layanan terpenting dalam layanan ini adalah untuk mendekralitf manajemen transaksi, yang telah disediakan dalam abstraksi spring transaction.
  • Untuk memungkinkan pengguna dalam menerapkan AOP dalam penggunaan OOP.

2.      Spring ORM
Spring ORM berhubungan dengan akses database dan menyediakan lapisan layer terintegrasi dengan ORM yang populer termasuk JDO, Hibernate dan iBatis.

3.      Spring Web
Merupakan bagian dari modul pengembangan Web Spring termasuk Spring Web MVC.

4.      Spring DAO
DAO (Data Access Object) mendukung standarisasi akses data yang menggunakan teknologi seperti JDBC, Hibernate dan JDO.
5.      Spring Context
Paket ini didasari pada paket beans untuk menambah dukungan sumber pesan dan untuk pola desain Observer, dan kemampuan untuk mendapatkan sumber daya yang konsisten dengan menggunakan API.
6.      Spring Web MVC
Menyediakan implementasi MVC untuk aplikasi web.
7.      Spring Core
Paket Spring Core ini merupakan komponen paling penting dari Spring Framework.
Komponen ini menyediakan fitur Dependency Injection. BeanFactory memisahkan dependensi seperti inisialisasi, pembentukan dan akses object dari logika program anda.
Diagram Berikut menggambarkan arsitektur dari Spring :

Contoh Studi Kasus:
Ada sebuah class Person.
package com.example.beans;
public class Person {
       private String nama;
       private int umur;

       public String getNama() {
                      return nama;
       }
       public void setNama(String nama) {
                      this.nama = nama;
       }
       public int getUmur() {
                      return umur;
       }
       public void setUmur(int umur) {
                      this.umur = umur;
       }
       @Override
       public String toString() {
                      return String.format("Nama: %s\n" +
                                      "Umur: %d\n",
                                      this.nama, this.umur);
       }
}

Kemudian buat file context.xml untuk inisialisasi object
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
     
                      class="com.examlple.beans.Person"
                      p:nama = "Hasan"
                      p:umur = "20" />
Lalu panggil dengan menggunakan main class.
package com.example.main;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

import com.example.beans.Person;

public class mainPerson {

       /**
        * @param args
        */
       public static void main(String[] args) {
                 XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("context.xml"));
                 Person demo = (Person) beanFactory.getBean("mybean");
                 System.out.println(demo);
       }

}

Jika aplikasi dijalankan, maka hasilnya seperti berikut:
Nama: Hasan
Umur: 20

Jika kita tidak menggunakan Spring, Ketika Main Class dijalankan akan terdapat error karena Object Person belum di-inisialisasi. Cara di atas disebut dengan manual injection. Untuk Spring yang terbaru menggunakan cara Annotation.

B.     ARSITEKTUR SPRING FRAMEWORK
Di dalam Spring Framework terdapat 20 modul. Modul-modul tersebut dikelompokkan menjadi beberapa group antara lain :
a.       Core Container
b.      Data Access/Integration
c.       Web
d.      AOP (Aspect Oriented Programming)
e.       Instrumentation, dan
f.       Test

Berikut ini adalah penjelasan untuk tiap modul
·         Spring Core dan Spring Beans.
Merupakan komponen paling penting dari Spring Framework. Komponen ini menyediakan fitur Dependency Injection. BeanFactory memisahkan dependensi seperti inisialisasi, pembentukan dan akses object dari logika program anda.
·         Spring Context.
Paket ini didasari pada paket beans untuk menambah dukungan sumber pesan dan untuk pola desain Observer, dan kemampuan untuk mendapatkan sumber daya yang konsisten dengan menggunakan API
·         Spring Expression Language (SpEL).
SpEL menyediakan Expression Language yang powerfull untuk query dan manipulasi grafik objek pada saat runtime.
·         JDBC.
Spring JDBC memberikan lapisan JDBC abstrak yang menghilangkan kebutuhan untuk melakukan coding JDBC yang membosankan.
·         Spring ORM.
Spring ORM berhubungan dengan akses database dan menyediakan lapisan layer terintegrasi dengan ORM yang populer termasuk JDO, Hibernate dan iBatis.
·         Spring OXM.
Spring OXM berhubungan dengan Object/XML Mapping implementasi dari JAXB, Castor, XMLBeans, JiBX dan XStream.
·         Spring JMS (Java Messaging Services)
Berisi fitur-fitur yang berhubungan dengan Message Java.
·         Spring Web.
Modul Web Spring's menyediakan fitur integrasi dasar web-oriented seperti multi-file upload dan inisialisasi IOC menggunakan listener servlet dan konteks aplikasi web-oriented.
·         Spring Web Servlet
Spring Web Servlet berisi implementasi MVC pada web aplikasi.
·         Spring Web Portlet
Spring Web Portlet berisi implementasi MVC pada web aplikasi untuk Portlet
·         Spring Web Struts
Merupakan integrasi dengan Framework Struts
·         Spring AOP
Mengimplementasikan pemrograman berorientasi Aspect.
·         Spring Test
Berhubungan dengan testing Component dengan JUnit atau TestNG.

C.    SPRING WEB MVC
Dari keterangan sebelumnya, Spring Web MVC merupakan bagian dari modul Spring Web Servlet yang ada pada Spring Framework. Sehingga masih memiliki sifat-sifat yang sama dengan Spring Framework.

D.    CARA KERJA SPRING WEB MVC
a.     DispatcherServlet
Kerangka Spring Web model-view-controller (MVC) dirancang di sebuah DispatcherServlet. DispatcherServlet adalah suatu class di dalam Spring yang berfungsi untuk menangani permintaan yang didasarkan pada pengaturan di file xml. Jadi, DispatcherServlet adalah class yang mengatur jalannya permintaan dan keluaran. Diagram di bawah ini menunjukkan bagaimana alur kerja dari DispatcherServlet, yang merupakan sebuah ekspresi dari pola  FrontController.


Process Jalannya Request pada Spring Web MVC DispatcherServlet

DispatcherServlet di dalam file web.xml, yang di dalamnya juga ditambahkan URL Mapping yang akan di handle oleh DispatcherServlet.
b.     Spring IoC Container
 Selain DispatcherServlet dan Mapping request, di dalam web.xml juga terdapat letak Spring IoC Container. Spring IoC Container adalah jantung dari Aplikasi Spring. Yaitu sebuah file konfigurasi untuk memanage object-object yang ada di dalam aplikasi.
Spring IoC Container bisa menggunakan 2 cara, yaitu beans dan context. Untuk Spring Web MVC, setiap DispatcherServlet sebenarnya sudah memiliki WebApplicationContext sesuai dengan servlet-name yang di inisialisasi, yaitu -context.xml. Namun, kita juga bisa menggunakan nama lain, akan tetapi harus dituliskan pada web.xml seperti contoh di bawah ini.
     
           appServlet
           org.springframework.web.servlet.DispatcherServlet
          
                contextConfigLocation
                /WEB-INF/spring/appServlet/servlet-context.xml
          
           1
     
          
     
           appServlet
           /
     




Special beans di dalam WebApplicationContext
Type Bean
Explanation
controllers
Form the C part of the MVC.
handler mappings
Handle the execution of a list of pre-processors and post-processors and controllers that will be executed if they match certain criteria (for example, a matching URL specified with the controller).
view resolvers
Resolves view names to views.
locale resolver
A locale resolver is a component capable of resolving the locale a client is using, in order to be able to offer internationalized views
Theme resolver
A theme resolver is capable of resolving themes your web application can use, for example, to offer personalized layouts
multipart file resolver
Contains functionality to process file uploads from HTML forms.
handler exception resolvers
Contains functionality to map exceptions to views or implement other more complex exception handling code.

Contoh WebApplication Context.
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:beans="http://www.springframework.org/schema/beans"
      xsi:schemaLocation="
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

     
     
     
     

     
     

     
     
          
          
     
     
     
     
     


E.     IMPLEMENTASI PADA OBJECT
Implementasi IoC pada Spring Web MVC menggunakan metode Annotation. Annotation yang dimaksud seperti @RequestMapping, @RequestParam, @ModelAttribute, dan lainnya. Berikut contoh penggunaan Annotation
package org.springframework.samples.mvc.mapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MappingController {

      @RequestMapping("/mapping/path")
      public @ResponseBody String byPath() {
             return "Mapped by path!";
      }

      @RequestMapping(value="/mapping/method", method=RequestMethod.GET)
      public @ResponseBody String byMethod() {
             return "Mapped by path + method";
      }

      @RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="foo")
      public @ResponseBody String byParameter() {
             return "Mapped by path + method + presence of query parameter!";
      }

      @RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="!foo")
      public @ResponseBody String byParameterNegation() {
             return "Mapped by path + method + not presence of query parameter!";
      }

      @RequestMapping(value="/mapping/header", method=RequestMethod.GET, headers="Accept=text/plain")
      public @ResponseBody String byHeader() {
             return "Mapped by path + method + presence of header!";
      }

      @RequestMapping(value="/notheader", method=RequestMethod.GET, headers="!FooHeader")
      public @ResponseBody String byHeaderNegation() {
             return "Mapped by path + method + not presence header!";
      }
     
      @RequestMapping(value="/mapping/*", method=RequestMethod.GET)
      public @ResponseBody String regexp() {
             return "Mapped by regexp!";
      }

}



Bookmark and Share

0 komentar:

0 comments

SPRING WEB MVC APA DAN BAGAIMANA DIA BEKERJA

Published on Rabu, 14 Maret 2012 in


A.    APA ITU SPRING FRAMEWORK?
Spring merupakan framework IoC (Injection of Control) atau disebut juga Dependency Injection (DI), yaitu suatu mekanisme dimana tidak diperlukannya suatu pendeklarasian object untuk mendapatkan object tersebut. Hal ini dikarenakan object tersebut akan secara otomatis di instansi atau diinject oleh spring.
Spring dapat digunakan untuk melakukan pengaturan deklarasi manajemen transaksi, remote access dengan menggunakan RMI atau layanan web lainnya, fasilitas mailing, dan beragam opsi untuk pengaturan data ke database. Spring juga memungkinkan kita menggunakan hanya modul-modul tertentu sehingga kita tidak usah menggunakan semua modul spring dalam aplikasi apabila tidak diperlukan

Fitur-fitur dari Spring Framework :
  1. Transaction Management : Spring framework menyediakan sebuah layer abstrak yang generik untuk manajemen transaksi, sehingga memudahkan para developer dalam melakukan manajemen transaksi.
  2. JDBC Exception Handling : layer abstrak JDBC menawarkan exception yang bersifat hierarki sehingga memudahkan penanganan error.
  3. Integration with Hibernate, JDO, and iBatis : Spring menawarkan layanan integrasi terbaik dengan Hibernate, JDO dan iBatas
  4. AOP Framework : Spring merupakan framework AOP Terbaik yang pernah ada.
  5. MVC Framework : Spring hadir dengan framework aplikasi web MVC, yang dibangun di atas inti Spring. Spring merupakan framework yang sangat fleksibel dalam pengaturan strategi interface, dan mengakomodasi beberapa teknologi view seperti JSP, Velocity, Tiles, iText, dan POI.
Arsitektur Spring :
1.      Spring AOP Salah satu komponen utama Spring adalah AOP Framework, AOP framework digunakan untuk :

  • Untuk menyediakan layanan Enterprise, terutama sebagai pengganti EJB. Layanan terpenting dalam layanan ini adalah untuk mendekralitf manajemen transaksi, yang telah disediakan dalam abstraksi spring transaction.
  • Untuk memungkinkan pengguna dalam menerapkan AOP dalam penggunaan OOP.

2.      Spring ORM
Spring ORM berhubungan dengan akses database dan menyediakan lapisan layer terintegrasi dengan ORM yang populer termasuk JDO, Hibernate dan iBatis.

3.      Spring Web
Merupakan bagian dari modul pengembangan Web Spring termasuk Spring Web MVC.

4.      Spring DAO
DAO (Data Access Object) mendukung standarisasi akses data yang menggunakan teknologi seperti JDBC, Hibernate dan JDO.
5.      Spring Context
Paket ini didasari pada paket beans untuk menambah dukungan sumber pesan dan untuk pola desain Observer, dan kemampuan untuk mendapatkan sumber daya yang konsisten dengan menggunakan API.
6.      Spring Web MVC
Menyediakan implementasi MVC untuk aplikasi web.
7.      Spring Core
Paket Spring Core ini merupakan komponen paling penting dari Spring Framework.
Komponen ini menyediakan fitur Dependency Injection. BeanFactory memisahkan dependensi seperti inisialisasi, pembentukan dan akses object dari logika program anda.
Diagram Berikut menggambarkan arsitektur dari Spring :

Contoh Studi Kasus:
Ada sebuah class Person.
package com.example.beans;
public class Person {
       private String nama;
       private int umur;

       public String getNama() {
                      return nama;
       }
       public void setNama(String nama) {
                      this.nama = nama;
       }
       public int getUmur() {
                      return umur;
       }
       public void setUmur(int umur) {
                      this.umur = umur;
       }
       @Override
       public String toString() {
                      return String.format("Nama: %s\n" +
                                      "Umur: %d\n",
                                      this.nama, this.umur);
       }
}

Kemudian buat file context.xml untuk inisialisasi object
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
     
                      class="com.examlple.beans.Person"
                      p:nama = "Hasan"
                      p:umur = "20" />
Lalu panggil dengan menggunakan main class.
package com.example.main;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

import com.example.beans.Person;

public class mainPerson {

       /**
        * @param args
        */
       public static void main(String[] args) {
                 XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("context.xml"));
                 Person demo = (Person) beanFactory.getBean("mybean");
                 System.out.println(demo);
       }

}

Jika aplikasi dijalankan, maka hasilnya seperti berikut:
Nama: Hasan
Umur: 20

Jika kita tidak menggunakan Spring, Ketika Main Class dijalankan akan terdapat error karena Object Person belum di-inisialisasi. Cara di atas disebut dengan manual injection. Untuk Spring yang terbaru menggunakan cara Annotation.

B.     ARSITEKTUR SPRING FRAMEWORK
Di dalam Spring Framework terdapat 20 modul. Modul-modul tersebut dikelompokkan menjadi beberapa group antara lain :
a.       Core Container
b.      Data Access/Integration
c.       Web
d.      AOP (Aspect Oriented Programming)
e.       Instrumentation, dan
f.       Test

Berikut ini adalah penjelasan untuk tiap modul
·         Spring Core dan Spring Beans.
Merupakan komponen paling penting dari Spring Framework. Komponen ini menyediakan fitur Dependency Injection. BeanFactory memisahkan dependensi seperti inisialisasi, pembentukan dan akses object dari logika program anda.
·         Spring Context.
Paket ini didasari pada paket beans untuk menambah dukungan sumber pesan dan untuk pola desain Observer, dan kemampuan untuk mendapatkan sumber daya yang konsisten dengan menggunakan API
·         Spring Expression Language (SpEL).
SpEL menyediakan Expression Language yang powerfull untuk query dan manipulasi grafik objek pada saat runtime.
·         JDBC.
Spring JDBC memberikan lapisan JDBC abstrak yang menghilangkan kebutuhan untuk melakukan coding JDBC yang membosankan.
·         Spring ORM.
Spring ORM berhubungan dengan akses database dan menyediakan lapisan layer terintegrasi dengan ORM yang populer termasuk JDO, Hibernate dan iBatis.
·         Spring OXM.
Spring OXM berhubungan dengan Object/XML Mapping implementasi dari JAXB, Castor, XMLBeans, JiBX dan XStream.
·         Spring JMS (Java Messaging Services)
Berisi fitur-fitur yang berhubungan dengan Message Java.
·         Spring Web.
Modul Web Spring's menyediakan fitur integrasi dasar web-oriented seperti multi-file upload dan inisialisasi IOC menggunakan listener servlet dan konteks aplikasi web-oriented.
·         Spring Web Servlet
Spring Web Servlet berisi implementasi MVC pada web aplikasi.
·         Spring Web Portlet
Spring Web Portlet berisi implementasi MVC pada web aplikasi untuk Portlet
·         Spring Web Struts
Merupakan integrasi dengan Framework Struts
·         Spring AOP
Mengimplementasikan pemrograman berorientasi Aspect.
·         Spring Test
Berhubungan dengan testing Component dengan JUnit atau TestNG.

C.    SPRING WEB MVC
Dari keterangan sebelumnya, Spring Web MVC merupakan bagian dari modul Spring Web Servlet yang ada pada Spring Framework. Sehingga masih memiliki sifat-sifat yang sama dengan Spring Framework.

D.    CARA KERJA SPRING WEB MVC
a.     DispatcherServlet
Kerangka Spring Web model-view-controller (MVC) dirancang di sebuah DispatcherServlet. DispatcherServlet adalah suatu class di dalam Spring yang berfungsi untuk menangani permintaan yang didasarkan pada pengaturan di file xml. Jadi, DispatcherServlet adalah class yang mengatur jalannya permintaan dan keluaran. Diagram di bawah ini menunjukkan bagaimana alur kerja dari DispatcherServlet, yang merupakan sebuah ekspresi dari pola  FrontController.


Process Jalannya Request pada Spring Web MVC DispatcherServlet

DispatcherServlet di dalam file web.xml, yang di dalamnya juga ditambahkan URL Mapping yang akan di handle oleh DispatcherServlet.
b.     Spring IoC Container
 Selain DispatcherServlet dan Mapping request, di dalam web.xml juga terdapat letak Spring IoC Container. Spring IoC Container adalah jantung dari Aplikasi Spring. Yaitu sebuah file konfigurasi untuk memanage object-object yang ada di dalam aplikasi.
Spring IoC Container bisa menggunakan 2 cara, yaitu beans dan context. Untuk Spring Web MVC, setiap DispatcherServlet sebenarnya sudah memiliki WebApplicationContext sesuai dengan servlet-name yang di inisialisasi, yaitu -context.xml. Namun, kita juga bisa menggunakan nama lain, akan tetapi harus dituliskan pada web.xml seperti contoh di bawah ini.
     
           appServlet
           org.springframework.web.servlet.DispatcherServlet
          
                contextConfigLocation
                /WEB-INF/spring/appServlet/servlet-context.xml
          
           1
     
          
     
           appServlet
           /
     




Special beans di dalam WebApplicationContext
Type Bean
Explanation
controllers
Form the C part of the MVC.
handler mappings
Handle the execution of a list of pre-processors and post-processors and controllers that will be executed if they match certain criteria (for example, a matching URL specified with the controller).
view resolvers
Resolves view names to views.
locale resolver
A locale resolver is a component capable of resolving the locale a client is using, in order to be able to offer internationalized views
Theme resolver
A theme resolver is capable of resolving themes your web application can use, for example, to offer personalized layouts
multipart file resolver
Contains functionality to process file uploads from HTML forms.
handler exception resolvers
Contains functionality to map exceptions to views or implement other more complex exception handling code.

Contoh WebApplication Context.
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:beans="http://www.springframework.org/schema/beans"
      xsi:schemaLocation="
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

     
     
     
     

     
     

     
     
          
          
     
     
     
     
     


E.     IMPLEMENTASI PADA OBJECT
Implementasi IoC pada Spring Web MVC menggunakan metode Annotation. Annotation yang dimaksud seperti @RequestMapping, @RequestParam, @ModelAttribute, dan lainnya. Berikut contoh penggunaan Annotation
package org.springframework.samples.mvc.mapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MappingController {

      @RequestMapping("/mapping/path")
      public @ResponseBody String byPath() {
             return "Mapped by path!";
      }

      @RequestMapping(value="/mapping/method", method=RequestMethod.GET)
      public @ResponseBody String byMethod() {
             return "Mapped by path + method";
      }

      @RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="foo")
      public @ResponseBody String byParameter() {
             return "Mapped by path + method + presence of query parameter!";
      }

      @RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="!foo")
      public @ResponseBody String byParameterNegation() {
             return "Mapped by path + method + not presence of query parameter!";
      }

      @RequestMapping(value="/mapping/header", method=RequestMethod.GET, headers="Accept=text/plain")
      public @ResponseBody String byHeader() {
             return "Mapped by path + method + presence of header!";
      }

      @RequestMapping(value="/notheader", method=RequestMethod.GET, headers="!FooHeader")
      public @ResponseBody String byHeaderNegation() {
             return "Mapped by path + method + not presence header!";
      }
     
      @RequestMapping(value="/mapping/*", method=RequestMethod.GET)
      public @ResponseBody String regexp() {
             return "Mapped by regexp!";
      }

}


Spread The Love, Share Our Article

Related Posts

No Response to "SPRING WEB MVC APA DAN BAGAIMANA DIA BEKERJA"

 
offsetWidth); }