java服务器实例_简单的javaweb服务器实例
编写使⽤java语⾔实现的Web服务器,主要通过使⽤java socket 编程来实现,使⽤java socket编程不仅可以编写web服务器,还可以编写其他⽹络应⽤。
WebServer.java
package webbook.chapter2;
import java.io.IOException;
import java.ServerSocket;
import java.Socket;
public class WebServer {
/** 默认使⽤的服务器Socket端⼝号 */
public static final int HTTP_PORT = 8080;
private ServerSocket serverSocket;
public void startServer(int port) {
try {
serverSocket = new ServerSocket(port);
System.out.println("Web Server startup on " + port);
while (true) {
Socket socket = serverSocket.accept();
// 通过线程的⽅式来处理客户的请求
new Processor(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* WebServer类的启动⽅法,可以通过命令⾏参数指定当前Web服务器所使⽤的端⼝号。webserver接口开发
*/
public static void main(String[] argv) throws Exception {
WebServer server = new WebServer();
if (argv.length == 1) {
server.startServer(Integer.parseInt(argv[0]));
} else {
server.startServer(WebServer.HTTP_PORT);
}
}
}
Processor.java
package webbook.chapter2;
import java.io.*;
import java.Socket;
/**
* 处理⼀个HTTP⽤户请求的线程类。
*/
public class Processor extends Thread {
private PrintStream out;
private InputStream input;
/** 默认的服务器存放访问内容的⽬录D:\eclipse3.4\workspace03 */
public static final String WEB_ROOT = "d:\\eclipse3.4\\workspace03\\webserver2\\htdocs";
public Processor(Socket socket) {
try {
input = InputStream();
out = new OutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
try {
String fileName = parse(input);
readFile(fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 解析客户机发过的所有HTTP请求,如果是符合HTTP协议内容的, 就分析出客户机所要访问⽂件的名字,并且返回⽂件名。*/
public String parse(InputStream input) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(input));
String inputContent = in.readLine();
if (inputContent == null || inputContent.length() == 0) {
sendError(400, "Client invoke error");
return null;
}
// 分析客户请求的HTTP信息,分析出到底想访问哪个⽂件,
// 发过来的HTTP请求应该是三部分。
String request[] = inputContent.split(" ");
if (request.length != 3) {
sendError(400, "Client invoke error");
return null;
}
// 第⼀部分是请求的⽅法
String method = request[0];
// 第⼆部分是请求的⽂件名
String fileName = request[1];
// 第三部分是HTTP版本号
String httpVersion = request[2];
System.out.println("Method: " + method + ", file name: " + fileName + ", HTTP version: " + httpVersion); return fileName;
}
/**
* 处理调⽤⼀个⽂件的请求
*/
public void readFile(String fileName) throws IOException {
File file = new File(Processor.WEB_ROOT + fileName);
if (!ists()) {
sendError(404, "File Not Found");
return;
}
// 把⽂件的内容读取到in对象中。
InputStream in = new FileInputStream(file);
byte content[] = new byte[(int) file.length()];
out.println("HTTP/1.0 200 sendFile");
out.println("Content-length: " + content.length);
out.println();
out.write(content);
out.flush();
out.close();
in.close();
}
/**
* 发送错误的信息
*/
public void sendError(int errNum, String errMsg) {
out.println("HTTP/1.0 " + errNum + " " + errMsg);
out.println("Content-type:text/html");
out.println();
out.println("");
out.println("");
out.println("
Error " + errNum + "--" + errMsg + "");
out.println("
" + errNum + " " + errMsg + "
");
out.println("");
out.println();
out.flush();
out.close();
System.out.println(errNum+",,,,"+errMsg);
}
}
在“e:\workspace\webserver” ⽬录下建⽴⼀个htdocs⽬录,存放需要被访问的html⽂件等资源。然后运⾏WebServer类,启动这个Web服务器程序,就可以通过浏览器访问这个服务器了。localhost:8080/welcome.html
其实看书还是很重要的,许多细节都在书中有解释。以上例⼦就是在翻看两年前发的书上看到的。初学时不⼀定能看懂,但等过了许久回过头来⼀看原来如此。。。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论