首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java Socket 编撰的 HTTP 服务器应用【转】

2012-11-11 
Java Socket 编写的 HTTP 服务器应用【转】???????????????????????// GIF 图片就读取一个真实的图片数据并

Java Socket 编写的 HTTP 服务器应用【转】

??????????????????????? // GIF 图片就读取一个真实的图片数据并返回给客户端
??????????????????????? if(resource.endsWith(".gif")) {
??????????????????????????? fileService("images/test.gif", client);
??????????????????????????? closeSocket(client);
??????????????????????????? continue;
??????????????????????? }

??????????????????????? // 请求 JPG 格式就报错 404
??????????????????????? if(resource.endsWith(".jpg")) {
??????????????????????????????????????????????????? PrintWriter out=new PrintWriter(client.getOutputStream(),true);
??????????????????????? out.println("HTTP/1.0 404 Not found");//返回应答消息,并结束应答
??????????????????????? out.println();// 根据 HTTP 协议, 空行将结束头信息
??????????????????????? out.close();
??????????????????????? closeSocket(client);
??????????????????????? continue;
??????????????????????? } else {
??????????????????????????? // 用 writer 对客户端 socket 输出一段 HTML 代码
??????????????????????????? PrintWriter out=new PrintWriter(client.getOutputStream(),true);
??????????????????????????? out.println("HTTP/1.0 200 OK");//返回应答消息,并结束应答
??????????????????????????? out.println("Content-Type:text/html;charset=GBK");
??????????????????????????? out.println();// 根据 HTTP 协议, 空行将结束头信息

??????????????????????????? out.println("<h1> Hello Http Server</h1>");
??????????????????????????? out.println("你好, 这是一个 Java HTTP 服务器 demo 应用.<br>");
??????????????????????????? out.println("您请求的路径是: " + resource + "<br>");
??????????????????????????? out.println("这是一个支持虚拟路径的图片:<img src='abc.gif'><br>" +
??????????????????????????????????? "<a href='abc.gif'>点击打开abc.gif, 是个服务器虚拟路径的图片文件.</a>");
??????????????????????????? out.println("<br>这是个会反馈 404 错误的的图片:<img src='test.jpg'><br><a href='test.jpg'>点击打开test.jpg</a><br>");
??????????????????????????? out.println("<form method=post action='/'>POST 表单 <input name=username value='用户'> <input name=submit type=submit value=submit></form>");
??????????????????????????? out.close();

??????????????????????????? closeSocket(client);
??????????????????????? }
??????????????????? } catch(Exception e) {
??????????????????????? System.out.println("HTTP服务器错误:"+e.getLocalizedMessage());
??????????????????? }
??????????????? }
??????????????? //System.out.println(client+"连接到HTTP服务器");//如果加入这一句,服务器响应速度会很慢
??????????? } catch(Exception e) {
??????????????? System.out.println("HTTP服务器错误:"+e.getLocalizedMessage());
??????????? }
??????? }
??? }

??? /**
???? * 关闭客户端 socket 并打印一条调试信息.
???? * @param socket 客户端 socket.
???? */
??? void closeSocket(Socket socket) {
??????? try {
??????????? socket.close();
??????? } catch (IOException ex) {
??????????? ex.printStackTrace();
??????? }
??????????????????????????? System.out.println(socket + "离开了HTTP服务器");
??? }

??? /**
???? * 读取一个文件的内容并返回给浏览器端.
???? * @param fileName 文件名
???? * @param socket 客户端 socket.
???? */
??????? void fileService(String fileName, Socket socket)
??? {

??????? try
??????? {
??????????? PrintStream out = new PrintStream(socket.getOutputStream(), true);
??????????? File fileToSend = new File(fileName);
??????????? if(fileToSend.exists() && !fileToSend.isDirectory())
??????????? {
??????????????? out.println("HTTP/1.0 200 OK");//返回应答消息,并结束应答
??????????????? out.println("Content-Type:application/binary");
??????????????? out.println("Content-Length:" + fileToSend.length());// 返回内容字节数
??????????????? out.println();// 根据 HTTP 协议, 空行将结束头信息

??????????????? FileInputStream fis = new FileInputStream(fileToSend);
??????????????? byte data[] = new byte[fis.available()];
??????????????? fis.read(data);
??????????????? out.write(data);
??????????????? out.close();
??????????????? fis.close();
??????????? }
??????? }
??????? catch(Exception e)
??????? {
??????????? System.out.println("传送文件时出错:" + e.getLocalizedMessage());
??????? }
??? }

??? /**
???? * 打印用途说明.
???? */
??? private static void usage() {
??????? System.out.println("Usage: java SimpleHttpServer <port>\nDefault port is 80.");
??? }


??? /**
???? * 启动简易 HTTP 服务器
???? * @param args
???? */
??? public static void main(String[] args) {
??????? try {
??????????? if(args.length != 1) {
??????????????? usage();
??????????? } else if(args.length == 1) {
??????????????? PORT = Integer.parseInt(args[0]);
??????????? }
??????? } catch (Exception ex) {
??????????? System.err.println("Invalid port arguments. It must be a integer that greater than 0");
??????? }

??????? new SimpleHttpServer();
??? }

}

1 楼 贾懂凯 2011-05-28   接下来可以尝试加入servlet,以及过滤其等模块

热点排行