import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URLDecoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class HttpServer { public static void doGet(String message,OutputStream op) throws IOException{ //显示报文
System.out.println(message); Pattern p = Pattern.compile("/?a=(.+) HTTP"); Matcher page = p.matcher(message); String result = ""; while(page.find()){ //System.out.println(page.group(1));
result = page.group(1); } result = URLDecoder.decode(result, "GBK"); //关键在于utf-8
OutputStreamWriter osw = new OutputStreamWriter(op,"utf-8"); osw.write("HTTP/1.1 200 OK\r\n");
osw.write("Server: Apache-Coyote/1.1\r\n");
//osw.write("Set-Cookie: JSESSIONID=03493794995CE31A0F131787B6C6CBB2; Path=/; HttpOnly\r\n");
osw.write("Content-Type: text/html;charset=UTF-8\r\n");
osw.write("Transfer-Encoding: chunked\r\n"); osw.write("Date: Tue, 19 May 2015 02:48:27 GMT\r\n");
osw.write("\r\n");
osw.write("c9\r\n");
osw.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");
osw.write("<HTML>\r\n");
osw.write(" <HEAD><TITLE>A Servlet</TITLE></HEAD>\r\n");
osw.write(" <BODY>\r\n"); //osw.write(" This is myServ, using the GET method\r\n");
osw.write("你输入了 : "+result); osw.write(" </BODY>\r\n");
osw.write("</HTML>\r\n");
osw.write("\r\n");
//osw.write("0");
osw.write("\r\n");
osw.write("\r\n");
osw.flush();
osw.close();
op.flush();
op.close(); } public static void doPost(String message,OutputStream op,byte [] buf) throws IOException{ //显示报文
System.out.println(message); //收取数据
new Thread(new Runnable(){ @Override
public void run() { Pattern p = Pattern.compile("filename=\"(.+)\""); Matcher page = p.matcher(message); String filename = ""; while(page.find()){ System.out.println(page.group(1));
filename = page.group(1); } File file = new File("C:\\Users\\binbin\\Desktop\\计网作业\\ReciveFile"+"\\"+filename);
//if(!file.exists()){ try {
file.createNewFile(); FileOutputStream fop = new FileOutputStream(file); fop.write(buf,556,20); fop.close(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //} } }).start(); //关键在于utf-8
OutputStreamWriter osw = new OutputStreamWriter(op,"utf-8"); osw.write("HTTP/1.1 200 OK\r\n");
osw.write("Server: Apache-Coyote/1.1\r\n");
//osw.write("Set-Cookie: JSESSIONID=03493794995CE31A0F131787B6C6CBB2; Path=/; HttpOnly\r\n");
osw.write("Content-Type: text/html;charset=UTF-8\r\n");
osw.write("Transfer-Encoding: chunked\r\n");
osw.write("Date: Tue, 19 May 2015 02:48:27 GMT\r\n");
osw.write("\r\n");
osw.write("c9\r\n");
osw.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");
osw.write("<HTML>\r\n");
osw.write(" <HEAD><TITLE>A Servlet</TITLE></HEAD>\r\n");
osw.write(" <BODY>\r\n");
osw.write(" Post Method:UpLoad OK!\r\n");
osw.write(" </BODY>\r\n");
osw.write("</HTML>\r\n");
osw.write("\r\n");
osw.write("\r\n");
osw.write("\r\n");
osw.flush();
osw.close();
op.flush();
op.close(); } public static void main(String[] args) throws IOException, InterruptedException { // 服务器监听端口号
ServerSocket serverSocket = new ServerSocket(8099); //死循环服务器一直运行
while(true){ // 等待接收请求,这是一个阻塞的方法,当请求到来的时候才会继续向下执行
Socket socket = serverSocket.accept(); // 获取请求内容 InputStream
InputStream is = socket.getInputStream(); Thread.sleep(500); // 返回报文 用 OutputStream
OutputStream out = socket.getOutputStream(); File file = new File("GetMetho.txt"); FileOutputStream fop = new FileOutputStream(file); //获取报文
int len = 0;
byte [] buf = new byte[1024];
String message = "";
while((len=is.read(buf))!=-1){ message += new String(buf,0,len);
/*
if(message.contains("favicon.ico")||message.contains("google.com:443"))
break;
*/
fop.write(buf,0,len);
break; } fop.close(); //System.out.println(message); if(message.contains("favicon.ico")||message.contains("google.com:443"))
continue; //如果是Post
else if(message.contains("POST")){
HttpServer.doPost(message,out,buf);
} //如果是Get
else if(message.contains("GET")){
//System.out.println(message);
HttpServer.doGet(message,out);
} else; is.close(); }//end while } }

GET的html:

<html>
<body> <form action="http://localhost:8099" method="get">
<input name="a" type="text" value="Hello" />
<input name="" type="submit" value="提交" />
</form> </body>
</html>

POST的html:

<form action="http://localhost:8099" enctype="MULTIPART/FORM-DATA"

    method="POST">
<INPUT NAME="userfile1" TYPE="file">
<input type="submit" value="submit"/>
</form>

POST其实是水的,因为看书里面获取上传的文件内容那段代码太长了,不想写。。就直接数了一下前面报文有多少字,直接从那后面开始读了。

服务器实现处理GET和POST的更多相关文章

  1. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  2. 闰秒导致MySQL服务器的CPU sys过高

    今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...

  3. 闲来无聊,研究一下Web服务器 的源程序

    web服务器是如何工作的 1989年的夏天,蒂姆.博纳斯-李开发了世界上第一个web服务器和web客户机.这个浏览器程序是一个简单的电话号码查询软件.最初的web服务器程序就是一个利用浏览器和web服 ...

  4. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]

    目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...

  5. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

  6. 通过ProGet搭建一个内部的Nuget服务器

    .NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget已经成为.NET 生态系统中不可或缺的一个组件,从项目角度,将项目中各种组件的引用统统交给NuGet,添加组件/删除组件/以 ...

  7. 谈谈如何使用Netty开发实现高性能的RPC服务器

    RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...

  8. 游戏服务器菜鸟之C#初探一游戏服务

    本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅. 游戏的构架是 ...

  9. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  10. SQL Server 无法连接到服务器。SQL Server 复制需要有实际的服务器名称才能连接到服务器。请指定实际的服务器名称。

    异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html SQL性能优化汇总篇:http://www.cnblogs.com/dunit ...

随机推荐

  1. 在Windows下为PHP5.6安装redis扩展

    Redis 安装 Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 位.这个需要根据你系统 ...

  2. Android中将歌曲导入到SD卡和模拟器

    打开桌面的eclipse.exe的主程序,直接来到他的主页面上来. 在工具上边找到window----show view ----Other的按钮 打开之后,我们点击Android展开他. 展开之后, ...

  3. GeoWebCache的配置与使用

    最近在做一个开源GIS的demo的工作,工作中涉及到了地图瓦片,选取的开发环境是geoserver+openlayers,那么地图瓦片自然而然也就使用geowebcache,geowebcache就相 ...

  4. Handling CLIK AS3 Compile Error 1152 & 5000

    Handling CLIK AS3 Compile Error 1152 & 5000 Action You add a CLIK AS3 component from CLIK_Compon ...

  5. 第一章 Linux系统入门

    设定目标,寻求方法,勤奋努力,坚持不懈. ------你们知道了,而我们做到了.------ 世界上第一台计算机:ENIAC(埃尼亚克).1946-2 宾夕法尼亚大学. 约翰·冯·诺依曼体系 电脑的组 ...

  6. 一个高性能RPC框架的连接管理

    既然说连接,先对EpollServer的连接管理做个介绍吧.客户端与服务器一次conn,被封装成为Connection类在服务器进行管理. 服务器连接有三种类型,分别为: enum EnumConne ...

  7. Android 蓝牙 socket通信

    Android中蓝牙模块的使用 使用蓝牙API,Android应用程序能够执行以下功能: 扫描其他蓝牙设备查询本地已经配对的蓝牙适配器建立RFCOMM通道通过服务发现来连接其他设备在设备间传输数据管理 ...

  8. 简述Java面向对象三大特征:封装、继承、多态

    封装: 把对象的全部属性和服务结合在一起,形成不可分割的独立单位: 尽可能隐藏内部细节.(数据隐藏.隐藏具体实现的细节)     public.private.protected.default pu ...

  9. RabbitMQ学习系列四-EasyNetQ文档跟进式学习与实践

    EasyNetQ文档跟进式学习与实践 https://www.cnblogs.com/DjlNet/p/7603554.html 这里可能有人要问了,为什么不使用官方的nuget包呐:RabbitMQ ...

  10. NSArray倒序输出的方法

    NSMutableArray *array = [NSMutableArray arrayWithObjects:",nil]; NSArray* reversedArray = [[arr ...