写下这编文章只是为了让自己不忘记以前学过的知识,下面是基于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 学习资料 复习资料 教学资源
Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 Web服务器的工作原理 ...
基于Java的Web服务器工作原理
通过本实验,使学生能够进一步理解 HTTP 协议的技术细节以及 WEB 服务器的实现原理
Java Web服务器编程原理.pdf 学习资料 复习资料 教学资源
浅谈高职院校Java web课程中web服务器原理教学方法和技巧
浅谈高职院校Java web课程中web服务器原理教学方法和技巧.pdf
目标:采用Socket和多线程技术,实现一个java Web服务器,加深对HTTP的认识。 新建java项目 webServer 新建java文件 WebServer.java Processor.java 一、HTTP协议的作用原理 WWW是以Internet作为...
1.3.1 传统的Web服务器模式开发 6 1.3.2 动态展现页面技术 6 1.3.3 CGI实现页面的动态生成 6 1.3.4 Java Servlet:改进的CGI 7 1.3.5 JSP:Servlet的模板 8 1.3.6 JSP基本原理 9 1.4 本章小结 10 第2章 搭建Java Web...
完整版Java web开发教程PPT课件 Java开发进阶教程 第04章 自定义web服务器(共14页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第06章 SERVLET(共15页).pptx 完整版Java web开发教程PPT课件 Java开发...
1.3.1 传统的Web服务器模式开发 6 1.3.2 动态展现页面技术 6 1.3.3 CGI实现页面的动态生成 6 1.3.4 Java Servlet:改进的CGI 7 1.3.5 JSP:Servlet的模板 8 1.3.6 JSP基本原理 9 1.4 本章小结 10 第2章 搭建Java Web...
《程序员突击——Tomcat原理与Java Web系统开发》源码 作者根据多年的Java Web开发经验,精心编写了本书。按照读者的学习规律,本书在介绍Java技术的基础上,循序渐进地介绍了如何在最新的Tomcat上开发整合各种Java ...
浅析Java_web程序之客户端和服务器端交互原理.doc
本章内容 理解Web服务器的作用 理解浏览器的工作原理 了解HTTP协议 会使用浏览器的开发者工具查看HTTP请求和HTTP响应 了解web应用的部署结构,会在tomcat上部署静态页面 会启动tomcat,知道如何访问部署在tomcat中的...
完整版Java web开发教程PPT课件 Java开发进阶教程 第04章 自定义web服务器(共14页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第06章 SERVLET(共15页).pptx 完整版Java web开发教程PPT课件 Java开发...
Java-web客户端和服务器端交互的原理.doc
1.4 JavaWeb应用的Web服务器Tomcat 1.4.1 Web应用服务工作原理 1.4.2 web应用服务器汇总 1.4.3 获取Tomcat 1.4.4 熟悉Tomcat的五脏六腑 1.5 JavaWeb开发利器之Eclipse 1.5.1 获取Eciipse 1.5.2 运行Eclipse 1.5.3 ...