May 2, 2009 thumb Webserver In Java

web server, merupakan sebuah software yang berfungsi untuk melayani request dari client-client sebuah website, selain itu web server juga harus bisa memberikan output request sesuai keinginan user, hal ini tentu akan sangat kompleks dan rumit mengingat fungsi web server sekaligus sebagai database server. tapi, untuk kali ini kita akan membuat sebuah web server sederhana yang hanya bisa memproses sebuah passing satu variabel saja serta mampu melakukan response post and get. dan bahasa yang akan kita pakai adalah java……
yap untuk itu siapkan netBean (bisa juga pakai Jcreator, tapi harus setting sintax import dan paket sendiri), pertama buat sebuah project dari netbean, beri nama terserah (kalo punyaku kuberika nama “paketku”). otomatis netbean akan membuat sebuah file main dalam project tersebut. pindahkan Source code berikut pada file main anda :
package paketku; //sesuaikan dengan nama project  teman-teman
public class Main {

  public static void main(String[] args) {
  Server s = new Server();
  s.start();
  }
}

kemudian buat sebuah file baru berextensi .java beri nama Server.java dan pindahkan source code berikut pada file Server.java : 

package paketku;
//seuaikan dengan nama project  antum…
import java.net.*;
import java.io.*;
import java.util.StringTokenizer;

public class Server extends Thread{
 public static final int port=1200; //port yang digunakan, defaultnya 8080
  final static String CRLF = “\r\n”;
  @Override
 public void run(){
while(true)
  this.terima();
 }
 
  public void terima(){
  try{
   
  System.out.println(“Menunggu Request “);
  ServerSocket server = new ServerSocket(port);
  Socket cleantsoket = server.accept();
  BufferedReader inStream = new BufferedReader(new InputStreamReader(cleantsoket.getInputStream()));
  PrintWriter outStream = new PrintWriter(cleantsoket.getOutputStream(),true);
  String data = inStream.readLine();
  System.out.println(“Data Dari client : ( “+data+” )”);
  System.out.println(“Mengirim String Diterima ke client”);
    StringTokenizer tokens = new StringTokenizer(data);
  tokens.nextToken();
// membuang tulisan “GET”
  String fileName = tokens.nextToken();

/*ini fungsinya kalau kita memanggil dari browser localhost:1200/ saja maka yang terjadi adalah web server menririmkan default webnya…isinya ada di String baru, itulah yang dikirimkan ke client, 1200 adalah port yang kita gunakan, jika tidak ditulis defult menggunakan 8080*/
  if(fileName.equals(“/”)){
  String baru=”” +
  “INDEX” +
  “” +
  “<a href='localhost:1200/index.php'
>POST</a></br>” +
  “<a href='
localhost:1200/index.php?var=aku‘>GET” +
  “” +
  “”;
  outStream.println(baru);
  return;
  }
/*lalu bagaimana kalau user menginputkan localhost:1200/index.php
maka kita kirimkan isi file index.htmml yang mana file ini disimpan di /home/huda/Documents/index.html, dan seperti halnya php, jika ada sebuah string berformat $… kita ganti sengan proses web server…alias kita ganti dengan isi vaariabel string itu (untuk methode get, sedang post kita tampilkan apa adanya..)*/
  StringTokenizer tokens_post = new StringTokenizer(fileName);
  fileName=tokens_post.nextToken(“?”);
//dapatkan nama file
  String variabel_nama=””;
//dapat varabel
  String variabel_isi=””;
//dapat isi variabel
  if(tokens_post.hasMoreElements()){
  StringTokenizer split = new StringTokenizer(tokens_post.nextToken(“?”));
  variabel_nama=split.nextToken(“=”);
  variabel_isi=split.nextToken(“=”);
  }
  boolean fileExists = true;
  try {
  String hasil=””;
  String temp=””;

/*ini dia yang paling penting. karena harus ada sebuah file apapun itu..karena aku pakai
linux jadi aku tarus sebuah file di directory /home/huda/Documents kalo
teman-teman pakai windows taruh aja di C:/ ato apa, trus filenya harus berformat .html
pokoknya apa saja deh…*/
  fileName = “/home/huda/Documents” + fileName;
  BufferedReader inputan = new BufferedReader( new FileReader(fileName));
  while(inputan.ready()){
  temp=inputan.readLine();
  if(temp.equals(“$”+variabel_nama)){
  temp=variabel_isi;
  }
  hasil=hasil+temp;
  }
  outStream.println(hasil);
  } catch (FileNotFoundException e) {
  fileExists = false;
  }
/*bagaimana kalau user menginput localhost:1200/bejo.html, padahal bejo.html tidak ada
maka kita tampilkan html default dalam hal ini adalah penyataan not found.*/
  if (!fileExists) {
  String entityBody = “” + 
  “Not Found” +
  “Not Found
“;
  outStream.println(entityBody);
  }
   
   
  }catch(Exception p){
  p.printStackTrace();
  }

   
  }

   
  private static void sendBytes(FileInputStream fis, OutputStream os) throws Exception{
   
  byte[] buffer = new byte[1024];
  int bytes = 0;

  while((bytes = fis.read(buffer)) != -1 ) {
  os.write(buffer, 0, bytes);
  }
  }
  private static String contentType(String fileName){
  if(fileName.endsWith(“.htm”) || fileName.endsWith(“.html”)) {
  return “text/html”;
  }
  return “application/octet-stream”;
  }
}

berikut ini adalah file defult bernama index.php inilah file yang dipanggil secara get atau post : 
 
  INDEXKU
 
 
Ini dari Localhost Java….
isinya var = 
$var

disini terdapat variabel $var yang akan berubah menjadi jika dipanggil secara getdan tetap ditampikan apa adanya jika dipanggil secara post…
OK saat percobaan…jalankan dengan klik run…
hasil tampilan :
tampilan ketika di browser ditulis localhost:1200/ akan menghasilkan tampilan pertama
jika “get” di browser dari tampilan diklik atau browser ditulis address localhost:1200/index.php?var=aku mala akan menghasilkan tampilan yang kedua disini $var diganti dengan tulisan “aku”
jika “post” di browser dari tampilan pertama di klik akan menghasilkan tampilan yang ketiga ini juga bisa jika address ditulis localhost:1200/index.php tampak perbedaanya disini $var ditulis apa adanya…
jika kita memasukan file yang tidak ada akan menghasilkan tampilan ke empat..atau bisa juga ditulis di browser localhost:1200/bejo.html atau apalah.html akan menghasilkan yang not found…karena file itu tak pernah ada…
begitulah web server yang kita buat..simple dan mampu menimplementasikan php walaupun masih sangat-sangat sederhana…selamat mencoba…dan kembangkan terus…

Comments

total comments