代码来自网上。
1.文件处理类 processer.java
1 package webbook.chapter2;
2
3 import java.io.*;
4 import java.net.Socket;
5
6 /**
7 * 处理一个HTTP用户请求的线程类。
8 */
9 public class Processor extends Thread {
10 private PrintStream out;
11 private InputStream input;
12 /** 默认的服务器存放访问内容的目录 */
13 public static final String WEB_ROOT = "/library/webserver/documents";
14
15 public Processor(Socket socket) {
16 try {
17 input = socket.getInputStream();
18 out = new PrintStream(socket.getOutputStream());
19 } catch (IOException e) {
20 e.printStackTrace();
21 }
22 }
23
24 public void run() {
25 try {
26 String fileName = parse(input);
27 readFile(fileName);
28 } catch (IOException e) {
29 e.printStackTrace();
30 }
31 }
32
33 /**
34 * 解析客户机发过的所有HTTP请求,如果是符合HTTP协议内容的, 就分析出客户机所要访问文件的名字,并且返回文件名。
35 */
36 public String parse(InputStream input) throws IOException {
37 BufferedReader in = new BufferedReader(new InputStreamReader(input));
38 String inputContent = in.readLine();
39 if (inputContent == null || inputContent.length() == 0) {
40 sendError(400, "Client invoke error");
41 return null;
42 }
43 // 分析客户请求的HTTP信息,分析出到底想访问哪个文件,
44 // 发过来的HTTP请求应该是三部分。
45
46 String request[] = inputContent.split(" ");
47 if (request.length != 3) {
48 sendError(400, "Client invoke error");
49 return null;
50 }
51 // 第一部分是请求的方法
52 String method = request[0];
53 // 第二部分是请求的文件名
54 String fileName = request[1];
55 // 第三部分是HTTP版本号
56 String httpVersion = request[2];
57 System.out.println("Method: " + method + ", file name: " + fileName + ", HTTP version: " + httpVersion);
58 return fileName;
59 }
60
61 /**
62 * 处理调用一个文件的请求
63 */
64 public void readFile(String fileName) throws IOException {
65 File file = new File(Processor.WEB_ROOT + fileName);
66 if (!file.exists()) {
67 sendError(404, "File Not Found");
68 return;
69 }
70 // 把文件的内容读取到in对象中。
71 InputStream in = new FileInputStream(file);
72 byte content[] = new byte[(int) file.length()];
73 in.read(content);
74 out.println("HTTP/1.0 200 sendFile");
75 out.println("Content-length: " + content.length);
76 out.println();
77 out.write(content);
78 out.flush();
79 out.close();
80 in.close();
81 }
82
83 /**
84 * 发送错误的信息
85 */
86 public void sendError(int errNum, String errMsg) {
87 out.println("HTTP/1.0 " + errNum + " " + errMsg);
88 out.println("Content-type: text/html");
89 out.println();
90 out.println("<html>");
91 out.println("<head><title>Error " + errNum + "--" + errMsg + "</title></head>");
92 out.println("<h1>" + errNum + " " + errMsg + "</h1>");
93 out.println("</html>");
94 out.println();
95 out.flush();
96 out.close();
97 }
98 }
2.webserver.java
1 package webbook.chapter2;
2
3 import java.io.IOException;
4 import java.net.ServerSocket;
5 import java.net.Socket;
6
7 public class WebServer {
8 /** 默认使用的服务器Socket端口号 */
9 public static final int HTTP_PORT = 8080;
10 private ServerSocket serverSocket;
11
12 public void startServer(int port) {
13 try {
14 serverSocket = new ServerSocket(port);
15 System.out.println("Web Server startup on " + port);
16 while (true) {
17 Socket socket = serverSocket.accept();
18 // 通过线程的方式来处理客户的请求
19 new Processor(socket).start();
20 }
21 } catch (IOException e) {
22 e.printStackTrace();
23 }
24 }
25
26 /**
27 * WebServer类的启动方法,可以通过命令行参数指定当前Web服务器所使用的端口号。
28 */
29 public static void main(String[] argv) throws Exception {
30 WebServer server = new WebServer();
31 if (argv.length == 1) {
32 server.startServer(Integer.parseInt(argv[0]));
33 } else {
34 server.startServer(WebServer.HTTP_PORT);
35 }
36 }
37 }
简单webserver 充当的作用就是接受客户端程序发过来的请求,根据请求内容转换的数据找到自己制定路径下的文件,将其文件转为流返回客服端,这个过程所用的协议为http。
分享到:
相关推荐
简单web服务器 java webserver编写
用JAVA写的一个webserver 可以搜索TWITTER
利用Java编写简单的WebService实例
用java语言编写的web server 套接字编程,深入理解http协议及web服务器的实验原理
网络客户端服务器 简单 HTTP Web 客户端和多线程 Web 服务器的... WebServer.java :实现多线程服务器并初始化 serverSocket 以侦听客户端请求。 一旦连接了客户端,处理就会移交给单独的 RequestHandler 线程。 Reque
使用sqlserver2008和java web和servlet实现在线小说网。分前台后台管理。数据库文件。但是没有建库建表的sql语句。导入myEcplise中,或者如果有tomcat服务器,启动服务器就可以运行。
java语言编写的简单web服务器 能够处理浏览器发送过来http请求,并能够回送请求的文件
JavaServer Pages (JSP) 技术提供了一种简单快速的方法来创建显示动态生成内容的 Web 页面。由业界处于领先地位的 Sun 公司制定了相关的 JSP 技术规范,该规范定义了如何在服务器和 JSP 页面间进行交互,还描述了...
本文介绍了以SQLServer为例编写一个简单的数据库连接工具类,把它封装到web项目的(WEB-INF/classes/)目录下,在Java或JSP页面引入就可以实现了。
一个用java写的简单的WEB服务器和浏览器,对于相关的学习者有点帮助,可以初步了理一下整个模型的编写
MeyboMail Web(脉博邮件系统客户端)是由成都脉博软件工作室与easyjf.com(简易java框架)联合开发的基于B/S的邮件系统客户端软件,系统全部使用java编写,Web页面使用easyjf.com的EasyJWeb框架开发,主要通过调用java ...
Java web 技术的基础就是核心 Java 平台,它有许多优点,例如:“编写一次、随处运行”的特性、方便存取数据库的 JDBC API 技术以及能够在 Internet 应用中保护数据的安全模式等等。J2EE 体系结构提供中间层集成...
MeyboMail Web主要配合MeyboMail Server(脉博邮件服务器系统)使用,MeyboMail Server是使用Java编写,可以运行在任何支持Java的服务器系统平台。拥有自主知识产权的邮件服务器系统软件,系统实现了POP3,ESMTP等...
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口,广义...
用java编写的操作系统实验,带线程池的web服务器。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件...
用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示...
java 编写的http服务器 包括 session response处理 request请求处理等,使用接口实现方式条理清晰明白
MeyboMail Web(脉博邮件系统客户端)是由成都脉博软件工作室与(简易java框架)联合开发的基于B/S的邮件系统客户端软件,系统全部使用java编写,Web页面使用的EasyJWeb框架开发,主要通过调用java mail实现邮件的收发。...
MeyboMail Web(脉博邮件系统客户端)是由成都脉博软件工作室与easyjf.com(简易java框架)联合开发的基于B/S的邮件系统客户端软件,系统全部使用java编写,Web页面使用easyjf.com的EasyJWeb框架开发,主要通过调用java ...