- 浏览: 299877 次
- 性别:
- 来自: 江阴
文章分类
最新评论
参考书《How Tomcat Works》这本书非常好,我觉得翻译也不错。
根据第二章的例子,我写了我的第一个 web server 程序
HttpServer.java
Request.java
Response.java
然后在 webroot 目录下新建 文件 index.html
运行 HttpServer.java
然后在浏览器中访问你的第一个 web server 并且是纯 Java 版的
http://127.0.0.1:8080/index.html 注意具体的文件名称,虽然只有一个html文件
eclipse 中控制台输出如下:
GET /index.html HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
千万不要写错了,如果写错了,浏览器会提示:无法显示此页
根据第二章的例子,我写了我的第一个 web server 程序
HttpServer.java
package ex01.xiejiaohui; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class HttpServer { public static final String WEB_ROOT = System.getProperty("user.dir") + File.separator + "webroot"; private static final String SHUTDOWN_COMMAND = "/SHUTDOWN"; private boolean shutdown = false; public static void main(String[] ars) { HttpServer server = new HttpServer(); server.await(); } public void await() { ServerSocket serverSocket = null; int port = 8080; try { serverSocket = new ServerSocket(port, 1, InetAddress.getByName("127.0.0.1")); } catch (IOException e) { e.printStackTrace(); System.exit(1); } // Loop waiting for a request while (!shutdown) { Socket socket = null; InputStream input = null; OutputStream output = null; try { socket = serverSocket.accept(); input = socket.getInputStream(); output = socket.getOutputStream(); // create Request object and parse Request request = new Request(input); request.parse(); // create Response object Response response = new Response(output); response.setRequest(request); response.sendStaticResource(); // Close the socketk socket.close(); // check if the previous URI is a shutdown command shutdown = request.getUri().equals(SHUTDOWN_COMMAND); } catch (Exception e) { e.printStackTrace(); continue; } } } }
Request.java
package ex01.xiejiaohui; import java.io.IOException; import java.io.InputStream; public class Request { private InputStream input; private String uri; public Request(InputStream input) { this.input = input; } public void parse() { StringBuffer request = new StringBuffer(2048); int i; byte[] buffer = new byte[2048]; try { i = input.read(buffer); } catch (IOException e) { e.printStackTrace(); i = -1; } for (int j=0; j<i; j++) { request.append((char)buffer[j]); } System.out.print(request.toString()); uri = parseUri(request.toString()); } private String parseUri(String requestString) { int index1, index2; index1 = requestString.indexOf(' '); if (index1 != -1) { index2 = requestString.indexOf(' ', index1 + 1); if (index2 > index1) { return requestString.substring(index1 + 1, index2); } } return null; } public String getUri() { return uri; } }
Response.java
package ex01.xiejiaohui; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; public class Response { private static final int BUFFER_SIZE = 1024; Request request; OutputStream output; public Response(OutputStream output) { this.output = output; } public void setRequest(Request request) { this.request = request; } public void sendStaticResource() throws IOException { byte[] bytes = new byte[BUFFER_SIZE]; FileInputStream fis = null; try { File file = new File(HttpServer.WEB_ROOT, request.getUri()); if (file.exists()) { fis = new FileInputStream(file); int ch = fis.read(bytes, 0, BUFFER_SIZE); while (ch != -1) { output.write(bytes, 0, ch); ch = fis.read(bytes, 0, BUFFER_SIZE); } } else { // file not found String errorMessage = "HTTP/1.1 404 File Not Found\r\n" + "Content-Type: text/html\r\n" + "Content-Length:23\r\n" + "\r\n" + "<h1>File Not Found<h1>"; output.write(errorMessage.getBytes()); } } catch (Exception e) { // thrown if cannot instantiate a File object e.printStackTrace(); System.out.println(e.toString()); } finally { if (fis != null) { fis.close(); } } } }
然后在 webroot 目录下新建 文件 index.html
运行 HttpServer.java
然后在浏览器中访问你的第一个 web server 并且是纯 Java 版的
http://127.0.0.1:8080/index.html 注意具体的文件名称,虽然只有一个html文件
eclipse 中控制台输出如下:
GET /index.html HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
千万不要写错了,如果写错了,浏览器会提示:无法显示此页
发表评论
-
求一个四位数,这个数字乘以9以后,等于这个数的倒序
2014-01-06 15:54 2358求一个四位数,这个数字乘以9以后,等于这个数的倒序 pa ... -
java reader file & writer file
2013-12-12 19:33 1253package com.xjh.dh; import ... -
Java Puzzlers
2013-11-26 22:31 834package com.xjh.study; pub ... -
java ProcessBuidler
2013-11-23 16:10 605import java.io.File; impor ... -
java txt to excel
2013-11-16 11:40 1008package com.xiejiaohui.dc; ... -
java程序在tomcat环境下读取配置文件
2013-08-02 21:43 1640package com.xiejiaohui.core; ... -
inno setup 下载地址
2013-07-15 14:37 661经常要制作安装文件的,大部分的人是用inno setup 来制 ... -
我的第一个 Jetty 程序
2013-03-08 22:08 1184参考网上的例子 在 eclipse 中新建 java 项目 ... -
计算两个日期的相隔天数
2013-02-17 21:16 865package com.xjh.util; impo ... -
java读取文件和写入文件
2013-01-11 21:49 1177package com.xjh.util; imp ... -
读取两个文件中的行数,写入第三个文件
2013-01-11 14:44 1405有一个联行号的文件,和一个银行文件,需要读取联行号文件中的某行 ... -
我写的一个读取文件写入excel的程序
2013-01-07 21:18 1254我最近写了一个程序,这个程序的需求是这样的: 1 读取一个t ... -
比较数组中的两个账号是否相同(初学者)
2012-09-03 19:54 841Comparer.java package com.xj ... -
测试_20120818
2012-08-18 19:46 892Calculater.java package com. ... -
java加密解密
2011-11-05 14:48 616http://snowolf.iteye.com/blog/3 ... -
一个小学五年级的暑假作业
2011-08-24 11:12 721请你从字母算式里写出数字计算。 W I N ... -
java 递归删除某个目录
2010-10-11 16:02 1645import java.io.File; import ... -
Java 读文件,写文件
2010-05-31 08:20 1602package com.xjh.util; import ... -
判断一个日期字符串是否输入正确
2010-01-16 14:54 1342import java.text.ParseExcepti ... -
jsp页面中不能显示图片
2008-06-13 14:29 3726在 AIX 5.3 操作系统,WebSphere 5.1 应用 ...
相关推荐
模仿how tomcat works第一章写的程序
【web service的释放】winform 程序第一次访问Webservice 慢的问题.pdf 文档为网上收集,版权归原作者所有,O(∩_∩)O谢谢。
(超链接) 20、 Web全称是 ,(World Wide Web) ----------------------- 2020年计算机二级《Web程序设计》练习题及答案全文共4页,当前为第1页。 2020年计算机二级《Web程序设计》练习题及答案全文共4页,当前为
如果您厌倦了IIS的庸肿,如果您不愿意第N次重装IIS,如果您对替代品这个词很感兴趣,请您尝试一下Ajiu AspWebServer吧... 使用说明: 『1』将您的网页置与本软件同一目录下,双击运行! 『2』双击右下角任务栏...
第一章 概述 第二章 表示逻辑 第三章 高级servlet 技术 第四章 使用 WebLogic Server JSP 第五章 WebLogic Server JDBC 和 JTA 第六章 远程方法调用和分布式命名 第七章 使用 Java 消息服务进行企业消息传递 第八章 ...
书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种技术...
本书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种...
目录 1.1 JSP简介 1.2 JSP工作原理 1.3 JSP程序体系结构 1.4 HTML和CSS简介 1.5 XML基础简介 1.6 搭建JSP的运行环境 1.7 第一个JSP应用 JSP程序设计实例教程(第2版)-电子课件第1章-Java-Web编程基础全文共73页,...
本书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种...
书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种技术...
本书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种...
书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种技术...
书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种技术...
(3)Server(服务器)对象:它提供对驻留在服务器上的资源的访问 计算机二级《Web程序设计》模拟及答案全文共2页,当前为第1页。 (4)Session(会话期)对象:它用于存储和管理与一个特定的用户会话有关的信息 (5)...
本光盘是《SQL Server 2005 Web 应用开发》一书的配书光盘,内容包括了书中第11、12、13、14章的例题源代码。 本光盘根目录下有5个文件夹,其内容和含义说明如下: (1) 4个文件夹名对应于《SQL Server 2005 Web...
但是,这种方法有一个很大的警告:访问者向您的网站发出的第一个请求将不会在您的Web服务器日志中使用此唯一ID进行标记,因为访问者在访问它们时将不会在其浏览器中显示Cookie提出了要求。 此初始请求至关重要,...
本书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种...
Java-Web程序设计实战-第8章-JDBC详解全文共86页,当前为第1页。 2 Java-Web程序设计实战-第8章-JDBC详解全文共86页,当前为第2页。 3 Java-Web程序设计实战-第8章-JDBC详解全文共86页,当前为第3页。 JDBC是一个...
第1章 在线考试系统 1.1 应用背景 1.2 系统设计 1.2.1 系统构架 1.2.2 系统功能模块设计 1.2.3 系统主要工作流程 1.2.4 数据库的分析与设计 1.3 程序主要页面设计 1.4 IIS配置与SQL Server数据库连接 1.4.1 IIS配置 ...
本书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种...