服务器实现处理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 ...
随机推荐
- 用I/O口模拟总线时序
在做总线通信过程中,我们很少会用到这样方法,一般在我们选择MCU的时候都会带有你所需要的通信接口.但是,对于一些简单的通信应该用的场合,一般在一些传感器的数据通信过程中,传感器厂商会将通信协议做一些改 ...
- 编写自己的validate校验框架原理(转)
原文链接:http://blog.csdn.net/a973893384/article/details/51517388 具体思路: 我们使用自定义注解实现.然后需要解决的是两个问题: 1是如何扫描 ...
- git远程分支回退
[本地代码回退] git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除 git reset --hard HEAD~3:将 ...
- 初识CSS(1)
1.css的语法 a.位置 <head> <style type="text/css"> //css代码 </style> </head& ...
- FFmpeg再学习 -- 视音频基础知识
最近一直在看雷霄骅 FFmpeg 系列视频,然后将自己的理解总结一下. 参看:<基于 FFmpeg + SDL 的视频播放器的制作>课程的视频 一.视频播放器原理 自己理解: 比如一个 M ...
- LeetCode Max Stack
原题链接在这里:https://leetcode.com/problems/max-stack/description/ 题目: Design a max stack that supports pu ...
- Web缓存技术
本章导读 缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. ...
- 阿里云服务器tomcat启动慢解决方案
yum -y install rng-tools( 熵服务) cp /usr/lib/systemd/system/rngd.service /etc/systemd/system v ...
- Java基础数据类型二进制转换
前言: 本文主要介绍java基础类型的二进制转换和二进制的基本概念. 二进制: 1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1. 2,在计算机当中其它进制的算法基本基于2进制,因为计算机 ...
- c#实现QQ群成员列表导出及邮件群发开篇
主题已迁移至:http://atiblogs.com/ ITO-神奇的程序员