public class Webserver
extends java.lang.Object
This enables a Java program to instrument class files loaded by web browsers for applets. Since the (standard) security manager does not allow an applet to create and use a class loader, instrumenting class files must be done by this web server.
Note: although this class is included in the Javassist API, it is provided as a sample implementation of the web server using Javassist. Especially, there might be security flaws in this server. Please use this with YOUR OWN RISK.
| Modifier and Type | Field and Description |
|---|---|
private ClassPool |
classPool |
java.lang.String |
debugDir
If this field is not null, the class files taken from
ClassPool are written out under the directory
specified by this field. |
private static byte[] |
endofline |
java.lang.String |
htmlfileBase
The top directory of html (and .gif, .class, ...) files.
|
private java.net.ServerSocket |
socket |
protected Translator |
translator |
private static int |
typeClass |
private static int |
typeGif |
private static int |
typeHtml |
private static int |
typeJpeg |
private static int |
typeText |
| Constructor and Description |
|---|
Webserver(int port)
Constructs a web server.
|
Webserver(java.lang.String port)
Constructs a web server.
|
| Modifier and Type | Method and Description |
|---|---|
void |
addTranslator(ClassPool cp,
Translator t)
Adds a translator, which is called whenever a client requests
a class file.
|
private void |
checkFilename(java.lang.String filename,
int len) |
void |
doReply(java.io.InputStream in,
java.io.OutputStream out,
java.lang.String cmd)
Proceses a HTTP request from a client.
|
void |
end()
Closes the socket.
|
private boolean |
letUsersSendClassfile(java.io.OutputStream out,
java.lang.String filename,
int length) |
void |
logging(java.lang.String msg)
Prints a log message.
|
void |
logging(java.lang.String msg1,
java.lang.String msg2)
Prints a log message.
|
void |
logging(java.lang.String msg1,
java.lang.String msg2,
java.lang.String msg3)
Prints a log message.
|
void |
logging2(java.lang.String msg)
Prints a log message with indentation.
|
static void |
main(java.lang.String[] args)
Starts a web server.
|
(package private) void |
process(java.net.Socket clnt) |
private java.lang.String |
readLine(java.io.InputStream in) |
private void |
replyError(java.io.OutputStream out,
BadHttpRequest e) |
void |
run()
Begins the HTTP service.
|
private void |
sendHeader(java.io.OutputStream out,
long dataLength,
int filetype) |
void |
setClassPool(ClassPool loader)
Requests the web server to use the specified
ClassPool object for obtaining a class file. |
private int |
skipLine(java.io.InputStream in) |
private java.net.ServerSocket socket
private ClassPool classPool
protected Translator translator
private static final byte[] endofline
private static final int typeHtml
private static final int typeClass
private static final int typeGif
private static final int typeJpeg
private static final int typeText
public java.lang.String debugDir
ClassPool are written out under the directory
specified by this field. The directory name must not end
with a directory separator.public java.lang.String htmlfileBase
If the given URL indicates a class file and the class file
is not found under the directory specified by this variable,
then Class.getResourceAsStream() is called
for searching the Java class paths.
public Webserver(java.lang.String port)
throws java.io.IOException
port - port numberjava.io.IOExceptionpublic Webserver(int port)
throws java.io.IOException
port - port numberjava.io.IOExceptionpublic static void main(java.lang.String[] args)
throws java.io.IOException
java.io.IOExceptionpublic void setClassPool(ClassPool loader)
ClassPool object for obtaining a class file.public void addTranslator(ClassPool cp, Translator t) throws NotFoundException, CannotCompileException
cp - the ClassPool object for obtaining
a class file.t - a translator.NotFoundExceptionCannotCompileExceptionpublic void end()
throws java.io.IOException
java.io.IOExceptionpublic void logging(java.lang.String msg)
public void logging(java.lang.String msg1,
java.lang.String msg2)
public void logging(java.lang.String msg1,
java.lang.String msg2,
java.lang.String msg3)
public void logging2(java.lang.String msg)
public void run()
final void process(java.net.Socket clnt)
throws java.io.IOException
java.io.IOExceptionprivate java.lang.String readLine(java.io.InputStream in)
throws java.io.IOException
java.io.IOExceptionprivate int skipLine(java.io.InputStream in)
throws java.io.IOException
java.io.IOExceptionpublic void doReply(java.io.InputStream in,
java.io.OutputStream out,
java.lang.String cmd)
throws java.io.IOException,
BadHttpRequest
out - the output stream to a clientcmd - the command received from a clientjava.io.IOExceptionBadHttpRequestprivate void checkFilename(java.lang.String filename,
int len)
throws BadHttpRequest
BadHttpRequestprivate boolean letUsersSendClassfile(java.io.OutputStream out,
java.lang.String filename,
int length)
throws java.io.IOException,
BadHttpRequest
java.io.IOExceptionBadHttpRequestprivate void sendHeader(java.io.OutputStream out,
long dataLength,
int filetype)
throws java.io.IOException
java.io.IOExceptionprivate void replyError(java.io.OutputStream out,
BadHttpRequest e)
throws java.io.IOException
java.io.IOException