Posted by : efen-fauzi Selasa, 03 Mei 2011

Pada perkuliahan pemrograman Client - Server lalu, saya membuat tugas proyek webserver berbasis java. Cukup susah juga, webserver yang dimaksud itu seperti XAMPP (Apache - MySQL - PHP) di windows. Hal yang cukup rumit adalah ketika webserver dari java ini mampu memparsing beberapa format MIME seperti format multimedia jpg, gif, png dan lainnya. Nah daripada saya sendiri bingung maka saya share sja proyeknya dan tentunya harapan agar para pembaca mampu mengembangkannya lebih baik. berikut source code nya :

Source code


SimpleJavaWebServer.java :



package SimpleJavaWebServer;

import java.io.*;
import java.net.*;
import java.util.*;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @Nama_Proyek : UTS Pemrograman Client Server
* @author Fendi Dwi Fauzi
* @Nim : 075314067
*/
public class SimpleJavaWebServer extends Thread{
private ServerSocket serverSocket= null;
private SimpleWebServerGUI logRespon;
private Thread thread;

/**
* @return the messageRespon
*/

public SimpleJavaWebServer(){
this.start();
}



public SimpleJavaWebServer(SimpleWebServerGUI logResponMessage){
this.logRespon=logResponMessage;
}

@Override
public void start(){
thread = new Thread(this);
thread.start();
}

@Override
public void run(){
System.out.println("Waiting for connection");
serverSocket = null;
try {
// create the main server socket
serverSocket = new ServerSocket(80);
System.out.println("Starting Web Service in Port : 80");
this.logRespon.getTextArea().setText(this.logRespon.getTextArea().getText()+"Starting Webserver in Port : "+serverSocket.getLocalPort()+"\nWaiting Connection ....\n");
} catch ( Exception e ) {
System.out.println("Error connection Interupted: " + e );
}
while (true) {
try {

//this call waits/blocks until someone connects to the port
Socket connectionsocket = serverSocket.accept();
System.out.println("Service Active in Port: "+serverSocket.getLocalPort());
this.logRespon.getTextArea().setText(this.logRespon.getTextArea().getText()+"\n\nWeb Server is Active in Port : "+serverSocket.getLocalPort()+"\n");

//Read the http request from the client from the socket interface
BufferedReader in=new BufferedReader(new InputStreamReader(connectionsocket.getInputStream()));
PrintStream out=new PrintStream(new BufferedOutputStream(connectionsocket.getOutputStream()));

System.out.println("\nRequest from IP : " +connectionsocket.getInetAddress()+ " in Port: "+connectionsocket.getPort());
this.logRespon.getTextArea().setText(this.logRespon.getTextArea().getText()+"Request from IP : "+connectionsocket.getInetAddress()+ " in Port : "+connectionsocket.getPort()+"\n");

// Read filename from first input line "GET /filename.html ..."
String s=in.readLine();
System.out.println("Request : "+s+"\n"); // Log the request
this.logRespon.getTextArea().setText(this.logRespon.getTextArea().getText()+"Request : "+s);


String filename="";
StringTokenizer st=new StringTokenizer(s);
try {

// Parse the filename from the GET command
if (st.hasMoreElements() && st.nextToken().equalsIgnoreCase("GET")
&& st.hasMoreElements())
filename=st.nextToken();
else
throw new FileNotFoundException(); // Bad request

// Append trailing "/" with "index.html"
if (filename.endsWith("/"))
filename+=("index.html");

// Remove leading "/" from filename
while (filename.indexOf("/")==0)
filename=filename.substring(1);

// Open the file (may throw FileNotFoundException)
InputStream file=new FileInputStream(filename);

// Determine the MIME type and print HTTP header
String mimeType="text/plain";
if (filename.endsWith(".html") || filename.endsWith(".htm")||filename.endsWith(".css"))
mimeType="text/html";
else if (filename.endsWith(".jpg") || filename.endsWith(".jpeg"))
mimeType="image/jpeg";
else if (filename.endsWith(".gif"))
mimeType="image/gif";
out.print("HTTP/1.0 200 OK\r\n"+
"Content-type: "+mimeType+"\r\n\r\n");

// Send file contents to client, then close the connection
byte[] a=new byte[65536];
int n;
while ((n=file.read(a))>0)
out.write(a, 0, n);
out.close();
}
catch (FileNotFoundException x) {
out.println("HTTP/1.0 404 Not Found\r\n"+
"Content-type: text/html\r\n\r\n"+
""+filename+" not found\n");
out.close();
}
}
catch (IOException x) {
System.out.println(x);
}
}}
public static void main (String args[]){
SimpleJavaWebServer test = new SimpleJavaWebServer();
test.start();
}
}





Proyek yang saya buat membutuhkan GUI untuk control panel menjalankan servernya
Nah GUI nya seperti ini :



SimpleWebServerGUI:



package SimpleJavaWebServer;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;


/**
*
* @Nama_Proyek : UTS Pemrograman Client Server
* @author Fendi Dwi Fauzi
* @Nim : 075314067
*/
public class SimpleWebServerGUI extends javax.swing.JFrame {
private String fileName;

/** Creates new form SimpleWebServerGUI */
public SimpleWebServerGUI() {
super("Simple JavaWebServer");
initComponents();
new SimpleJavaWebServer(this);
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// //GEN-BEGIN:initComponents
private void initComponents() {

jMenuBar2 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenu2 = new javax.swing.JMenu();
jScrollPane1 = new javax.swing.JScrollPane();
textArea = new javax.swing.JTextArea();
save = new javax.swing.JButton();
logLabel = new javax.swing.JLabel();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu3 = new javax.swing.JMenu();
start = new javax.swing.JMenuItem();
exit = new javax.swing.JMenuItem();

jMenu1.setText("File");
jMenuBar2.add(jMenu1);

jMenu2.setText("Edit");
jMenuBar2.add(jMenu2);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

textArea.setColumns(20);
textArea.setRows(5);
jScrollPane1.setViewportView(textArea);
textArea.setEditable(false);

save.setText("Save Logs");
save.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveActionPerformed(evt);
}
});

logLabel.setText("Log Request");

jMenu3.setText("File");

start.setText("Start");
start.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
startActionPerformed(evt);
}
});
jMenu3.add(start);

exit.setText("Exit and Stop");
exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitActionPerformed(evt);
}
});
jMenu3.add(exit);

jMenuBar1.add(jMenu3);

setJMenuBar(jMenuBar1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 412, Short.MAX_VALUE)
.addComponent(logLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(save, javax.swing.GroupLayout.Alignment.TRAILING))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(logLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 183, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(save)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

pack();
}//
//GEN-END:initComponents

private void saveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveActionPerformed
// TODO add your handling code here:
JFileChooser chooser;
File file, directory;
int status;

chooser = new JFileChooser("%My Documents%");
chooser.setFileFilter(new FileNameExtensionFilter("Text Document", "txt","doc"));
status = chooser.showSaveDialog(null);

if (status == JFileChooser.APPROVE_OPTION) {
fileName = chooser.getSelectedFile().getPath();
File outFile = new File(fileName);
try {
FileWriter out = new FileWriter(outFile);
String test=textArea.getText();
out.write(test);
out.close();
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
} else {
JOptionPane.showMessageDialog(null, "Save File dialog canceled");
}

}//GEN-LAST:event_saveActionPerformed

private void startActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startActionPerformed
// TODO add your handling code here:
SimpleJavaWebServer startAction = new SimpleJavaWebServer(this);
startAction.start();
}//GEN-LAST:event_startActionPerformed

private void exitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitActionPerformed
// TODO add your handling code here:
System.exit(1);
}//GEN-LAST:event_exitActionPerformed

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
SimpleWebServerGUI frame = new SimpleWebServerGUI();
frame.setVisible(true);
frame.setResizable(false);


}

// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JMenuItem exit;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenu jMenu3;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuBar jMenuBar2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel logLabel;
private javax.swing.JButton save;
private javax.swing.JMenuItem start;
private javax.swing.JTextArea textArea;
// End of variables declaration//GEN-END:variables
private String teks;
/**
* @return the textArea
*/
public javax.swing.JTextArea getTextArea() {
return textArea;
}

/**
* @param textArea the textArea to set
*/
public void setTextArea(javax.swing.JTextArea textArea) {
this.textArea = textArea;
}
}





Nah demikian, jika ingin proyek lengkapnya silahkan download aja disni. Untuk menjalankan webpage, buatlah web/html kemudian taruh ke folder proyeknya. Selanjutnya panggil localhost port 80 melalui web browsermu.. okeh.. met mencoba dan sukses....


Leave a Reply

Subscribe to Posts | Subscribe to Comments

Welcome to My Blog

Popular Post

- Copyright ©
efen's blog -Robotic Notes- Powered by Blogger - Designed by Johanes Djogan -