`
befairy
  • 浏览: 37402 次
  • 性别: 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网络编程)

    这里的主题聚焦于使用Java进行网络编程来实现一个基于HTTP协议的Web服务器。在NetBeans这样的集成开发环境中,开发者可以利用其丰富的功能和工具来简化开发过程。 首先,我们需要理解Java网络编程的基础。Java提供...

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

    总的来说,"计算机网络实验一:Windows环境下用Java实现web服务器"是一次综合性的学习体验,涵盖了HTTP协议、网络编程、Java编程以及服务器与前端的交互等多个重要知识点。通过实践,学生将能够更全面地理解Web服务...

    Java网络编程(第4版)PDF

    Java的HttpURLConnection和HttpClient类为实现HTTP请求提供了便利,同时,读者也会了解如何构建基于Servlet的Web服务器,处理HTTP请求和响应。 对于分布式系统和Web服务,书中的内容可能包括Java RMI(Remote ...

    java网络编程

    在本资料中,《Java网络编程》第三版提供了深入浅出的讲解,旨在帮助开发者提升对这一领域的理解。 1. **基础概念**: - **网络模型**:Java网络编程基于OSI七层模型和TCP/IP四层模型。理解这些模型有助于理解网络...

    Java网络编程/Java网络编程实例

    Java网络编程是Java开发中的重要领域,它涵盖了网络应用程序的设计、实现和调试。在这个主题下,我们可以探讨多个关键知识点: 1. **Java Socket编程**:Java的Socket类提供了基于TCP/IP协议的网络通信能力。通过...

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

    Java Socket 编程实现的简单多线程 WEB 服务器 在本文中,我们将详细介绍如何使用 Java 的 Socket 编程实现一个简单的多线程 WEB 服务器。 Socket 编程简介 Socket 编程是 Java 网络编程的基础,它允许开发者创建...

    Java网络编程精解(孙卫琴)电子教案

    《Java网络编程精解》是孙卫琴老师的一本经典教程,主要涵盖了Java语言在网络编程领域的深度解析。这本书深入浅出地介绍了如何使用Java进行网络通信,包括基本的TCP/IP协议、套接字编程、多线程技术以及HTTP、FTP等...

    用Java实现Web服务器

    它可以帮助开发者深入理解网络通信过程,提升Java编程能力,同时为理解和开发更复杂的Web应用打下坚实基础。虽然目前的实现存在局限性,但通过不断迭代和改进,可以逐步将其完善成一个功能完备的Web服务器。

    java网络编程实例3

    Java网络编程是Java开发中的重要领域,它涵盖了网络通信的所有基本概念和技术,包括TCP/IP协议、套接字编程、多线程、数据序列化以及HTTP、FTP等网络协议的实现。在这个“Java网络编程实例3”中,我们将深入探讨这些...

    Java网络编程原理与JSP Web开发核心技术

    总的来说,Java网络编程原理与JSP Web开发核心技术的学习涵盖了网络通信、动态网页生成、服务器端处理等多个方面,是构建强大、高效Web应用程序的基础。通过深入理解和实践,开发者可以创建出满足各种需求的互联网...

    java语言写的web服务器

    尽管这里没有明确提到Servlet,但在更复杂的Java Web服务器实现中,Servlet容器(如Tomcat)通常用于管理和运行Servlet。 5. **线程管理**: 由于Web服务器可能同时接收多个请求,因此需要有效地管理线程来处理...

    Java网络编程第三版.pdf

    1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,包括TCP和UDP协议的基础知识,以及如何使用Java的Socket和ServerSocket类创建客户端和服务器端的连接。 2. **I/O与NIO**:Java的I/O流系统是网络...

    《Java网络编程实例:Java网络编程实例》

    理解HTTP请求和响应的结构,以及如何使用Java实现HTTP客户端和服务器,是网络编程的重要内容。 9. **HTTPS和SSL/TLS**:网络安全是网络编程不可忽视的一环。HTTPS提供了安全的HTTP通信,而SSL/TLS协议用于加密数据...

    JAVA服务器]用Java实现Web

    【Java实现Web服务器详解...总之,Java通过其强大的网络编程API允许开发者构建自定义的Web服务器,理解HTTP协议和网络通信的基本原理是实现这一目标的关键。通过不断学习和实践,你可以创建出高效、可靠的Web服务系统。

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

    在深入学习和理解这个项目之前,你需要具备基本的Java编程知识,了解HTTP协议,以及对Web服务器工作原理的一般性理解。通过阅读和分析源码,你可以学习到如何使用Java实现一个简单的Web服务器,这对于提升Java网络...

    JAVA网络编程大全,pdf版

    通过实践项目,如创建简单的聊天应用、文件传输服务或Web服务器,能加深对Java网络编程的理解,巩固所学知识。 总之,《JAVA网络编程大全》这本书涵盖了Java网络编程的各个方面,无论你是初学者还是经验丰富的...

    纯java写的web服务器

    Java是一种广泛使用的编程语言,尤其在开发Web应用程序和服务器方面有着强大的能力。"纯Java写的web服务器"是指完全使用Java...同时,这也是一种锻炼和提升Java编程技能,特别是网络编程和服务器开发技能的有效途径。

    java网络编程经典的学习书籍

    为了帮助读者更好地理解和应用所学知识,书中会包含一些实际的网络编程案例,如简单的文件传输服务、聊天室应用、Web服务器的实现等,这些都是提升实践能力的好途径。 总的来说,《Java网络编程》这本书全面地覆盖...

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

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

Global site tag (gtag.js) - Google Analytics