bsp;
(2)安装JDK并配置编译环境
安装JDK并设置java路径($(installation_dir)/bin)到系统PATH变量中。
1.4 设计实施
(1)创建服务套接字
//Create server socket
ServerSocket serv = new ServerSocket(SERVER_PORT);
System.out.println(\"HTTP server(port: \" + Integer.toString(SERVER_PORT) + \") running\");
(2)接受客户端请求并创建请求处理线程
while(true)
{
//Accept the client connections
Socket clnt = serv.accept();
//Create thread for each client
HTTPThread HTTPThd = new HTTPThread(clnt, props, ht);
HTTPThd.start();
}
以上代码中,创建了多线程构架的客户端请求处理体系。可以及时处理多客户端连接。
(3)分析请求
客户端处理线程从客户端套接字中读取相应的请求内容,并对请求进行分析。
//Create client socket input stream reader
m_sin = new BufferedReader(new InputStreamReader(_s.getInputStream() ) );
……
//Get the first line of output from client socket
request = m_sin.readLine().trim();
if(request != null)
{
//The method is GET
if(request.startsWith(METHOD_GET) == true)
{
parseGetRequest(request);
}
//The method is POST
else if(request.startsWith(METHOD_POST) == true)
{
params = m_sin.readLine();
//Skip the middle lines of POST request
while( (params != null) && (params.equals(\"\") == false) )
{
params = m_sin.readLine();
}
//The last line contains those parameters
params = m_sin.readLine();
params = params.trim();
parsePostRequest(request, params);
}
//Close client socket input stream and client socket itself
m_sin.close();
m_s.close();
}
通过请求内容的第一行就可以知道请求方式是GET还是POST。如果是GET请求(例如很多CGI都是GET请求),就可以直接从请求字符串中获取请求的资源内容。GET请求的格式为:GET <URL> HTTP/1.X。其中URL为请求的资源内容,而1.X是用于指明客户端所支持的HTTP的版本,当前有1.0和1.1两个标准。 [Page]
如果是POST请求,除了请求的资源内容(例如JSP文件)外,在请求的末行中还包含请求资源将要用到的参数行。所以上述代码中存在掠过中间部分的请求内容,只需要获取资源内容和参数行即可。
(4)请求资源与本地资源的映射
一般出于安全性考虑,HTTP服务器端不可能将本地的资源路径和服务提供的路径相同,而是将本地路径的某一目录映射为HTTP服务资源的根目录,该目录一般称之为服务页根目录(ServerPageDir)。当客户端请求资源映射到本地资源时,必须使用本地被映射的目录替换请求中的根目录。例如HTTP服务器端将本地路径“/usr/paul/paul.home”映射为服务页根目录。那么客户端的请求“/sample.jpg”对应本地的路径资源为“/usr/paul/paul