Rabu, 25 Mei 2011

SESSION MANAGEMENT pada JAVA WEB

Sebelum kita melakukan percobaan, kita ulas kembali apa sih java itu?
Java adalah sebuah teknologi yang diperkenalkan oleh Sun Microsystems pada pertengahan tahun 1990. Menurut definisi dari Sun, Java adalah nama untuk sekumpulan teknologi untuk membuat dan menjalankan perangkat lunak pada komputer standalone ataupun pada lingkungan jaringan. Kita lebih menyukai menyebut Java sebagai sebuah teknologi dibanding hanya sebuah bahasa pemrograman, karena Java lebih lengkap dibanding sebuah bahasa pemrograman konvensional. Teknologi Java memiliki tiga komponen penting, yaitu:
·                                1.Programming-language specification
·                               2.Application-programming interface
·                               3.Virtual-machine specification

Dasar Pemrograman
Java2 adalah generasi kedua dari Java platform (generasi awalnya adalah Java Development Kit). Java berdiri di atas sebuah mesin interpreter yang diberi nama JVM. JVM inilah yang akan membaca bytecode dalam file .class dari suatu program sebagai representasi langsung program yang berisi bahasa mesin. Oleh karena itu, bahasa Java disebut sebagai bahasa pemrograman yang portable karena dapat dijalankan pada berbagai sistem operasi, asalkan pada sistem operasi tersebut terdapat JVM.
Platform Java terdiri dari kumpulan library, JVM, kelas- kelas loader yang dipaket dalam sebuah lingkungan rutin Java, dan sebuah compiler, debuger, dan perangkat lain yang dipaket dalam Java Development Kit (JDK). Java2 adalah generasi yang sekarang sedang berkembang dari platformJava. Agar sebuah program Java dapat dijalankan, maka file dengan ekstensi ''.java'' harus dikompilasi menjadi file bytecode. Untuk menjalankan bytecode tersebut dibutuhkan JRE ( Java Runtime Environment) yang memungkinkan pemakai untuk menjalankan program Java, hanya menjalankan, tidak untuk membuat kode baru lagi. JRE berisi JVM dan libraryJava yang digunakan.
PlatformJava memiliki tiga buah edisi yang berbeda, yaitu J2EE ( Java2 Enterprose Edition), J2ME ( Java2 Micro Edition) dan J2SE ( Java2 Second Edition). J2EE adalah kelompok dari beberapa API ( Application Programming Interface) dari Java dan teknologi selain Java. J2EE sering dianggap sebagai middleware atau teknologi yang berjalan di server, namun sebenarnya J2EE tidak hanya terbatas untuk itu. Faktanya J2EE juga mencakup teknologi yang dapat digunakan di semua lapisan dari sebuah sistem informasi. Implementasi J2EE menyediakan kelas dasar dan API dari Java yang mendukung pengembangan dari rutin standar untuk aplikasi klien maupun server, termasuk aplikasi yang berjalan di web browser. J2SE adalah lingkungan dasar dari Java, sedangkan J2ME merupakan edisi library yang dirancang untuk digunakan pada device tertentu seperti pagers dan mobile phone.
Java merupakan bahasa pemrogrman yang bersifat case sensitive yang berarti penulisan menggunakan huruf besar ataupun huruf kecil pada kode program dapat berarti lain. Misalnya penulisan "System" akan diartikan berbeda dengan "system" oleh interpreter. Java tidak seperti C++, Java tidak mendukung pemrograman prosedural, tapi mendukung pemrograman berorientasi objek sehingga ada sintaks class pada kode programnya.

Dalam belajar Java , kita harus mengetahui konsep pemrograman java (salah satu pemrograman berorientasi objek) yaitu :
1.      Inheritance (Pewarisan)
Pewarisan disini adalah pewarisan atribut  dan method pada sebuah class yang telah terdefinisi. Setiap subclass akan mewarisi state (variable-variabel) dan behavior(method-method) dari superclassnya. Subclass kemudian dapat menambahkan state dan behavior baru yang spesifik dan dapat  pula memodifikasi (override) state dan behavior yang diturunkan oleh superclassnya.

Keuntungan :
·         Subclass : menyediakan state/behaviour yang spesifik yang membedakannya dengan superclass, sehingga memungkinkan programmer java menggunakan ulang source code dari seuperclass yang telah ada.
·         Programmer java dapat mendefinisikan superclass khusus bersifat yang generic , yang disebut abstract class, untuk mendefinisikan class dengan behaviour dan state secara umum.
  
2.      Polimorfisme
 Suatu Objek dapat memiliki banyak bentuk yang berbeda , kemampuan dari suatu variable referensi objek  untuk memiliki aksi berbeda bila method yang sama dipanggil, dimana aksi method tergantung dari tipe objeknya.

3.      Encapsulation (Pembungkusan)
Berfungsi untuk pembungkusan variable dan method dalam sebuah objek untuk melindungi  program dan data yang sedang diolah sehingga memliki hak akses dan tidak dapat diakses sembarangan oleh program lain.

Contoh :  Administartor
                 Password
                      setPassword()


Manfaat :
·         Modularitas : kode sumber dari sebuah objek dapat dikelola secara independen dari kode sumber objek yang lain.
·         Information Hiding : dengan adanya hak akses sebuah variable/method dari objek dapat menyembunyikan informasi yang tidak perlu diketahui objek lain.



 SESSION MANAGEMENT PADA JAVA  

fungsi session pada Java adalah sebagai tempat menyimpan informasi selama browser itu aktif dan session management juga menunjuk kepada semua aspek dari pengaturan user authentikasi dan management of active session.

Untuk lebih jelas kita bisa lihat program authentikasi login user dibawah ini, pada program ini dibuat dengan dua cara yaitu:      
1.      Teknik pemrograman java secara struktural di mana design dan kontrol dijadikan dalam satu file atauteknik.
2.      Pemrograman menggunakan teknik model-view-control dimana teknik ini memisahkan antara design dan kontrol atau teknik dengan  memilah aplikasi menjadi tiga bagian.
Disini saya menggunakan NetBeans 6.9.1
Ayo kita coba.......

 
      1. TEKNIK MENYATUKAN VIEW/DESIGN DAN KONTROL
             
            Satu Hal  yang pasti dalam praktek ini kita harus menggunakan database yang isinya hanya 2 field, pertama user dan kedua password. dalam membuat databasenya menggunakan MysQl Server 5.5
Setelah itu ikuti langkah untuk mengetikkan file2 jsp dan java berikut.
Setelah itu pada NetBeans buat file connect.jsp untuk mengkoneksikannya ke database bagi temen-temen yang belum tahu cara buat filenya, silahkan cari sendiri sederhana koq caranya, dan tuliskan sintaks ini pada file tersebut:
<%--
    Document   : connect
    Created on : 13 Mei 11, 11:26:47
    Author     : AndA
--%>

<%@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">

<%@ page import="java.sql.*"%>
<%
          try{
              Class.forName("com.mysql.jdbc.Driver");
              } catch (ClassNotFoundException e){
                  out.print(e.getMessage());
                  }
          String koneksi = "jdbc:mysql://localhost:3306/session";

              Connection con= DriverManager.getConnection(koneksi, "root", "1234");
          Statement st = con.createStatement();
          ResultSet rs;
 %>


Setelah itu buat file lagi dan beri nama index.jsp dan isikan sintaksnya seperti di bawah ini :

<%--
    Document   : index
    Created on : 13 Mei 11, 10:28:33
    Author     : AndA
--%>

<%@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">

<META HTTP-EQUIV="Refresh" Content="">
      <title>...:::Halaman Login:::...</title>
<form method="post" action="" >
    <table border =0>
           <tr>
           <td>Username</td>
           <td><input type="text" name="username"></td>
</tr>
<tr>
    <td>Password</td>
           <td><input type="password" name="password"></td>
        </tr>

        <tr>
          <td></td>
           <td><input type="submit" value="login"></td>
        </tr>


    </table>
</form>

<%@ include file="connect.jsp" %>
<%
         String username = request.getParameter("username");
         String password = request.getParameter("password");

         if (username==null){
             username="";
             }

          if (password==null){
             password="";
             }


         rs = st.executeQuery("select * from users where user='" + username+"' and password='"+password+"'");
         if (rs !=null){
             while (rs.next()){

                 session.setAttribute("sessionusername", rs.getString("user"));
                 session.setAttribute("sessionPassword", rs.getString("password"));
                 response.sendRedirect("main.jsp");
                 }
             } else if (rs ==null){
                  response.sendRedirect("index.jsp");
                  }
         %>

file index.jsp ini berfungsi untuk menampung parameter yang diinput oleh user beserta seting sessionnya.

Lalu selanjutnya buat file main.jsp sebagai halaman utama dari proses authentifikasi jika berhasil atau session sudah dibuat maka user bisa mengakses halaman ini. Sebaliknya jika tidak? Arahkan ke halaman awal login, yaitu index.jsp

<%--
    Document   : main
    Created on : 13 Mei 11, 11:07:42
    Author     : AndA
--%>

<%@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">

<META HTTP-EQUIV="Refresh" Content="">
<%
    if ((String) session.getAttribute("sessionusername") == null
            && (String) session.getAttribute("sessionpassword") == null ) {
        response.sendRedirect("index.jsp");
    } else if (session.getAttribute("sessionusername") != null) {
        out.print("Selamat Datang...");
        out.print("<a href=logout.jsp>logout</a>");
    }
%>

Selanjutnya buat file untuk menghapus session. Dalam kasus yang sering kita jumpai yaitu logout.jsp.
<%--
    Document   : logout
    Created on : 13 Mei 11, 11:21:04
    Author     : AndA
--%>

<%@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">

<META HTTP-EQUIV="Refresh">
<%
    session.removeAttribute("username");
    session.removeAttribute("password");
    session.invalidate();
    response.sendRedirect("index.jsp");
%>

Seteah itu langsung aja Run Netbeans dan masukan user dan password yang didatabase pada form login.

  1. TEKNIK DENGAN MEMILAH APLIKASI MENJADI TIGA BAGIAN(Model-View-Control)
Cara pembuatan filenya tidak jauh berbeda dengan yang pertama tetapi kali ini kita menggunakan control, dimana control itu dibuat dari servlet pada NetBeans.

Buatlah controller dari aplikasi yang akan kita buat, controller yang akan kita gunakan adalah sebuah servlet dengan nama login.java.

import com.mysql.jdbc.Statement;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


/**
 *
 * @author AndA
 */
public class login extends HttpServlet {

   public void doPost (HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       response.setContentType("text/html");
       PrintWriter out = response.getWriter();
       System.out.println("Contoh koneksi MySQL");
       Connection conn = null;
       String url =  "jdbc:mysql://localhost:3306/";
       String dbname = "session";
       String UserNAME = "root";
       String driver = "com.mysql.jdbc.Driver";
       String pass = "1234";
       String username = "";
       String password = "";
       String strQuery = "";
       Statement st = null;
       ResultSet rs = null;
       HttpSession session = request.getSession(true);
       try{
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url+dbname,UserNAME,pass);
            if(request.getParameter("username")!= null
                    && request.getParameter("username")!="" && request.getParameter("password")!=null
                    && request.getParameter("password")!=""){
            username=request.getParameter("username").toString();
            password=request.getParameter("password").toString();
            strQuery="select * from users where user='"+ username +"' and password='" + password + "'";

            System.out.println(strQuery);
            st= (Statement) conn.createStatement();
            rs=st.executeQuery(strQuery);

            int count=0;
            while(rs.next()){
                session.setAttribute("username", rs.getString("user"));
                count++;
            }
            if(count>0){
                response.sendRedirect("SelamatDatang.jsp");
            }else{
                response.sendRedirect("login.jsp");
            }
            }
            else{
                response.sendRedirect("login.jsp");
                }
            System.out.println("Terkoneksi ke database");

            conn.close();
            
            System.out.println("Terputus Dari database");
        }catch(Exception e){
            e.printStackTrace();
    }
    }
}

Perhatikan kode diatas, pertama seperti biasa kita definisikan dulu koneksi ke database, kemudian ciptakan session dengan keyword.
HttpSession session = request.getSession(true);
hasil dari seleksi data dari database disimpan pada session “username”
session.setAttribute("username", rs.getString("user"));
kemudian buat model dari aplikasi yang akan kita buat. Beri nama dengan LoginBean.java.

package logbean;

/**
 *
 * @author AndA
 */
public class LoginBean {

    String username="";
    String password="";

    public void setusername(String username){
        this.username=username;
    }
    public String getusername(){
        return username;
    }
    public void setpassword(String password){
        this.password=password;
    }
    public String getpassword(){
        return password;
    }

}


Kemudian buat file login.jsp sebagai tampilan

<%--
    Document   : login
    Created on : 20 Mei 11, 9:38:07
    Author     : AndA
--%>

<%@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>LOGIN</title>
    </head>
    <body>
        <form method="post" action="view.jsp">
            <h4 align="center">LOGIN AUTHENTIC</h4>
        <table border="1" align="center">
            <tr>
                <td>Username</td>
                <td>
                    <input type="text" name="username">
                </td>
            </tr>
            <tr>
                <td>Password</td>
                <td>
                    <input type="password" name="password"></td>
            </tr>
            <tr>
                <td colspan="2" align="center"> <input type="submit" value="LOGIN" ></td>
            </tr>
        </table></form>
    </body>
</html>


Kemudian buatlah file view.jsp untuk menampung parameter yang diinput user dari interface di atas berikut untuk forward page ke controller login.

<%--
    Document   : view
    Created on : 13 Mei 11, 15:13:48
    Author     : AndA
--%>

<%@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">

<%@page language="Java" import="java.sql.*" import="java.logbean.*" %>

<html>
    <head>
        <title>Database Search</title>
    </head>
    <body>
        <jsp:useBean id="db" scope="request" class="logbean.LoginBean">
            <jsp:setProperty name="db" property="username" value='<%=request.getParameter("username")%>'/>
            <jsp:setProperty name="db" property="password" value='<%=request.getParameter("password")%>'/>
        </jsp:useBean>
        <jsp:forward page="login">
            <jsp:param name="username" value="<%=db.getusername()%>"/>
            <jsp:param name="password" value="<%=db.getpassword()%>"/>
        </jsp:forward>
           
       
    </body>
</html>

Perhatikan <%=request.getParameter(“username”)%> syntak tersebut sama halnya dengan $_POST[“username”] di php

Buat view selamatdatang.jsp berikut logout.jsp fungsinya hampir sama seperti pada teknik pertama.

<%--
    Document   : SelamatDatang
    Created on : 13 Mei 11, 14:34:05
    Author     : AndA
--%>

<%@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>
        <title>Selamat Datang</title>
    </head>
    <body>
        <br><br><br><br>
        <table align="center" style="border:1px solid #000000;">
            <%
                if (session.getAttribute("username")!= null && session.getAttribute("username")!="" ) {
                    String user = session.getAttribute("username").toString();
            %>
            <tr><td align="center"><h1> Selamat Datang <b><%= user%></b></h1></td></tr>
            <tr><td align="center"><a href="logout.jsp">Logout</a></td></tr>
            <%
                    }else{
                    response.sendRedirect("login.jsp");
                    }
            %>

        </table>
    </body>
</html>

Setelah itu logout.jsp fungsinya juga hampir sama seperti pada teknik pertama.

<%--
    Document   : logout
    Created on : 13 Mei 11, 14:31:15
    Author     : AndA
--%>

<%@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">


<meta http-equiv="Refresh">
<%
    session.removeAttribute("username");
    session.removeAttribute("password");
    session.invalidate();
    response.sendRedirect("login.jsp");
%>


Kekurangan dan Kelebihan Pada kedua Teknik tersebut adalah sebagai berikut :

 1. Teknik Pertama
Jika di lihat dari cara atau langkah pengerjaannya simple atau lebih mudah. Tapi jika di lihat dari keamanannya teknik ini mempunyai efek yang sangat fatal bagi pengguna project tersebut. Seperti si pembuat project  tersebut dengan leluasa menguasai project yang ia kerjakan. Dengan kata lain tidak menutup kemungkinan jika si Pembuat project tersebut mempunyai pikiran yang salah. Ia akan melakukan hal yang tidak di inginkan bagi pengguna project tersebut. Karena Pembuat project mengetahui nama database serta field-fieldnya.  
Sintak yang berbahaya tersebut yaitu pada  indek.jsp yang tulisannya berwarna merah.
Jadi teknik ini TIDAK AMAN karena tidak menggunakan konsep PBO yaitu Encapsulation (Pembungkusan)

  
2. Teknik Kedua
Pada Teknik kedua ini berbeda dengan teknik pertama, di lihat dari cara atau langkah pengerjaannya teknik ini lebih sulit. Karena dalam pembuatannya menerapkan salah satu konsep PBO yaitu  Encapsulation (Pembungkusan). Tapi penggunaan teknik ini lebih efektif dari pada teknik pertama karena teknik kedua keamanan data lebih terjamin atau meminimalisir dari gangguan pihak yang tidak bertanggung jawab. Walaupun membingungkan dalam pembuatannya.

3 komentar:

Dedehbloger mengatakan...

mantap

Dedehbloger mengatakan...

mo share ini juga

Cara Mempercepat Koneksi Internet - Tutorial
Kata - Kata Cinta
49 Day -Drama Korea
Cerpen Motivasi - Nasehat Kehidupan
Cerpen Motivasi - Semua Itu Ada Masanya
Kata - Kata Mutiara Cinta

Riduan mengatakan...

Mantap tutorialnya gan..
Alangkah baiknya, untuk password di encript lgi gan :D

Posting Komentar

 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes