服务器实现处理GET和POST
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的更多相关文章
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 闰秒导致MySQL服务器的CPU sys过高
今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...
- 闲来无聊,研究一下Web服务器 的源程序
web服务器是如何工作的 1989年的夏天,蒂姆.博纳斯-李开发了世界上第一个web服务器和web客户机.这个浏览器程序是一个简单的电话号码查询软件.最初的web服务器程序就是一个利用浏览器和web服 ...
- SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...
- 使用 Nodejs 搭建简单的Web服务器
使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...
- 通过ProGet搭建一个内部的Nuget服务器
.NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget已经成为.NET 生态系统中不可或缺的一个组件,从项目角度,将项目中各种组件的引用统统交给NuGet,添加组件/删除组件/以 ...
- 谈谈如何使用Netty开发实现高性能的RPC服务器
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...
- 游戏服务器菜鸟之C#初探一游戏服务
本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅. 游戏的构架是 ...
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
- SQL Server 无法连接到服务器。SQL Server 复制需要有实际的服务器名称才能连接到服务器。请指定实际的服务器名称。
异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html SQL性能优化汇总篇:http://www.cnblogs.com/dunit ...
随机推荐
- flask 项目 部署服务器,package安装问题(无外网链接)
1.安装所需的环境/包 1) 在一台开发机器(有网络,编译成功)安装package: pipreqs 语法: pipreqs <项目路径> 将项目所使用的所有包目录将会导出至目录:requ ...
- javascript 继承的两种方式
js中继承可以分为两种:对象冒充和原型链方式 一.对象冒充包括三种:临时属性方式.call()及apply()方式1.临时属性方式 代码如下: function Person(name){ t ...
- 《锋利的jQuery》读书笔记(DOM+事件)
前阵子买了一批书,就从锋利的jQuery看起吧,书中一些太过常规以及没有强记必要性的操作就不记录了. 1.DOM加载后执行JS $(document).ready(function(){ //.... ...
- VC6工程因行尾格式无法转换到VS2015
VC6工程因行尾格式无法转换到VS2015(金庆的专栏 2017.6)参考:https://connect.microsoft.com/VisualStudio/feedback/details/54 ...
- linux, windows, mac, ios等平台GCC预编译宏判断
写跨平台c/c++程序的时候,需要搞清各平台下面的预编译宏,区分各平台代码.而跨平台c/c++编程,GCC基本在各平台都可以使用.整理了一份各平台预编译宏的判断示例. 需要注意几点: * window ...
- ajax 提交 注册表单 到MySQL数据库
今天按照要求,要做一个登陆.注册表单,本来样式做好就行了,本来咱就是干前端的,但让咱自己都没想到的是,不到一个小时竟然都干完了,实在闲的蛋疼,就想到链接数据库玩,遥想当年,毕竟咱也是写过后台的,哪知, ...
- 修改maven仓库位置
在eclipse中安装好maven2的插件后: 第一步: 默认会放在~/.m2/repository目录下 (“~”代表用户的目录,比如windows7下一般都是C:\Users\zz\.m2\rep ...
- Oracle 索引的失效和重建
查询指定表的索引 SELECT T1.TABLE_NAME, T1.INDEX_NAME, T1.INDEX_TYPE, T1.UNIQUENESS, T1.TABLE_OWNER, T1.STATU ...
- 前端导出Excel
1.首先,需要下载一个叫better-xlsx,的插件,以yarn 为例 ' yarn add better-xlsx --save '下载相关依赖包( npm 方式 ' npm i better-x ...
- Centos7下命令笔记-ls
ls命令大概是linux下最常用的命令之一,ls是list的缩写.因为linux目录或者文件记录的信息实在太多,所以默认ls只显示非隐藏的目录以及文件名.ls直接执行不加参数时显示本目录下的档案名. ...