`
yongyezhandui
  • 浏览: 22232 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Java 搭建一台服务器 发送一个html文件和一张图片

阅读更多
import java.io.* ;
import java.net.* ;
import java.util.* ;

public final class WebServer {
// Count the number of connection
static int n = 0;

public static void main(String argv[]) throws Exception
{
// Set the port number.
int port = 2046;


// Establish the listen socket.
ServerSocket serverSocket = new ServerSocket(port);

// Process HTTP service requests in an infinite loop.
while (true){
// Listen for a TCP connection request.
Socket socket = serverSocket.accept();
n++;
HttpRequest request = new HttpRequest(socket,n);

Thread thread = new Thread(request);

thread.start();
}
}

}


final class HttpRequest implements Runnable{
final static String CRLF = "\r\n";
Socket socket;
int n;

// Constructor
public HttpRequest(Socket socket, int n) throws Exception
{
this.socket = socket;
this.n = n;
}

// Implement the run() method of the Runnable interface.
public void run()
{
try {
processRequest();
} catch (Exception e) {
System.out.println(e);
}
}

private void processRequest() throws Exception
{
// Get a reference to the socket's input and output streams.
InputStream is = this.socket.getInputStream();
DataOutputStream os = new DataOutputStream(this.socket.getOutputStream());

// Set up input stream filters.
BufferedReader br = new BufferedReader(new InputStreamReader(is));

// Get the request line of the HTTP request message.
String requestLine = br.readLine();

// Display the request line.
System.out.println();
System.out.println(requestLine);


// Get and display the header lines.
String headerLine = null;
while ((headerLine = br.readLine()).length() != 0) {
System.out.println(headerLine);
}

// Extract the filename from the request line
StringTokenizer tokens = new StringTokenizer(requestLine);
tokens.nextToken();     // skip over the method, which should be "GET"
String fileName = tokens.nextToken();
   
// Prepend a "." so that file request is within the current directory.
if(fileName.equals("/")){
fileName = "./index.html";
}else{
fileName = "." + fileName;
}

// Open the requested file.
FileInputStream fis = null;
boolean fileExists = true;

try {
fis = new FileInputStream(fileName);
} catch (FileNotFoundException e) {
fileExists = false;
}

// Construct the response message.
String statusLine = null;
String contentTypeLine = null;
String entityBody = null;

if (fileExists) {
statusLine = "HTTP/1.0 200 OK" + CRLF;
contentTypeLine = "Content-type: " + contentType(fileName) + CRLF;
} else {
statusLine = "HTTP/1.0 404 Not Found" + CRLF;
contentTypeLine = "No contents" + CRLF;
entityBody = "<html>" +"<head><title>Not Found</title></head>" +
"<body>Not Found</body></html>";
}

// Send the status line.
os.writeBytes(statusLine);
// Send the content type line.
os.writeBytes(contentTypeLine);
// Send a blank line to indicate the end of the header lines.
os.writeBytes(CRLF);

System.out.println("The number of connection: "+ n);
System.out.println(statusLine);
System.out.println(contentTypeLine);


// Send the entity body.
if (fileExists) {
sendBytes(fis, os);
fis.close();
} else {
os.writeBytes(entityBody);
}

os.close();
is.close();
br.close();
socket.close();
}

private static void sendBytes(FileInputStream fis, OutputStream os) throws Exception {
// Construct a 1K buffer to hold bytes on their way to the socket.
byte[] buffer = new byte[1024];
int bytes = 0;

    // Copy requested file into the socket's output stream.
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";
}
if (fileName.endsWith(".gif")) {
return "image/gif";
}

    if (fileName.endsWith(".jpg")) {
        return "image/jpeg";
        }
   
    if(fileName.endsWith(".java"))
{
return "java file";
}
    return "application/octet-stream";
}
}

分享到:
评论

相关推荐

    java语言搭建简单的服务器

    本教程将详细介绍如何使用Java语言搭建一个简单的服务器,帮助初学者理解网络编程的基本概念。 首先,要明白服务器的核心作用是接收客户端的请求并做出相应的响应。在Java中,我们可以使用Socket编程来实现这一功能...

    如何在linux服务器上同时搭建php运行环境(apache)和java运行环境(tomcat)_怎么配置php运行环境

    如何在linux服务器上同时搭建php运行环境(apache)和java运行环境(tomcat) 一台linux上同时运行php和java网站项目 一台linux上同时运行apache httpd和java tomcat

    JAVAMail邮箱服务器搭建步骤详解

    对于企业和个人来说,拥有一个自定义的企业邮箱服务器可以提供更高的安全性和管理效率。Apache James是基于Java开发的一款开源邮件服务器,它集成了POP3、SMTP等常见的邮件协议,为企业和学习者提供了构建邮件服务器...

    Java调用SMTP命令发邮件,实现抄送,附件--无需邮件搭建邮件服务器直接发送

    本教程将详细讲解如何使用Java通过SMTP(Simple Mail Transfer Protocol)协议来发送邮件,包括抄送和添加附件,而无需搭建自己的邮件服务器。 首先,我们需要引入JavaMail API,这是一个开源库,提供了在Java中...

    简单搭建WEB服务器 简单搭建WEB服务器 简单搭建WEB服务器

    3. 虚拟主机:在同一台服务器上配置多个网站,每个网站有自己的域名和独立的配置。 4. 日志管理:配置日志记录,便于分析服务器性能和故障排查。 五、安全与维护 1. 安全更新:定期更新Web服务器软件,防止已知漏洞...

    Java 基于Swing的FTP上传下载程序

    Java基于Swing的FTP上传下载程序是一个用户界面友好、功能完备的应用,主要用于通过FTP(File Transfer Protocol)协议实现文件的上传和下载。Swing是Java提供的一个轻量级的GUI库,它允许开发者创建出美观且功能...

    同一台主机上搭建多台tomcat服务器并按顺序命名

    每搭建一台新的Tomcat服务器,都需要创建一个新的环境变量,以区分不同的服务器实例。例如,对于第二台服务器,创建名为`CATALINA_HOME2`的环境变量,其值设定为该Tomcat服务器的路径。 4. **配置文件的修改**: ...

    Java搭建SSM后台的微信垃圾分类小程序

    在本项目中,我们主要探讨如何使用Java技术栈来搭建一个基于SSM(Spring、SpringMVC、MyBatis)的后台系统,为微信小程序提供垃圾分类的服务。这个小程序旨在帮助用户识别并正确分类垃圾,提高环保意识。下面将详细...

    linux下搭建java web服务器

    在Linux系统中搭建Java Web服务器是一项基础而重要的工作,它涉及到三个主要组件:JDK(Java Development Kit)、Tomcat(一个流行的Java应用服务器,用于部署和运行Java Web应用程序)和MySQL(一种关系型数据库...

    利Android AQuery中ajax访问SSH搭建的后台Java Web服务器

    AQuery是Android平台上的一个强大的图片加载和网络请求库,它是基于Apache HttpClient和jQuery思想设计的。AQuery提供了简洁的API,使得处理网络请求变得非常容易。在Android应用中,我们可以通过AQuery的ajax方法来...

    James搭建邮件服务器

    James 是一个开源的邮件服务器软件,它基于 Java 开发,提供了 SMTP、POP3 和 IMAP 协议的支持,使得用户可以构建自己的邮件系统。本文主要介绍如何使用 James 搭建邮件服务器。 首先,你需要从官方下载地址获取 ...

    手把手__SELENIUM_JAVA搭建

    通过这样的步骤,你已经成功地搭建了一个使用Java和Selenium的自动化测试环境。现在,你可以继续学习和实践,创建更复杂的测试用例,实现全面的Web应用自动化测试。记得保持你的环境更新,以利用Selenium的新特性和...

    图片服务器搭建方案.docx

    FastDFS是一个高性能的分布式文件系统,特别适合处理大容量图片存储。其优点在于传输速度快,性能高,可动态扩展节点。然而,FastDFS的安装配置复杂,维护工作量大,且需要多台服务器构成分布式系统才能发挥优势。...

    最简易的ftp服务器,二个java类文件

    在这个场景中,我们关注的是一个简易的FTP服务器实现,它只包含两个Java类文件:env.java和ftpServer.java。这两个文件可能构成了服务器的核心逻辑,使得开发者能够快速搭建一个基本的FTP服务,以供测试或学习用途。...

    Web服务器搭建工具

    1. 虚拟主机:通过虚拟主机配置,一台服务器可以托管多个独立的网站。 2. URL重写:利用服务器的重写规则,可以实现更友好的URL结构和SEO优化。 3. 静态化:将动态页面转换为静态HTML,提高网站访问速度和稳定性。...

    发布服务器搭建和使用手册.docx

    发布服务器搭建和使用手册 发布服务器是企业内部或外部用于分发、管理和更新应用程序的关键基础设施。本手册将详细讲解如何搭建和使用发布服务器,确保您的系统能够高效、安全地进行软件发布。 一、环境搭建 环境...

    基于Java的多协议集成物联网服务器(iot-server)设计源码

    该项目为基于Java语言开发的多协议集成物联网服务器(iot-server)设计源码,总计包含235个文件,涵盖224个Java源文件、5个XML配置文件、2个YAML文件、1个Git忽略文件、1个LICENSE文件、1个Markdown文件以及1个配置...

    iphone 推送通知 服务器端java 实现

    1. **获取APNs证书**:在Apple Developer Portal中,你需要创建一个推送服务证书,下载.pem文件,这将是连接到APNs服务器的凭证。 2. **导入证书**:在Java项目中,使用Keytool工具将.pem文件转换为Java可以识别的...

Global site tag (gtag.js) - Google Analytics