`
befairy
  • 浏览: 36328 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java网络编程实现web服务器

阅读更多
package number;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.lang.Thread;

import java.util.StringTokenizer;

public class TCPServer {

	public static void main(String[] args) {
		int port;
		ServerSocket ss;
		try{
		   port=Integer.parseInt(args[0]);
		}catch(Exception e){
			port=8080;
		}
        
		try{
			//监听服务器端口,等待连接请求
            ss=new ServerSocket(port);
            System.out.println("TCPServer running on port:"+ss.getLocalPort());
          //显示启动信息
            while(true){
            	Socket socket=ss.accept();
            	System.out.println("New connection accepted"+socket.getInetAddress()+":"+socket.getPort());
            	//创建分线程
                 try{
                	 httpRequestHandle request=new httpRequestHandle(socket);
                	 Thread thread = new Thread(request);
                	 //启动线程
                	 thread.start();
                 }catch(Exception e){
                	 System.out.println(e);
                 }
                 
            }
		}catch(Exception e){
			System.out.println(e);
		}
	}

}

 class httpRequestHandle implements Runnable {

	final static String CRLF="\r\n";
	Socket socket;
	InputStream input;
	OutputStream output;
	BufferedReader br;
	//构造方法
	public httpRequestHandle(Socket socket)throws Exception{
		this.socket=socket;
		this.input=socket.getInputStream();
		this.output=socket.getOutputStream();
		this.br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
	}
	//实现Runnale接口的run()方法
	public void run() {
		try{
			processRequest();
		}catch(Exception e){
			 System.out.println(e);
		}
	}
	
	private void processRequest() throws Exception{
		while(true){
			//读取并显示web浏览器提交的请求信息
			String headerLine=br.readLine();
			System.out.println("The client request is"+headerLine);
			if(headerLine.equals(CRLF)||headerLine.equals("")){
				break;
			}
			StringTokenizer s=new StringTokenizer(headerLine);
			String temp=s.nextToken();
			if(temp.equals("GET")){
				String fileName=s.nextToken();
				fileName="."+fileName;
				//打开所有请求的文件
				FileInputStream fis=null;
				boolean fileExists=true;
				try{
					fis=new FileInputStream(fileName);
				}catch(FileNotFoundException e){
					fileExists=false;
				}
				//完成回应消息
				String serverLine = "Server: a simple java httpServer";
				String statusLine = null;
				String contentTypeLine = null;
				String entityBody = null;
				String contentLengthLine = "error";
				if ( fileExists )
			    {
				statusLine = "HTTP/1.0 200 OK" + CRLF ;
				contentTypeLine = "Content-type: " +
				    contentType( fileName ) + CRLF ;
				contentLengthLine = "Content-Length: "
				    + (new Integer(fis.available())).toString()
				    + CRLF;
			    }
			else
			    {
				statusLine = "HTTP/1.0 404 Not Found" + CRLF ;
				contentTypeLine = "text/html" ;
				entityBody = "<HTML>" +
				    "<HEAD><TITLE>404 Not Found</TITLE></HEAD>" +
				    "<BODY>404 Not Found"
				    +"<br>usage:http://yourHostName:port/"
				    +"fileName.html</BODY></HTML>" ;
			    }
				// 发送到服务器信息
				output.write(statusLine.getBytes());
				output.write(serverLine.getBytes());
				output.write(contentTypeLine.getBytes());
				output.write(contentLengthLine.getBytes());
		        output.write(CRLF.getBytes());
				// 发送信息内容
				if (fileExists)
				    {
					sendBytes(fis, output) ;
					fis.close();
				    }
				else
				    {
					output.write(entityBody.getBytes());
				    }

			}
		}
		//关闭套接字和流
		try {
		    output.close();
		    br.close();
		    socket.close();
		}
		catch(Exception e) {
			System.out.println(e);
		}

	}
	private static void sendBytes(FileInputStream fis, OutputStream os)
	throws Exception
    {
	// 创建一个 1K buffer
	byte[] buffer = new byte[1024] ;
	int bytes = 0 ;
	// 将文件输出到套接字输出流中
	while ((bytes = fis.read(buffer)) != -1 )
	    {
		os.write(buffer, 0, bytes);
	    }
    }
    private static String contentType(String fileName)
    {
	if (fileName.endsWith(".htm") || fileName.endsWith(".html"))
	    {
		return "text/html";
	    }

	return "fileName";
    }


}


分享到:
评论

相关推荐

    web服务器(JAVA网络编程)

    基于HTTP协议的web服务器,NetBean下开发

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

    通过本实验,使学生能够进一步理解 HTTP 协议的技术细节以及 WEB 服务器的实现原理

    Java Socket编程实现的简单多线程WEB服务器

    Java Socket编程实现的简单多线程WEB服务器

    Java网络编程(第3版) 中文版

    无论你是经验丰富的网络开发人员、Java程序员新手,还是只希望对Java网络编程稍有些了解的人,都会发现《Java编程(第三版)》将成为你的书库中一个重要的部分。一旦开始使用Java网络API,只要你能想到它就能够做...

    Java实现Web服务器和客户端

    实验的目的: 1) 掌握Java Socket编程应用; 2) 阅读HTTP协议相关规范; 3) 基于Java Socket构建简单的HTTP的客户端和服务器; 4) 构建支持并发的HTTP服务器。

    java 实现简单web服务器

    用java语言实现了最简单的web服务器,供大家参考!

    java网络编程培训文档

    《Java网络编程》(第3版)有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的Web服务器、安全的在线订单接收程序、简单的组播...

    Java网络编程大作业-支持Markdown的静态Web服务器

    bupt Java网络编程大作业 支持Markdown的静态Web服务器

    Java实现简单的web文件服务器

    Java自己写的简单web文件服务器,有详细注释,实现简单的文件服务器交互功能,实现TCP多线程连接和UDP传输文件,适合Java网络编程初学者参考

    JAVA网络编程.第3版.哈诺德著.扫描版.含源码

    《Java网络编程》第三版会为你介绍Java网络API的最新特性。本书讨论了JDK1.4和1.5(现在已命名为J2SE5)中所做的所有修改和增补。本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节...

    Java网络高级编程

    本书第1-3章介绍了网络进程通信的主要技术。其中,第1章介绍网络进程通信的基础类...本书可作为高校计算机应用、网络信息、电子商务技术等专业级学生及研究生的教材,也可以作为Java网络编程爱好者的自学参考书。

    Java网络编程-WEB开发入门演示文稿

    JavaWweb开发入门,主要介绍了WEB开发相关的知识、常见的web服务器、Java Web应用等

    Java网络编程(第3版) 中文版 文件2

    无论你是经验丰富的网络开发人员、Java程序员新手,还是只希望对Java网络编程稍有些了解的人,都会发现《Java编程(第三版)》将成为你的书库中一个重要的部分。一旦开始使用Java网络API,只要你能想到它就能够做...

    网络编程经典书籍

    《Java网络编程(第三版)》会为你介绍Java网络API的最新特性。...无论是希望编写特殊用途的Web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件客户端,都会找到可供学习和借用的代码。

    多线程Web服务器的设计与实现

    该压缩包是计算机网络课程的实验——多线程Web服务器的设计与实现,里面内容很全,也有文档描述怎样操作,代码的注释很清晰,傻瓜式的,有java编程基础的一看就会

    java 服务器高级编程

    本书主要描述java web 以及服务器的开发。内容覆盖XML、EJB、JDBC、JNDC等设计理论

    web服务器编程代码

    web服务器编程代码 包括源代码 HttpServer.java;Request.java;Response.java

    深入Java Servlet网络编程

    第5章 Java Servlet中的网络编程 5. 1 Java套接字网络编程 5. 1. 1 InetAddress类 5. 1. 2 Socket类 5. 1. 3 给手机发送网上短信息 5. 2 Java网络编程中的高层类 5. 2. 1 URL类 5. 2. 2 URLConnection类 第6...

    《Java WebSocket编程 开发、部署和保护动态Web应用

    《Java WebSocket编程 开发、部署和保护动态Web应用》一书由Java WebSocket编程权威专家撰写,提供了实际的开发策略和详尽的示例应用。本书诠释了如何设计客户端/服务器应用、与全双工消息通信协作、建立连接、创建...

Global site tag (gtag.js) - Google Analytics