|
What this is
This file is included in the DevDaily.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn
Java by Example" TM.
Other links
The source code
/**
* Title: PSI Java Framework: UserDialogRequestHandler
* Copyright: PSI-BT AG
* History:
* Date Author What's new
* 16.04.2001 VMentzner Created
*/
package com.psibt.framework.net;
/**
* This class implements a RequestHandler for the path "/userdialog/" in the PluggableHTTPServer.
* A simple input form is presented in the browser where you can enter a message. This message will be sent
* to the PluggableHTTPServer and shown in a JOptionPane MessageDialog.
*
* @author Volker Mentzner
*/
public class UserDialogRequestHandler extends RootRequestHandler {
private Component parentComponent;
/**
* Creates a new UserDialogRequestHandler object
*/
public UserDialogRequestHandler() {
this(null);
}
/**
* Creates a new UserDialogRequestHandler object with a parentComponent reference
*/
public UserDialogRequestHandler(Component parentComponent) {
this.setTitle("user dialog");
this.setDescription("show user dialog");
this.setHandledPath("/userdialog/");
this.parentComponent = parentComponent;
}
/**
* Handles the given request and writes the reply to the given out-stream.
*
* @param request - client browser request
* @param out - Out stream for sending data to client browser
* @return if the request was handled by this handler : true, else : false
*/
public boolean handleRequest(String request, Writer out) {
String path = "";
String query = null;
try {
URL url = new URL("http://localhost"+request);
path = url.getPath();
query = url.getQuery();
if (path.startsWith(this.getHandledPath()) == false) {
return false;
}
out.write("HTTP/1.0 200 OK\r\n");
out.write("Content-type: text/html\r\n\r\n");
out.write(" " + this.getTitle() + "\r\n");
out.write("" + this.getDescription() + "\r\n");
if ((query != null) && (query.length() >= 0)) {
int idx = query.indexOf("=");
String message = query.substring(idx+1, query.length());
// replace '+' by space
message = message.replace('+', ' ');
// replace hex strings starting with '%' by their values
idx = message.indexOf("%");
while (idx >= 0) {
String sl = message.substring(0, idx);
String sm = message.substring(idx+1, idx+3);
String sr = message.substring(idx+3, message.length());
try {
int i = Integer.parseInt(sm, 16);
sm = String.valueOf((char)i);
}
catch (Exception ex) {
sm = "";
}
message = sl + sm + sr;
idx = message.indexOf("%");
}
// show message in a new thread
if ((message != null) && (message.length() > 0)) {
Thread t = new Thread(new DialogThread(parentComponent, message));
t.start();
}
}
out.write(" ");
out.write("\r\n");
out.flush();
return true;
} catch (Exception ex) {
return false;
}
}
/**
* Internal class to start the user dialog in a new thread. This makes the RequestHandler return
* immediatly
*/
class DialogThread implements Runnable {
private Component parentComponent;
private String message;
public DialogThread(Component parentComponent, String message) {
this.parentComponent = parentComponent;
this.message = message;
}
public void run() {
JOptionPane.showMessageDialog(parentComponent, message);
}
}
}
|