- 浏览: 880506 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hzw2312:
C = sin(MLatA)*sin(MLatB)*cos(M ...
根据地球上任意两点的经纬度计算两点间的距离 -
zhang_sun:
rewind方法的limit又是多少呢?等于capacity? ...
ByteBuffer的flip,clear及rewind区别 -
kalogen:
一种每次都获取到不同的随机数的办法int ranseed=12 ...
J2ME中Random类的使用 -
kalogen:
估计部署在某个端口下吧,仔细检查一下发布的配置文件
Tomcat负载均衡和集群环境的搭建 -
zhuchao_ko:
文件大点就嗝屁了~~~
Axis 1.4 上传二进制文件(base64Binary)
- /**
- * 用Java语言实现HTTP服务器,首先启动一个java.net.ServerSocket在提供服务的端口上监听连接.向客户返回文本时,可以用
- * PrintWriter,但是如果返回二进制数据,则必须使用OutputStream.write(byte[])方法,返回的应答消息字符串可以使用
- * String.getBytes()方法转换为字节数组返回,或者使用PrintStream的print()方法写入文本,用
- * write(byte[])方法写入二进制数据.
- *
- * 以工程所在目录为web的根目录。 在工程的根目录下放一个大概如下的index.html
- *
- * <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- * "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta
- * http-equiv="Content-Type" content="text/html; charset=gbk">
- * <title>简单的测试</title> </head> <body> 你好!这是一个 简单的web服务器。<br>
- * 这是一个图片!<br>
- *
- * <form action="/index.html"> <img alt="" src="images/test.gif"><br>
- * 姓名:<input type="text" name="name" /><br>
- * 密码:<input type="password" name="pass"></input><br>
- * <input type="submit"/> </form> </body> </html>
- *
- * 放入图片位置: 工程根目录/images/test.gif <br>
- * 打开浏览器输入http://localhost/index.html 可以展示index.html
- *
- * @author guazi
- */
- public class SimpleHttpServer implements Runnable {
- ServerSocket serverSocket;// 服务器Socket
- /**
- * 服务器监听端口, 默认为 80.
- */
- public static int PORT = 80;// 标准HTTP端口
- /**
- * 开始服务器 Socket 线程.
- */
- public SimpleHttpServer() {
- try {
- serverSocket = new ServerSocket(PORT);
- } catch (Exception e) {
- System.out.println("无法启动HTTP服务器:" + e.getMessage());
- }
- if (serverSocket == null)
- System.exit(1);// 无法开始服务器
- new Thread(this).start();
- System.out.println("HTTP服务器正在运行,端口:" + PORT);
- }
- /**
- * 运行服务器主线程, 监听客户端请求并返回响应.
- */
- public void run() {
- while (true) {
- try {
- Socket client = null;// 客户Socket
- client = serverSocket.accept();// 客户机(这里是 IE 等浏览器)已经连接到当前服务器
- if (client != null) {
- System.out.println("连接到服务器的用户:" + client);
- try {
- // 第一阶段: 打开输入流
- BufferedReader in = new BufferedReader(
- new InputStreamReader(client.getInputStream()));
- System.out.println("客户端发送的请求信息: ***************");
- // 读取第一行, 请求地址
- System.out.println("http协议头部信息:");
- String line = in.readLine();
- System.out.println(line);
- String resource = line.substring(line.indexOf('/'),
- line.lastIndexOf('/') - 5);
- // 获得请求的资源的地址
- resource = URLDecoder.decode(resource, "gbk");// 反编码
- String method = new StringTokenizer(line).nextElement()
- .toString();// 获取请求方法, GET 或者 POST
- // 读取浏览器发送过来的请求参数头部信息
- while ((line = in.readLine()) != null) {
- System.out.println(line);
- if (line.equals(""))
- break;
- }
- System.out.println("http协议头部结束 ***************");
- System.out.println("用户请求的资源是:" + resource);
- System.out.println("请求的类型是: " + method);
- String params = null;
- if (resource.indexOf("?") > -1) {
- params = resource
- .substring(resource.indexOf("?") + 1);
- resource = resource.substring(0, resource
- .indexOf("?"));
- }
- // 显示 POST 表单提交的内容, 这个内容位于请求的主体部分
- if ("POST".equalsIgnoreCase(method)) {
- if (params != null) {
- params +="&" + in.readLine();
- }else{
- params =in.readLine();
- }
- }
- System.out.println("打印提交的数据:");
- printParams(params);
- // 读取资源并返回给客户端
- fileReaderAndReturn(resource, client);
- // 关闭客户端链接
- client.close();
- System.out.println("客户端返回完成!");
- } catch (Exception e) {
- System.out.println("HTTP服务器错误:" + e.getMessage());
- }
- }
- } catch (Exception e) {
- System.out.println("HTTP服务器错误:" + e.getMessage());
- }
- }
- }
- /**
- * 读取一个文件的内容并返回给浏览器端.
- *
- * @param fileName
- * 文件名
- * @param socket
- * 客户端 socket.
- * @throws IOException
- */
- void fileReaderAndReturn(String fileName, Socket socket) throws IOException {
- if ("/".equals(fileName)) {// 设置欢迎页面,呵呵!
- fileName = "/index.html";
- }
- fileName = fileName.substring(1);
- PrintStream out = new PrintStream(socket.getOutputStream(), true);
- File fileToSend = new File(fileName);
- String fileEx = fileName.substring(fileName.indexOf(".") + 1);
- String contentType = null;
- // 设置返回的内容类型
- // 此处的类型与tomcat/conf/web.xml中配置的mime-mapping类型是一致的。测试之用,就写这么几个。
- if ("htmlhtmxml".indexOf(fileEx) > -1) {
- contentType = "text/html;charset=GBK";
- } else if ("jpegjpggifbpmpng".indexOf(fileEx) > -1) {
- contentType = "application/binary";
- }
- if (fileToSend.exists() && !fileToSend.isDirectory()) {
- // http 协议返回头
- out.println("HTTP/1.0 200 OK");// 返回应答消息,并结束应答
- out.println("Content-Type:" + contentType);
- out.println("Content-Length:" + fileToSend.length());// 返回内容字节数
- out.println();// 根据 HTTP 协议, 空行将结束头信息
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(fileToSend);
- } catch (FileNotFoundException e) {
- out.println("<h1>404错误!</h1>" + e.getMessage());
- }
- byte data[];
- try {
- data = new byte[fis.available()];
- fis.read(data);
- out.write(data);
- } catch (IOException e) {
- out.println("<h1>500错误!</h1>" + e.getMessage());
- e.printStackTrace();
- } finally {
- out.close();
- try {
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- } else {
- out.println("<h1>404错误!</h1>" + "文件没有找到");
- out.close();
- }
- }
- void printParams(String params) throws IOException {
- if (params == null) {
- return;
- }
- String[] maps = params.split("&");
- for (String temp : maps) {
- String[] map = temp.split("=");
- System.out.println(map[0] + "==" + map[1]);
- }
- }
- /** */
- /**
- * 启动 HTTP 服务器
- *
- * @param args
- */
- public static void main(String[] args) {
- try {
- if (args.length != 1) {
- System.out.println("这是一个简单的web服务器 ,端口是: 80.");
- } else if (args.length == 1) {
- PORT = Integer.parseInt(args[0]);
- }
- } catch (Exception ex) {
- System.err.println("服务器初始化错误" + ex.getMessage());
- }
- new SimpleHttpServer();
- }
发表评论
-
log4j配置输出hibernate执行的SQL和相应参数以及打印结果
2017-09-01 20:26 5559hibernate的配置文件:hibernate.prope ... -
使用Gson将对象类转成Json对象时出现\u003d的问题
2015-11-03 17:07 4081Gson将对象转成Json对象的方法 ... -
maven pom.xml加载不同properties配置
2015-10-30 11:52 12571.pom.xml =================== ... -
剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER)
2015-10-19 19:03 716剖析淘宝 TDDL ( TAOBAO DISTRIBUTE ... -
"org.eclipse.wst.validation" has been removed
2015-10-15 11:22 1168从SVN服务器上导出maven工程遇到的问题," ... -
mysql/Java服务端对emoji的支持
2015-09-19 10:43 847前言: 最近开发的iOS项目因为需要用户文本的存储,自然就 ... -
Ehcache配置详解及CacheManager使用
2015-04-09 14:40 2049<?xml version="1.0&quo ... -
详解 Too many open files
2014-09-07 00:25 1233运行在Linux系统上的Java程序可能会出现" ... -
Could not find jar tool executable问题解决
2014-03-21 00:28 1258eclipse 中,在用PROGUARD生成混淆包Obfus ... -
eclipse不小心删除了代码文件的一个解决办法
2013-08-15 17:02 1310平时用eclipse写代码,不小心删除了一个文件,一般就找不回 ... -
关于ProGuard的学习了解
2012-09-20 09:51 1440在Android项目中用到JNI, ... -
Java实现MD5加密
2012-08-23 23:32 1077import java.io.UnsupportedEnco ... -
叫你怎么下载开源代码,例如:hg clone https://gtalksms.googlecode.com/hg/ gtalksms .
2012-07-04 17:29 1643svn的就不说了,git的也不说了,这些都是常用的,直说hg ... -
Java NIO与IO 区别和比较
2012-06-17 11:20 1469本文将通过一些实例来 ... -
jar打包出现java.io.IOException: invalid header field 解决方案
2012-06-10 12:10 4837执行: D:\aaa\DMDemo>jar -cvfm ... -
java内存原型分析-基本知识
2012-06-06 13:53 778java虚拟机内存原型寄存 ... -
java InputStream读取数据问题
2012-05-21 15:45 9821. 关于InputStream.read() 在从数 ... -
java读取文件夹下的所有文件夹和文件
2012-05-15 10:46 1165package com.borland.samples.wel ... -
Java中yield(),sleep()以及wait()的区别
2012-05-08 11:03 745往往混淆了这三个函数的使用。 从操作系统的角度讲,os会维护一 ... -
Netbeans 7和Subversion(svn) 1.7
2012-05-02 23:07 2075Netbeans的SVN插件,最后一次更新是07年了,所以它根 ...
相关推荐
在本实验中,我们将探索如何在Windows环境下使用Java语言实现一个基本的Web服务器。这个实践项目旨在深化学生对HTTP协议的理解,以及Web服务器的工作机制。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络...
用java语言实现了最简单的web服务器,供大家参考!
### 使用Java实现Web服务器的关键知识点 #### 一、HTTP协议的作用原理 HTTP协议(HyperText Transfer Protocol)是一种应用层协议,用于从Web服务器传输超文本到本地浏览器的传输协议。它使得分布式、协作式和超...
总的来说,"用Java实现Web服务器"是一个锻炼基础网络编程和多线程技能的好项目。它可以帮助开发者深入理解网络通信过程,提升Java编程能力,同时为理解和开发更复杂的Web应用打下坚实基础。虽然目前的实现存在局限性...
要理解如何用Java实现Web服务器,首先要了解Web服务器的工作原理和HTTP协议的基础知识。 **Web服务器的工作原理** Web服务器的核心职责是处理来自Web浏览器的HTTP请求,并返回相应的HTTP响应。这个过程基于客户机/...
在本文中,我们将探讨如何使用Java实现一个简单的Web服务器。首先,我们要理解Web服务器的基本工作原理,它主要是基于HTTP(超文本传输协议)与客户端(通常是浏览器)进行通信。HTTP是一种应用层协议,建立在TCP/IP...
"简单Web服务器设计与实现" 本文主要介绍了简单Web服务器的设计与实现,涵盖了WWW的工作原理、HTTP协议、Java语言、Web服务器的设计与实现等方面的知识点。 WWW的工作原理基于客户机/服务器计算模型,由Web浏览器...
学习计算机网络http协议时写的 JAVA版简易web服务器 JAVA版简易web服务器 JAVA版简易web服务器 JAVA版简易web服务器 JAVA版简易web服务器 JAVA版简易web服务器 JAVA版简易web服务器
本项目“简单JAVA WEB服务器”旨在提供一个基础的平台,帮助学习者理解Java Web服务器的工作原理,特别是静态网页服务和JSP(Java Server Pages)的执行,以及Cookie的解析。 1. **多线程技术**:Java Web服务器...
在本文中,我们将深入探讨如何使用Java来实现一个简单的Web文件服务器。这个项目不仅适合Java初学者,也是学习网络编程的绝佳实践。我们将讨论以下几个关键知识点: 1. **TCP与UDP协议**: - TCP(Transmission ...
这是《计算机网络》的课程设计--多线程的Web服务器(带有课程设计报告),里面为Eclipse3.5的工程。支持HTTP1.1(但是不完善),支持多线程(采用的线程池),支持简单CGI(仅PHP的CGI模块通过测试),支持配置文件...
然而,一个“纯Java写的web服务器”可能不依赖这些成熟的容器,而是直接实现Servlet的逻辑,或者使用其他方式(如函数式编程、微服务框架)来处理动态请求。 在提供的压缩包文件"myserver"中,可能包含了服务器的源...
在IT领域,特别是Java编程实践中,开发一个简单的Web服务器是一项基础且重要的技能。"JAVA实现的简单的web服务器"项目正是这样一个实例,它演示了如何利用Java语言构建一个基本的HTTP服务器,能够处理GET请求并返回...
知识点:使用Java编程语言构建Web服务器 在现代网络开发中,使用高级编程语言如Java来构建Web服务器变得越来越常见。这种做法不仅提升了开发效率,还增强了服务器的安全性和可扩展性。下面,我们将深入探讨如何使用...
WINDOW环境下用JAVA实现WEB服务器_MultiWebServer.java (1)处理一个http请求 (2)接收并解析http请求 (3)从服务器文件系统中获得被请求的文件 (4)创建一个包括被请求的文件的http响应信息 直接发送该信息到...
这个项目可能包含了一个简单的HTTP服务器实现,允许用户理解Web服务器的工作原理以及如何用Java进行网络编程。下面将详细解释与这个主题相关的Java Web开发知识。 1. **Java Web基础**: - **Servlet**:Java Web...
本项目标题为“Java开发的简单WEB服务器源码”,意味着它提供了一个用Java语言编写的Web服务器的源代码,我们可以从中学习到如何构建一个能响应HTTP请求并返回静态资源的服务器。 首先,我们要了解Web服务器的基本...
本文档的标题是“最简单的 Web 服务器的代码 Java”,这表明本文档是一个关于使用 Java语言实现简单 Web 服务器的教程。 描述解析 本文档的描述是“最简单的 Web 服务器的代码 Java”,这进一步强调了本文档的主题...
8. **src 目录**: 存放原始的Java源代码,开发者可以在这里查看Web服务器的实现细节。 9. **webapps 目录**: 标准的Tomcat或者任何Java Web服务器的结构中,webapps目录是用来存放Web应用程序的。每个子目录代表一...