写下这编文章只是为了让自己不忘记以前学过的知识,下面是基于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服务器原理主要涉及到互联网的核心技术,包括HTTP服务器的工作机制、HTTP协议的特性以及URL和域名的概念。HTTP(Hypertext Transfer Protocol)是互联网上应用最广泛的一种网络协议,它定义了客户端(通常是...
本项目“简单JAVA WEB服务器”旨在提供一个基础的平台,帮助学习者理解Java Web服务器的工作原理,特别是静态网页服务和JSP(Java Server Pages)的执行,以及Cookie的解析。 1. **多线程技术**:Java Web服务器...
Java Web服务器源码是开发者学习和理解Web服务工作原理的重要资源。这个源码实现了一种标准的Web服务器,它遵循了HTTP协议,并且兼容了Java Servlet API,这意味着它能够处理和响应HTTP请求,为Java Web应用程序提供...
在深入探讨基于Java的Web服务器工作原理之前,我们需要理解Web服务器的基本概念和Java技术栈的关键组件。 首先,Web服务器是一种软件,其主要任务是接收来自客户端(如浏览器)的HTTP请求,处理这些请求,然后向...
在本实验中,我们将探索如何在Windows环境下使用Java语言实现一个基本的Web服务器。这个实践项目旨在深化学生对HTTP协议的理解,以及Web服务器的工作机制。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络...
Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 ...
这个项目可能包含了一个简单的HTTP服务器实现,允许用户理解Web服务器的工作原理以及如何用Java进行网络编程。下面将详细解释与这个主题相关的Java Web开发知识。 1. **Java Web基础**: - **Servlet**:Java Web...
总结来说,高职院校教师在进行Java Web课程教学时,应重视Web服务器原理的教学,通过一系列的教学策略和实际操作练习,帮助学生克服入门阶段的困难,为他们后续学习打下坚实基础。同时,教师还应鼓励学生利用网络...
Java Web服务器编程原理主要涉及Java技术中的Servlet技术,这是一种用于创建动态网页的服务器端编程模型。Servlet是由Java语言编写的程序,它们运行在Web服务器上,处理来自客户端(通常是浏览器)的请求,并生成...
根据HTTP协议的作用原理,使用Java实现Web服务器的基本步骤如下: 1. **创建ServerSocket**: - 通过创建`ServerSocket`类的对象并指定监听端口(本例中为8080),来接收来自客户端的连接请求。 - 注意:8080端口...
"tomcat"是Java Web应用服务器,它是Apache Tomcat,一个开源的、实现了Java Servlet和JavaServer Pages规范的服务器,用于运行和部署Java Web应用程序。初学者将在这个项目中学会如何配置和使用Tomcat来运行自己的...
总的来说,教授高职院校Java Web课程中的Web服务器原理,不仅要注重理论知识的传授,更要强调实践操作和问题解决能力的培养。通过有效的教学方法和技巧,激发学生的学习兴趣,为他们未来在Web开发领域打下坚实基础。
在这个项目中,我们不依赖于这些高级框架,而是直接使用Java的Socket编程来构建服务器,这样可以更直观地理解Web服务器的工作原理。 多线程是这个Web服务器的核心特点。在Web服务器中,每个客户端的请求都会创建一...
然而,一个“纯Java写的web服务器”可能不依赖这些成熟的容器,而是直接实现Servlet的逻辑,或者使用其他方式(如函数式编程、微服务框架)来处理动态请求。 在提供的压缩包文件"myserver"中,可能包含了服务器的源...
通过研究这个Java源代码,开发者可以加深对Web服务器工作原理的理解,同时提升Java网络编程技能。对于初学者,这是一个很好的学习项目,而对于有经验的开发者,它也是一个不错的练习平台,可以在此基础上添加更多...
下面,我们将深入探讨如何使用Java创建一个基本的Web服务器,并理解其背后的原理。 ### 1. Java Web服务器的基本结构 在提供的`WebServer.java`代码中,我们首先看到了对Java标准库中`java.io`和`java.net`包的...
Java语言编写的Web服务器是一种基于Java技术实现的服务器软件,用于托管Web应用程序并处理HTTP请求。...通过这个项目,开发者可以深入理解Web服务器的工作原理,并为未来更复杂的Web应用开发打下坚实基础。
在Java编程领域,构建一个简单的Web服务器是一项常见的学习任务,它能帮助开发者理解HTTP协议、网络编程以及服务器端处理请求的基本原理。本源码提供了一个基础的实现,适合初学者研究和学习。下面我们将深入探讨这...