📰 WHAT'S NEW?

[12] Session

Pengenalan Session

Dalam sebuah aplikasi web, pengunjung berpindah dari satu halaman ke halaman yang lain, sehingga penting untuk bisa tetap mengenali data pengunjung.JSP menyediakan objek session yang dapat menyimpan data khusus dari pengunjung.

Fungsi Session

Fasilitas session merupakan fasilitas yang penting dalam pembuatan aplikasi web, dimana pengunaan session yang umum adalah untuk menangani autentikasi atau sistem login. Pengunjung yang telah login akan memiliki variabel yang tersimpan dalam session yang dapat dikenali oleh program sehingga dapat mendeteksi apakah pengunjung telah login.

Pengunaan Session

Penggunaan session dapat kita lihat pada :
Shopping cart, dimana pengunjung yang ingin membel dapat menyimpan informasi barang belanjaan yang akan di beli pada shopping cart elektronik yang menggunakan fasilitas session. Semua barang belanjaan disimpan dengan fasilitas session sehingga user dapat melihat sewaktu-waktu barang apa saja yang telah dibeli setelah melihat katalog elektronik.

Metode Utama session

Terdapat 3 metode utama yang dimiliki oleh objek session yaitu:
public void setAttribute (String nama, Object value)
Throws IllegalStateException

public void getAttribute (String nama)
Throws IllegalStateException

public void removeAttribute (String nama, Object value)
Throws IllegalStateException

Sebagai contoh apabila kita ingin menyimpan data dalam session dapat dilakukan dengan kode:
session.setAttribute(”namaku”,”Isak”);
Dan untuk mendapatkan data tersebut kembali dapat dilakukan dengan kode seperti berikut :
String nm = (String) session.getAttribute(”namaku”);
Lalu apabila kita ingin menghapus data tersebut dapat dilakukan dengan kode berikut.
session.removeAttribute(”namaku”);

Membuat Session
Kode : savenameform.jsp
<%@ page language="java" %>
<html>
<head>
<title>Name Input Form</title>
</head>
<body>
<form method="post" action="savenametosession.jsp">
<p><b>Enter Your Name: </b><input type="text" name="username"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>

Ketika tombol submit diklik, file savenametosession,jsp dipanggil. Savenametosession.jsp mengambil nilai nama user dan menyimpannya sebagai user session dengan fungsi session.attribute(“username”,”username”);.

Kode : savenametosession.jsp
<%@ page language="java" %>
<%  
String username=request.getParameter("username");
if(username==null) username="";
session.setAttribute("username",username);
%>
<html>
<head>
<title>Name Saved</title>
</head>
<body>
<p><a href="showsessionvalue.jsp">Next Page to view the session value</a><p>
</body>
</html>

Kode : showsessionvalue.jsp

<%@ page language="java" %>
<%
String username=(String) session.getAttribute("username");
if(username==null) username="";
%>
<html>
<head>
<title>Show Saved Name</title>
</head>
<body>
<p>Welcome: <%=username%><p>
</body>
</html>

Beda cookies dengan session

Cookies
Cookies biasa nya untuk login
Cookies merupakan mekanisme penyisipan sebuah variabel data dengan waktu tertentu pada sisi client (browser). Data pada cookies itulah yang pertama kali akan dikirimkan ke server, yang kemudian disimpan dalam browser web. Cookies memiliki kemampuan untuk menyimpan serta memanggil kembali data yang ada di hardisk client.
Cara penulisan yang lengkap :
SetCookie (string name, string value, int expire, string path, string domain, int secure )
Session 
Session biasanya untuk hak akses pengaturan menu.
Session digunakan untuk memberi hak akses kepada tiap-tiap halaman web akan memiliki perbedaan akses walaupun banyak sekali user yang login dalam kurun waktu lama.
Fungsi session dari PHP yang digunakan ialah :
Session_Start : Untuk mengawali session, fungsi ini harus ditaruh di baris paling atas setelah tanda Untuk meregister variabel
Session_is_register ==> Mengembalikan nili true atau false terhadap sebuah variabel apakah masih di register
oleh session
Session_Unregister() ==> Untuk me-unregister session
Session_destroy ==> Unregister seluruh session yang telah diregister dalam fungsi session_register

[11] Cookie

Apa itu Cookie ?
Cookies merupakan data file yang ditulis ke dalam hard disk komputer oleh web server yang digunakan untuk mengidentifikasikan diri user pada situs tersebut sehingga sewaktu user kembali mengunjugi situs tersebut, situs itu akan dapat mengenalinya. Jadi dapat dikatakan bahwa cookies merupakan semacam ID card user saat koneksi pada situs. Tiap-tiap website pada umumnya mengeluarkan / membuat cookies sesuai karakterikstiknya. Ada web yang dapat menyapa user tiap kali mengunjungi situs tersebut selayaknya teman lama karena menggunakan cookies.

Kenapa Cookie dibuat ?
Mungkin kamu bertanya-tanya kenapa juga cookie dibuat? Alasannya karena cookie nyaman dan efektif saat digunakan. Jika website dengan pengunjung ribuan atau jutaan tidak menggunakan cookie, mereka akan menyimpan data interaksi yang dilakukan pengunjung ke server dan akan di proses disana. Tentu ini akan memakan waktu yang lama, sedangkan jika menggunakan cookie maka akan lebih cepat.

Apa kegunaan cookie ?
1. Membantu web site untuk “mengingat” siapa kita dan mengatur preferences yang sesuai sehingga apabila user kembali mengunjungi web site tersebut akan langsung dikenali.
2. Menghilangkan kebutuhan untuk me-register ulang di web site tersebut saat mengakses lagi tersebut (site tertentu saja), cookies membantu proses login user ke dalam web server tersebut.
3. Memungkinkan web site untuk menelusuri pola web surfing user dan mengetahui situs favorit yang sering dikunjunginya.

Berbahayakan cookie ?
Cookie tidaklah berbahaya, cookie hanyalah metode yang digunakan untuk mempermudah seorang pengguna internet. Selain itu cookie juga tidak dapat terinfeksi oleh malware atau virus. Lalu apa yang perlu kamu takutkan pada cookie? Cerita terburuk untuk ini adalah ketika seseorang mencuri cookie kamu untuk membuat data palsu atau mendapatkan email dan password. Namun kamu jangan terlalu kawathir karena keamaan cookie tergantung dari website yang kamu kunjungi dan browser yang kamu gunakan. Karena biasanya cookie telah dienkripsi agar terlindungi dari serangan hacker.

Bagaimana menghapus cookie ?
Ini tidaklah masalah, menghapus cookie adalah salah satu hal terbaik untuk melindungi privasi kamu dari serangan hacker. Kalaupun kamu menghapus cookie, kamu hanya perlu login lagi ke akun Facebook yang biasanya sudah terbuka situs-situs lain yang biasanya langsung masuk ke akun kamu. Pada setiap browser cookie bisa dihapus dan letaknya berbeda-beda tergantung browser yang kamu gunakan. Berikut caranya:
·       Internet Explorer: Setting>Safety>Delete Browsing History
·       Firefox: Tools>Clear Recent History
·       Chrome: Setting>Tools>Clear browsing data
·       Opera: Opera>Setting>Delete Private Data
Kamu juga bisa menggunakan software seperti CCleanerBleachBitEraser atau Privacy Agent.

Batasan-batasan cookies
  • Suatu client hanya dapat menampung 300 cookie.
  • Suatu server hanya bisa mengirim 20 cookie ke suatu client.
  • Sebuah cookie memiliki ukuran maksimal 4 Kb, sehingga total space hard disk yang digunakan cookie hanya mencapai 1,2 Mb.
  • Sebuah cookie hanya dapat dibaca dan diubah oleh server dari domain dimana cookie tersebut berasal.
  • Sebuah cookie hanya dapat berisi data berupa teks dan tidak bisa berupa data biner.
Sekarang langsung saja kita buat codingnya. Seperti biasa buat sebuah new Java Web project dengan menggunakan netbeans kalian. Lalu ubah file index.jsp menjadi seperti ini :

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!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=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <a href="doCheckCookie.do">Cek browser apakah mendukung cookie atau tidak</a> <br>
        <a href="doCreateCookie.do">Buat cookie</a> <br>
        <a href="doSeeCookie.do">Lihat cookie</a> <br>
    </body>
    <%
        String cek = (String) request.getAttribute("cek");
        String hsl = "Browser ini tidak mendukung cookie";
        if(cek!=null)
        {
            Cookie[] cekCookie = request.getCookies();
            if(cekCookie!=null)
            {
                Cookie c1;
                for(int i=0; i< cekCookie.length; i++)
                {
                    c1 = cekCookie[i];
                    if(c1.getName().equals("test") && c1.getValue().equals("testing cookie"))
                    {
                        hsl="Browser ini mendukung cookie";
                        break;
                    }
                }
            }
    %>
        <script type="text/javascript">
            alert('<%=hsl%>');
        </script>
    <%
        }
    %>

    <%
        String msg = (String) request.getAttribute("msg");
        if(msg!=null)
        {
    %>
    <script type="text/javascript">
        alert('<%=msg%>');
    </script>
    <%
        }
    %>

</html>

Pada halaman index.jsp terdiri dari 3 menu, menu pertama yaitu Cek browser apakah mendukung cookie atau tidak berfungsi untuk mengecek apakah browser yang digunakan mendukung cookies atau tidak. Cara mengeceknya sebenarnya sederhana, saat user mengklik menu tersebut maka di servlet yang dituju akan membuat sebuah cookie. Lalu saat di-redirect ke halaman index.jsp, disini dilakukan pengambilan cookie. Jika tidak ada cookie yang dibuat di servlet tersebut maka sudah dipastikan browser tidak mendukung cookie. Tampilannya jika menu pertama diklik adalah seperti ini Sekarang buatlah sebuah class CheckCookie tersebut

package com.maniakjava.action;
 
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class CheckCookie extends HttpServlet
{
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws IOException, ServletException
     {
        Cookie cookie = new Cookie("test","testing cookie");
        response.addCookie(cookie);
        request.setAttribute("cek", "cek");
        RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
        rd.forward(request, response);
     }
}

Sekarang coba jalankan menu ketiga terlebih dahulu,
Cookie test adalah cookie yang sudah kita buat di menu pertama, sedangkan cookie kedua dan ketiga merupakan cookie yang dibuat secara otomatis oleh server. Code untuk class menu ketiga adalah seperti ini

package com.maniakjava.action;
 
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class SeeCookie extends HttpServlet
{
 
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws IOException, ServletException
 
     {         
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        Cookie[] allCookie = request.getCookies();
        Cookie[] cookie = new Cookie[allCookie.length];
        
        if(allCookie==null)
        {
            request.setAttribute("msg", "Tidak ada cookie yang tercipta");
            RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
            rd.forward(request, response);
        }
        else
        {
           for(int i=0; i<allCookie.length; i++)
            {
                cookie[i]= allCookie[i];
                out.print("Nama Cookie : " + cookie[i].getName());
                out.print("<br>Nilai Cookie : " + cookie[i].getValue());
                out.println("<br><br>");
            }
        }
 
     }
}

Berikutnya code class untuk menu nomor 2, yaitu buat cookie adalah seperti ini

package com.maniakjava.action;
 
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class CreateCookie extends HttpServlet
{
 
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws IOException, ServletException
 
     {
        Cookie cookie1 = new Cookie("site","maniakjava");
        Cookie cookie2 = new Cookie("name","secret");
        cookie1.setMaxAge(60*60); //valid selama 1 jam
        cookie2.setMaxAge(60*60); //valid selama 1 jam
        response.addCookie(cookie1);
        response.addCookie(cookie2);
        request.setAttribute("msg", "Cookie sudah dibuat");
        RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
        rd.forward(request, response);
     }
}

Sekarang coba jalankan menu kedua, lalu jalankan kembali menu ketiga. Maka 2 cookie dengan nama site dan name akan muncul. Lalu untuk cookie site dan name, saya set masa berlakunya hanya selama 1 jam. Jadi coba saja 1 jam kemudian kalian langsung jalankan menu ketiga, maka cookie site dan name tidak akan muncul lagi.
Secara default, suatu cookie hanya berlaku selama browser belum ditutup. Artinya, ketika browser ditutup maka cookie yang tidak diset MaxAgenya akan dihapus. Nah supaya cookie tetap terdaftar di suatu client meskipun browser sudah ditutup adalah dengan menggunakan method setMaxAge, seperti contoh di atas.

[10] Java Standard Tag Library (JSTL)

JSTL
JSTL adalah singkatan dari Java Standard Tag Library. JSTL adalah seperangkat tag di luar tag standar HTML yang bisa kita gunakan dalam file JSP. Tujuan utama JavaServer Pages Template Library (JSTL) adalah mempermudah kehidupan perancang halaman JSP. Bagi developer, JSTL membantu menciptakan halaman JSP yang rapi, tidak banyak berbaur antara kode HTML dan kode Java, sehingga halaman JSP lebih mudah dimengerti dan dikelola.

Bila kita menggunakan Maven, konfigurasi dependensinya adalah:
groupId : javax.servlet
artifactId : jstl
version : 1.2

Agar JSTL bisa digunakan, kita harus mendeklarasikannya dulu di bagian atas file JSP seperti ini:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JSTL memiliki beberapa tag, yaitu :

Core Tag
Area
Function
Tags
Prefix
Core
Variable support
remove
set
c
Flow control
choose
    when
    otherwise
forEach
forTokens
if
URL management
import
    param
redirect
    param
url
    param
Miscellaneous
catch
out

<%@ taglib prefix="c"
           uri="http://java.sun.com/jsp/jstl/core" %>

Variable Support Tags
Set tag menetapkan nilai variabel EL atau milik variabel EL di salah satu lingkup JSP (halaman, permintaan, sesi, atau aplikasi). Jika variabel tidak sudah ada, itu dibuat.
<c:set var="foo" scope="session" value="..."/>

JSP EL variabel atau properti dapat diatur baik dari nilai atribut:
<c:set var="foo">
     ...
 </c:set>

Flow Control Tags in the Core Tag Library
Untuk melaksanakan aliran kontrol logika, penulis halaman umumnya harus resor untuk menggunakan scriptlets. Sebagai contoh, scriptlet berikut ini digunakan untuk iterate melalui keranjang belanja:
<%
     Iterator i = cart.getItems().iterator();
    while (i.hasNext()) {
        ShoppingCartItem item =
            (ShoppingCartItem)i.next();
        ...
%>
        <tr>
        <td align="right" bgcolor="#ffffff">
         ${item.quantity}
        </td>
        ...
<%
     }
 %>

URL Tags
Oleh karena itu, tag impor adalah sederhana, cara umum untuk mengakses sumber daya berbasis URL, yang isinya kemudian dapat dimasukkan dan atau diolah di dalam halaman JSP. Misalnya, dalam XML Tag Library, impor digunakan untuk membaca dalam dokumen XML yang berisi informasi buku dan menetapkan konten ke xml variabel scoped:
<c:import url="/books.xml" var="xml" />
<x:parse doc="${xml}" var="booklist"
     scope="application" />
Miscellaneous Tags
Tag out mengevaluasi ekspresi dan output hasil evaluasi ke objek JspWriter saat ini. Sintaks dan atribut adalah sebagai berikut:
<c:out value="value" [escapeXml="{true|false}"]
     [default="defaultValue"] />


XML Tag Library

Tag JSTL XML menyediakan cara JSP-sentris menciptakan dan memanipulasi dokumen XML. Berikut ini adalah sintaks untuk memasukkan JSTL XML perpustakaan di JSP Anda.

<%@ taglib prefix="x"
           uri="http://java.sun.com/jsp/jstl/xml" %>

Area
Function
Tags
Prefix
XML
Core
out
parse
set
x
Flow control
choose
    when
    otherwise
forEach
if
Transformation
transform
    param

XML Flow Control Tags
XML flow control tags sejajar dengan yang dijelaskan dalam Flow Control Tags di Core Tag Library untuk aliran data XML.
Halaman JSP tut-install / javaeetutorial5 / contoh / web / bookstore4 / web / buku / bookcatalog.jsp menggunakan tag forEach untuk menampilkan semua buku yang terdapat dalam daftar buku sebagai berikut:
<x:forEach var="book"
     select="$applicationScope:booklist/books/*">
    <tr>
        <c:set var="bookId">
            <x:out select="$book/@id"/>
        </c:set>=
        <td bgcolor="#ffffaa">
             <c:url var="url"
            value="/bookdetails" >
                <c:param name="bookId" value="${bookId}" />
                <c:param name="Clear" value="0" />
            </c:url>
            <a href="${url}">
            <strong><x:out select="$book/title"/>&nbsp;
            </strong></a></td>
         <td bgcolor="#ffffaa" rowspan=2>
             <c:set var="price">
                <x:out select="$book/price"/>
            </c:set>
            <fmt:formatNumber value="${price}" type="currency"/>
             &nbsp;
        </td>
         <td bgcolor="#ffffaa" rowspan=2>
         <c:url var="url" value="/catalog" >
            <c:param name="Add" value="${bookId}" />
        </c:url>
         <p><strong><a href="${url}">&nbsp;
            <fmt:message key="CartAdd"/>&nbsp;</a>
        </td>
    </tr>
     <tr>
         <td bgcolor="#ffffff">
         &nbsp;&nbsp;<fmt:message key="By"/> <em>
            <x:out select="$book/firstname"/>&nbsp;
            <x:out select="$book/surname"/></em></td></tr>
</x:forEach>

Transformation Tags
Tag Transformasi berlaku untuk transformasi, yang ditentukan oleh stylesheet XSLT yang ditetapkan oleh XSLT atribut, untuk dokumen XML, ditentukan oleh doc atribut. Jika atribut doc tidak ditentukan, masukan dokumen XML dibaca dari konten body tag.

Param sub tag dapat digunakan bersama dengan transformasi untuk mengatur parameter transformasi. Atribut nama dan nilai yang digunakan untuk menentukan parameter. Nilai atribut opsional. Jika tidak ditentukan, nilai diambil dari tubuh tag.


Formatting Tags

Tag format JSTL digunakan untuk memformat dan menampilkan teks, tanggal, waktu, dan nomor untuk situs web internasionalisasi.

JSTL menyediakan satu set tag untuk nomor dan tanggal lokal-sensitif parsing dan format.

<%@ taglib prefix="fmt"
           uri="http://java.sun.com/jsp/jstl/fmt" %>

Example :
<jsp:useBean id="now" class="java.util.Date" />
<jsp:setProperty name="now" property="time"
     value="${now.time + 432000000}" />
<fmt:message key="ShipDate"/>
 <fmt:formatDate value="${now}" type="date"
    dateStyle="full"/>.


SQL Tag Library

JSTL Library tag SQL memberikan tag untuk berinteraksi dengan database relasional (RDBMSs) seperti Oracle, mySQL, atau Microsoft SQL Server.

Tag untuk melakukan permintaan query SQL yang mengembalikan hasil set. Untuk query SQL parameter, Anda menggunakan tag param bersarang di dalam tag query.

<%@ taglib prefix="sql"
           uri="http://java.sun.com/jsp/jstl/sql" %>

Example :

<c:set var="bid" value="${param.Add}"/>
<sql:query var="books" >
    select * from PUBLIC.books where id = ?
    <sql:param value="${bid}" />
</sql:query>


Functions Tags

Tag format JSTL digunakan untuk memformat dan menampilkan teks, tanggal, waktu, dan nomor untuk situs web internasionalisasi.

<%@ taglib prefix="fn"
           uri="http://java.sun.com/jsp/jstl/functions" %>

JSTL functions are concerned with string manipulation :

toUpperCase, toLowerCase: Changes the capitalization of a string
substring, substringBefore, substringAfter: Gets a subset of a string
trim: Trims white space from a string
replace: Replaces characters in a string
indexOf, startsWith, endsWith, contains, containsIgnoreCase: Checks whether a string contains another string
split: Splits a string into an array
join: Joins a collection into a string
escapeXml: Escapes XML characters in a string