首先先介绍一下HTML的文本解析代码:
package project.util;


/** *//**
* This class is used for parsing the string that contains
* HTML elements, especially hyperlinks.</br>
* It contains a developer-defined syntax to allow the user
* to make a customized hyperlink.
*
* @author Zenny Chen
*
*/


public class HTMLParser ...{
// HTML elements for output
private static final String begin_enter = "<br>";
private static final String end_enter = "</br>";
private static final String begin_hyperlink = "<a href=";
private static final String end_href = ">";
private static final String end_hyperlink = "</a>";
// some interpunctions
private static final char char_enter = ' ';
private static final char quotation_mark = '"';
// hyperlink types to parse
private static final String notes_link = "notes://";
private static final String http_link = "http://";
// customized format
private static final String link_ref = "@link=";
private static final String link_name = "@name=";
private int cursor = 0;
private int content_length = 0;
private char[] src = null;
private char[] dest = null;
private final int mark_length = 5;

/** *//**
* [0] stores href value initial position</br>
* [1] stores href value eventual position</br>
* [2] stores link name initial position</br>
* [3] stores link name eventual position</br>
* [4] stores next continuing position
*/
private int[] position_marks = new int[mark_length];

public HTMLParser() ...{
}

/** *//**
* It is the only method that user will use in this class.
* @param ref the raw string that user inputs
* @return a hyperlink formatted string
*/

public String getHTMLFormString(String ref) ...{
src = ref.toCharArray();
content_length = ref.length();
final int length = (content_length << 2) + 128;
dest = new char[length];
boolean has_enter_mark = false;

for(int i=0; i<content_length;) ...{

if(isHyperlink(notes_link, i) || isHyperlink(http_link, i)) ...{
writeString(begin_hyperlink.toCharArray(), begin_hyperlink.length());
dest[cursor++] = quotation_mark;
int len = getLengthTillSpace(i);
int k = i;
for(int j=0; j<len; j++)
dest[cursor++] = src[k++];
dest[cursor++] = quotation_mark;
writeString(end_href.toCharArray(), end_href.length());
for(int j=0; j<len; j++)
dest[cursor++] = src[i++];
writeString(end_hyperlink.toCharArray(), end_hyperlink.length());
}

else if(isConfiguredHyperlink(i)) ...{
writeString(begin_hyperlink.toCharArray(), begin_hyperlink.length());
dest[cursor++] = quotation_mark;
for(int j=position_marks[0]; j<=position_marks[1]; j++)
dest[cursor++] = src[j];
dest[cursor++] = quotation_mark;
writeString(end_href.toCharArray(), end_href.length());
for(int j=position_marks[2]; j<=position_marks[3]; j++)
dest[cursor++] = src[j];
writeString(end_hyperlink.toCharArray(), end_hyperlink.length());
i = position_marks[4];
continue;
}

else if(src[i] == char_enter) ...{
i++;
if(has_enter_mark)
writeString(end_enter.toCharArray(), end_enter.length());
has_enter_mark = true;
writeString(begin_enter.toCharArray(), begin_enter.length());
}
else
dest[cursor++] = src[i++];
}
if(has_enter_mark)
writeString(end_enter.toCharArray(), end_enter.length());
String r = new String(dest, 0, cursor);
return r;
}

/** *//**
* Check if the string is a specified hyperlink defined in this class.
* @param link the string that'll be checked
* @param initpos the initial position of the string to check
* @return a boolean value
*/

private boolean isHyperlink(final String link, int initpos) ...{
char[] ch = link.toCharArray();
char[] cap = link.toUpperCase().toCharArray();
final int len = link.length();
int i = initpos;

for(int j=0; j<len; j++, i++) ...{
if(i == content_length)
return false;
if(src[i] != ch[j] && src[i] != cap[j])
return false;
}
return true;
}

/** *//**
* Determine if the string(&src[initpos])is a customized hyperlink
* format.</br>
* The form is: "{@link=xxx @name=xxx}"
* @param initpos
* @return a boolean value
*/

private boolean isConfiguredHyperlink(int initpos) ...{
int i = initpos;
boolean phase_ok = false;
// phase 1

if(src[i++] == '{') ...{
// phase 2
int len = content_length - i;

for(int j=0; j<len; j++, i++) ...{
if(src[i] == ' ')
continue;

else if(src[i] == '@') ...{
phase_ok = true;
break;
}
else
return false;
}
// phase 3
if(!phase_ok)
return false;
phase_ok = false;

if(isHyperlink(link_ref, i)) ...{
i += link_ref.length();
position_marks[0] = i;
}
else
return false;
len = content_length - i;

for(int j=0; j<len; j++, i++) ...{

if(src[i] == ' ') ...{
position_marks[1] = i - 1;
phase_ok = true;
break;
}
else if(src[i] == char_enter)
return false;
}
if(!phase_ok)
return false;
while(src[++i] == ' ');
// phase 4
if(src[i] != '@')
return false;
if(!isHyperlink(link_name, i))
return false;
i += link_name.length();
position_marks[2] = i;
len = content_length - i;

for(int j=0; j<len; j++, i++) ...{

if(src[i] == '}') ...{
position_marks[3] = i - 1;
position_marks[4] = i + 1;
return true;
}
if(src[i] == char_enter)
return false;
}
}
return false;
}

/** *//**
* check if a character is a space symbol
* @param c a character that'll be judged
* @return a boolean value
*/

private boolean isSpace(char c) ...{
return c == ' ' || c == char_enter || c == ' ';
}

/** *//**
* write the string to dest[] buffer
* @param ch the source
* @param size the length of the string to be output to the destination
*/

private void writeString(char[] ch, int size) ...{

for(int i=0; i<size; i++) ...{
dest[cursor++] = ch[i];
}
}

/** *//**
* Get the length of the string from initpos to a space symbol
* @param initpos the initial position of the src[] CharArray
* @return the length
*/

private int getLengthTillSpace(int initpos) ...{
int i;

for(i=initpos; i<content_length; i++) ...{
if(isSpace(src[i]))
break;
}
return i - initpos;
}
}

然后在你需要启动服务器端的地方插入下面代码:
HTMLParser parser = new HTMLParser();
intro_contents = parser.getHTMLFormString(yourstring);
serverFactory = new ServerFactory(intro_contents);
serverFactory.beginCommunication(true);
如果是想启动两个服务器线程以至于可以在下一个页面中让两个applet可以同时运行,则可以这么做:
HTMLParser parser = new HTMLParser();
String value = parser.getHTMLFormString(yourstring);
serverFactory = new ServerFactory(value);
serverFactory.beginCommunication(true);

String value2 = parser.getHTMLFormString(yourstring2);
ServerFactory serverFactory2 = new ServerFactory(value2);
serverFactory2.beginCommunication(false);