`

Java Web 服务器原理

阅读更多
写下这编文章只是为了让自己不忘记以前学过的知识,下面是基于Socket来完成浏览器的访问,就类似于tomcat(不过tomcat比我功能更全更强大),那下面来看代码:

很简单 先由 HttpServer 来接受浏览器的问访问之后就交给HttpThread类来响应。

package com.zx;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author zhouxiang 
 * @version Feb 21, 2013 10:22:55 AM
 */
public class HttpServer {
	// 默认ROOT文件夹
	public static String ROOT = "./wwwroot";
	// 默认文件的文件名
	public static String defaultPage = "index.html";
	
	public static void main(String[] args) throws IOException {
		ServerSocket server = new ServerSocket(8000);
		while(true){
			// 阻塞,等待浏览器的连接
			Socket socket = server.accept();
			System.out.println("Accept Connection.....\n");
			// 启动服务线程
			new HttpThread(socket).start();
		}
	}
}



HttpThread获取到io流并作出响应
package com.zx;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * @author zhouxiang
 * @version Feb 21, 2013 10:33:52 AM
 */
public class HttpThread extends Thread {

	private Socket socket;

	public HttpThread(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		InputStream inputStream = null;
		OutputStream outputStream = null;
		try {
			inputStream = this.socket.getInputStream();
			outputStream = this.socket.getOutputStream();
			Receiver receiver = new Receiver(inputStream);
			// 取得浏览器发过来的URL请求
			String sURL = receiver.parese();
			if (sURL.equals("/")) {
				sURL = HttpServer.defaultPage;
			}
			Answer ans = new Answer(outputStream);
			ans.send(sURL);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (inputStream != null) {
					inputStream.close();
				}
				if(outputStream != null){
					outputStream.close();
				}
				if(socket != null ){
					socket.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}



Receiver这个类获主要取浏览器访问的地址
package com.zx;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author zhouxiang 
 * @version Feb 21, 2013 10:40:39 AM
 */
public class Receiver {

	InputStream inputStream = null;
	public Receiver(InputStream inputStream) {
		this.inputStream = inputStream;
	}

	/**
	 * 这个方法的目的是将URL请求的文件返回
	 * @return
	 */
	public String parese(){
		StringBuffer receiveStr = new StringBuffer(2048);
		int i = 0;
		byte[] bytes = new byte[2048];
		try {
			//从socket读出数据
			i = inputStream.read(bytes);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			// 读出空数据
			System.out.println("读取流异常......");
			i = -1;
		}
		System.out.println("读取的字节长度:"+""+i);
		for(int j = 0 ; j < i ; j++){
			// 读出数据以字符方式保存到receiveStr
			receiveStr.append((char)bytes[j]);
		}
		return getUri(receiveStr.toString());
	}

	/**
	 * 将收到的HTTP协议数据包分解,取出文件名
	 * @param receiveStr
	 * @return
	 */
	private String getUri(String receiveStr) {
		int index1,index2;
		index1 = receiveStr.indexOf(' ');
		if(index1 != -1){
			index2 = receiveStr.indexOf(' ',index1 + 1);
			if(index2 > index1){
				return receiveStr.substring(index1 + 1, index2);
			}
		}
		return null;
	}

}



Answer这个就是响应类了
package com.zx;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;

/**
 * @author zhouxiang
 * @version Feb 21, 2013 11:54:10 AM
 */
public class Answer {

	OutputStream out = null;

	public Answer(OutputStream outputStream) {
		this.out = outputStream;
	}

	public void send(String pageFile) {
		// TODO Auto-generated method stub
		byte[] bytes = new byte[2048];
		FileInputStream fis = null;
		try {
			File file = new File(HttpServer.ROOT, pageFile);
			if (file.exists()) {
				fis = new FileInputStream(file);
				int ch = fis.read(bytes, 0, 2048);
				String sBody = new String(bytes);
				String sendMessage = "HTTP/1.1 200 OK\r\n"+"Content-Type: text/html\r\n"+"Content-Length: "+ch+"\r\n"+
				"\r\n"+sBody;
				out.write(sendMessage.getBytes());
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(fis != null){
				try {
					fis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

}



代码很简单主要就是了解下,刚学习服务器的同学现在应该不会对服务器有什么距离了吧!
分享到:
评论

相关推荐

    Java Web服务器原理.pdf

    Java Web服务器原理主要涉及到互联网的核心技术,包括HTTP服务器的工作机制、HTTP协议的特性以及URL和域名的概念。HTTP(Hypertext Transfer Protocol)是互联网上应用最广泛的一种网络协议,它定义了客户端(通常是...

    简单JAVA WEB服务器

    本项目“简单JAVA WEB服务器”旨在提供一个基础的平台,帮助学习者理解Java Web服务器的工作原理,特别是静态网页服务和JSP(Java Server Pages)的执行,以及Cookie的解析。 1. **多线程技术**:Java Web服务器...

    java web 服务器 源码

    Java Web服务器源码是开发者学习和理解Web服务工作原理的重要资源。这个源码实现了一种标准的Web服务器,它遵循了HTTP协议,并且兼容了Java Servlet API,这意味着它能够处理和响应HTTP请求,为Java Web应用程序提供...

    基于Java的Web服务器工作原理

    在深入探讨基于Java的Web服务器工作原理之前,我们需要理解Web服务器的基本概念和Java技术栈的关键组件。 首先,Web服务器是一种软件,其主要任务是接收来自客户端(如浏览器)的HTTP请求,处理这些请求,然后向...

    计算机网络实验一 Windows环境下用java实现web服务器

    在本实验中,我们将探索如何在Windows环境下使用Java语言实现一个基本的Web服务器。这个实践项目旨在深化学生对HTTP协议的理解,以及Web服务器的工作机制。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络...

    Web服务器的工作原理

    Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 ...

    Java开发的简单WEB服务器源码Java实用源码整理learns

    这个项目可能包含了一个简单的HTTP服务器实现,允许用户理解Web服务器的工作原理以及如何用Java进行网络编程。下面将详细解释与这个主题相关的Java Web开发知识。 1. **Java Web基础**: - **Servlet**:Java Web...

    浅谈高职院校Java web课程中web服务器原理教学方法和技巧.pdf

    总结来说,高职院校教师在进行Java Web课程教学时,应重视Web服务器原理的教学,通过一系列的教学策略和实际操作练习,帮助学生克服入门阶段的困难,为他们后续学习打下坚实基础。同时,教师还应鼓励学生利用网络...

    Java Web服务器编程原理.pdf

    Java Web服务器编程原理主要涉及Java技术中的Servlet技术,这是一种用于创建动态网页的服务器端编程模型。Servlet是由Java语言编写的程序,它们运行在Web服务器上,处理来自客户端(通常是浏览器)的请求,并生成...

    用java实现Web服务器

    根据HTTP协议的作用原理,使用Java实现Web服务器的基本步骤如下: 1. **创建ServerSocket**: - 通过创建`ServerSocket`类的对象并指定监听端口(本例中为8080),来接收来自客户端的连接请求。 - 注意:8080端口...

    java web项目,适合初学者学习web的原理

    "tomcat"是Java Web应用服务器,它是Apache Tomcat,一个开源的、实现了Java Servlet和JavaServer Pages规范的服务器,用于运行和部署Java Web应用程序。初学者将在这个项目中学会如何配置和使用Tomcat来运行自己的...

    浅谈高职院校Java web课程中web服务器原理教学方法和技巧.zip

    总的来说,教授高职院校Java Web课程中的Web服务器原理,不仅要注重理论知识的传授,更要强调实践操作和问题解决能力的培养。通过有效的教学方法和技巧,激发学生的学习兴趣,为他们未来在Web开发领域打下坚实基础。

    用Java实现Web服务器

    在这个项目中,我们不依赖于这些高级框架,而是直接使用Java的Socket编程来构建服务器,这样可以更直观地理解Web服务器的工作原理。 多线程是这个Web服务器的核心特点。在Web服务器中,每个客户端的请求都会创建一...

    纯java写的web服务器

    然而,一个“纯Java写的web服务器”可能不依赖这些成熟的容器,而是直接实现Servlet的逻辑,或者使用其他方式(如函数式编程、微服务框架)来处理动态请求。 在提供的压缩包文件"myserver"中,可能包含了服务器的源...

    Java开发的简单WEB服务器源码

    通过研究这个Java源代码,开发者可以加深对Web服务器工作原理的理解,同时提升Java网络编程技能。对于初学者,这是一个很好的学习项目,而对于有经验的开发者,它也是一个不错的练习平台,可以在此基础上添加更多...

    用java编写的web服务器

    下面,我们将深入探讨如何使用Java创建一个基本的Web服务器,并理解其背后的原理。 ### 1. Java Web服务器的基本结构 在提供的`WebServer.java`代码中,我们首先看到了对Java标准库中`java.io`和`java.net`包的...

    java语言写的web服务器

    Java语言编写的Web服务器是一种基于Java技术实现的服务器软件,用于托管Web应用程序并处理HTTP请求。...通过这个项目,开发者可以深入理解Web服务器的工作原理,并为未来更复杂的Web应用开发打下坚实基础。

    Java开发的简单WEB服务器源码Java源码

    在Java编程领域,构建一个简单的Web服务器是一项常见的学习任务,它能帮助开发者理解HTTP协议、网络编程以及服务器端处理请求的基本原理。本源码提供了一个基础的实现,适合初学者研究和学习。下面我们将深入探讨这...

Global site tag (gtag.js) - Google Analytics