Selasa, 24 Mei 2011

Session Management


Proyek 1 : Session1
Teknik dengan menumpukkan pada view dari aplikasi 

Sebelum kita membuat aplikasi session, terlebih dahulu kita lakukan pembuatan database dengan nama “login”dan tabel dengan nama “users”. Tabel users terdiri dari username dan password. 
  Setelah database di atas dibuat, selanjutnya buatlah file koneksi ke database dengan nama connect.jsp

   <%@page import="javax.smartcardio.CardTerminals.State"%>
   <%@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/login";
   Connection con=DriverManager.getConnection(koneksi,"root","");
   Statement st = con.createStatement();
   ResultSet rs;
%>
Penjelasan:
Dalam pembuatan koneksi ke database terhadap suatu class, kita harus memanggil library-librari, missal: import=”java.sql.*”. Pada intruksi try di buat suatu input-output untuk memastikan koneksi jika terdapat kesalahan maka intruksi catch akan menampilkan output bahwa koneksi tidak ditemukan. Tetapi jika try berhasil maka akan dikoneksikan antara database mysql dengan port 3306 pada localhost web browser.

Kemudian kita buat file index,jsp dan kita setting sessionnya. Untuk membuat designnya kita dapat menggunakan Macromedia DreamWeaver.

<%@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 align="center">
       <tr bgcolor="blue"><td colspan="2" align="center"><b>Signup</b></td></tr>
<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 bgcolor="blue"><td></td><td  align="right"> <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 username='" +username+"' "
                     + "and password='" +password+ "'");
     if (rs !=null){ while (rs.next()){
        session.setAttribute("sessionusername",rs.getString("username"));
        session.setAttribute("sessionpassword",rs.getString("password"));
     response.sendRedirect("main.jsp");}
        } else if (rs==null){
     response.sendRedirect("index.jsp"); } 
%>

Penjelasan:
Didalam file index.jsp ini, kita lakukan pemanggilan file connect.jsp dengan perintah include file. Kemudian kita lakukan pembuatan variabel username dan password, selanjutnya meminta parameter name pada input type. setelah itu, dideklarasikan eksekusi terhadap query database terhadap input typenya, Jika input type username dan password mempunyai nilai maka session dibuat jika username dan password cocok dengan nilai tabel users maka eksekusi dilanjutkan ke main.jsp tapi jika tidak atau kosong maka responnya pada index. 

Kemudian kita lanjut dengan membuat file main.jsp

<%@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="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<%
 if ((String) session.getAttribute("sessionusername") == null
    && (String) session.getAttribute("sessionpassword") == null){
   response.sendRedirect("index.jsp");  }
 else if ((String) session.getAttribute("sessionusername") != null) {
     out.print("Selamat Datang ...");
     out.print("<a href=logout.jsp>Logout</a>");
}
%>
Penjelasan:
Pada file ini kita buat kembali kondisi session, jika ketika login, username dan password kosong atau tidak cocok dengan tabel maka responnya ke index.jsp tetapi jika mempunyai nilai yang sesuai maka akan ditampilkan “Selamat Datang…” dan sebuah link logout.

Setelah itu kita buat juga file logout.jsp agar link logout pada main.jsp dapat difungsikan.

<%@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");
 %>
Penjelasan:
Pada logout.jsp ini session tidak difungsikan, username dan password sebagai atribut session dihapus. Kemudian memberikan respon ke index.jsp


Proyek 2 : Session2
Teknik dengan Model-View-Control


       Langkah awal, kita harus membuat model java didalam package login  yaitu file login.java.

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

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.print("MySQL Connect Example.");
     Connection conn = null;
     String url = "jdbc:mysql://localhost:3306/";
     String dbName = "login";
     String driver = "com.mysql.jdbc.Driver";
     String userName = "root";
     String password = "";   String username = "";
     String userpass = "";   String strQuery = "";
     Statement st = null;
     ResultSet rs = null;

     HttpSession session = request.getSession(true);

try{
   Class.forName(driver).newInstance();
   conn = DriverManager.getConnection(url + dbName, userName, password);
  if (request.getParameter("username") !=null
    && request.getParameter("username")!="" && request.getParameter("password") !=null
    && request.getParameter("password")!=""){
    username = request.getParameter("username").toString();
    userpass = request.getParameter("password").toString();
   strQuery = "select * from users where username ='"+username+"'and password='"+userpass+"'";
    System.out.println(strQuery);
      st = conn.createStatement();    
      rs = st.executeQuery(strQuery);  int count = 0;
    while (rs.next()){  session.setAttribute("username", rs.getString("username"));
      count++;  }
    if (count > 0){ response.sendRedirect("selamatdatang.jsp");
    }else{ response.sendRedirect("index.jsp"); }
    }else{ response.sendRedirect("index.jsp");}
    System.out.println("terkoneksi ke database");
    conn.close();
            System.out.println("terputus dari database database");
        }catch (Exception e){ e.printStackTrace(); }
        }
    }

Penjelasan:
Dalam file ini, kita masukkan beberapa library java, seperti : import java.io.*;, import javax.servlet.*;, import javax.servlet.http.*;, import java.sql.*;. Kemudian class login kita indukkan ke HttpServlet untuk koneksi ke database. Dimana dibuat juga method doPost untuk mengirimkan request dan respons yang kemudian ditujukan pada eksepsi servlet. Respons yang diharapkan berupa text/html, dengan perintah PrintWriter out = response.getWriter();, akan menampilkan keluaran berupa respons yang diambil dari penulisan. Untuk koneksinya, buatlah variable yaitu url,dbName, driver, userName, password, userpass bertipe string serta ResultSet dan Statement. Kemudian buat permintaan session bernilai true dengan variable session. Setelah itu, buat intruksi try terhadap koneksi antara url dan database. Jika permintaan pengambilan parameter variable username dan password kemudian username diubah menjadi string dan userpass akan meminta password untuk menjadi string.
Selanjutnya buatlah strQuery sebagai variabel yang akan dieksekusi dan ditampilkan dalam intruksi ResultSet rs. Kemudian buatlah variable count yang bertipe dan  bernilai 0 untuk difungsikan pada perulangan while. Kemudian dibuat kondisi jika count > 0 maka akan diteruskan ke file selamatdatang.jsp sebagai view dan akan ditampilkan bahwa koneksi berhasil ke database. Tetapi jika tidak maka diteruskan ke index.jsp dan akan ditampilkan bahwa koneksi terputus.

      Kemudian buatlah file LoginBean.java sebagai model java didalam package logbean.

package logbean;
public class LoginBean {
    private String userName="";
    private String password ="";

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }   
}

Penjelasan:
File ini merupakan model yang dihubungkan dengan servlet sebagai kontrolnya. Di class ini kita buat encapsulation terhadap variabel berbentuk private. Untuk itu, lakukan refactor kemudian encapsulate fields maka otomatis akan ditulis class baru dengan fungsi get dan set.

       Kemudian buatlah file view yaitu index.jsp.

<%@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="Content-Type" content="text/html; charset=UTF-8">
<title>::Halaman Login::</title>

<form method="post" action= "Login.jsp">
<table border="0" align="center">
<tr bgcolor="blue">
 <td colspan="2" align="center"><b>Login Authentication</b></td> </tr>
        <tr>
       <td>Login Name</td><td><input type="text" name="username"></td></tr>
<tr>
<td>Password</td><td><input type="password" name="password"></td> </tr>
<tr bgcolor="blue">
<td></td><td align="right"><input type="submit" value="Login"></td></tr>
 </table>
</form>
Penjelasan:
Di dalam file ini berikan aksi pada action ke login.jsp dengan method post. 
  

Selanjutnya buat view yaitu file login.jsp untuk menampung parameter yang diinput user pada interface file index.jsp.

<%@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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>::Halaman Login::</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>
Penjelasan:
Untuk view ini, kita masukan librari lain yaitu import=”java.logbean.*”. bahasa yang digunakan adalah java dan logbean merupakan package. Class yang digunakan koneksi package dan servlet sebagai controller. Property userName dan password diambil dari package logbean, nilainya meminta parameter username dan password kemudian dialihkan ke package login dengan login.java untuk di cocokkan dengan parameter username dan password di database.

Kemudian buatlah view yaitu file selamatdatang.jsp

      <%@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:lpx solid #000000;">
       <%
    if(session.getAttribute("username")!=null && session.getAttribute("username")      !=""){
     String user = session.getAttribute("username").toString();
%>
   <tr><td align="center"><h1><marquee>Selamat Datang<b> <%= user %></b></marquee></h1></td></tr>
   <tr><td align="center"><a href="logout.jsp">Logout</a></td></tr>
   <% }else{
       response.sendRedirect("Login.jsp");    }
     %>
     </table>
    </body>
  </html>
Penjelasan:
Pada file ini, buatlah kondisi session yang menyatakan bahwa jika username mempunyai nilai dan username tidak kosong maka variable user akan memanggil username pada database untuk diubah menjadi string.
<%=user%> merupakan perintah untuk menampilkan variable user yang telah dibuat dan kemudian terdapat sebuah link logout tetapi jika tidak maka responnya dilanjutkan ke login.jsp.

Buatlah file logout.jsp

<%@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 ("sessionpassword ");
session.invalidate();
response.sendRedirect("index.jsp");
%>
Penjelasan:
Pada file ini, buatlah pemusnahan terhadap session untuk username dan password dan session diabaikan. Setelah itu akan dilanjutkan ke file index.jsp. 

Perbandingan Kelebihan dan Kekurangan Teknik Tumpukan dan Model-View-Control


            Perbandingan kedua teknik di atas dapat dilihat dari fungsi dan keamanan terhadap data program. Teknik tumpukan merupakan jenis pemrograman procedural atau terstruktur sehingga teknik ini terlihat lebih mudah. Tetapi dengan menumpuk pada view dalam aplikasinya yaitu model terdapat di file view maka dapat mengakibatkan mudahnya akses variable data dan akses databasenya sehingga akan menyebabkan tidak amannya data program dalam aplikasi tersebut.
Sedangkan pada teknik Model-View-Control, masing-masing model,view dan control dibuat terpisah. Sehingga teknik terdapat hak akses, dimana hanya class itu sendiri yang mengetahui mutlak data programnya. Sebagai contoh variable username dan password di atas yang dibuat dengan tipe data string. Jika class lain akan mengakses variable tersebut maka harus manggunakan fungsi getUsername(),setUsername(),getPassword(),setPassword() tetapi walaupun begitu pengakses itu tidak dapat mengetahui tipe data apa yang digunakan dan apa maksud dari variable tersebut. Oleh karena itulah teknik ini memiliki tingkat keamanan yang tinggi. Ini merupakan teknik encapsulasi dalam bahasa pemrograman berorientasi obyek.

2 komentar: