public class WebServer {

    //服务端Socket只要一个,所以定义成static, 同一时间只能一个线程访问(主线程)
private static ServerSocket ss; public static void main(String[] args) throws IOException {
//绑定端口,只会执行一次
ss = new ServerSocket(8999); //远端服务器使用ServerSocket技术打开一个端口,等待请求的到来 //主线程永远不死,所以用了个死循环
while (true) {
//这是一个IO阻塞式语句,也就是如果没有请求(IO操作)进来,当前线程会在此等待,不再向下执行
Socket socket = ss.accept();
         // socket:(本机IP+ 本机端口 +服务端IP+ 服务端端口,用来唯一标示一条TCP联接)通道
//得到请求报文(内容)
StringBuffer sb = new StringBuffer();
PrintWriter pw = null;
try {
InputStream socketIn = socket.getInputStream(); //从通道socket上获得流
BufferedReader br = new BufferedReader(new InputStreamReader(socketIn));
while(true) {
String msg = br.readLine();
sb.append(msg);
System.out.println(msg);
if (msg == null || msg.trim().equals("")) {
break;
}
} //输入响应报文
pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
          // 所发送HTTP数据包 pw.println("HTTP/1.1 200 OK");
pw.println("Content-Type: text/html;charset=UTF-8");
pw.println(); pw.write("html");
pw.flush(); } catch (IOException exception) {
//TODO 处理异常
} finally {
socket.close();
pw.close();
//socket = null;
}
}
}
}
servlet 是单例的 只初始化一次
可以在Web.xml中配置
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
然后在servlet的init函数中获得参数
config.getInitParameter();

publicclass
WebServer {

//服务端Socket只要一个,所以定义成static,
同一时间只能一个线程访问(主线程)

privatestatic
ServerSocket ss;

publicstaticvoid
main(String[] args) throws
IOException {

//绑定端口,只会执行一次

ss
= new
ServerSocket(8999);

//主线程永远不死,所以用了个死循环

while
(true)
{

//这是一个IO阻塞式语句,也就是如果没有请求(IO操作)进来,当前线程会在此等待,不再向下执行

Socket
socket = ss.accept();

//得到请求报文(内容)

StringBuffer
sb = new
StringBuffer();

PrintWriter
pw = null;

try
{

InputStream
socketIn = socket.getInputStream();

BufferedReader
br = new
BufferedReader(new
InputStreamReader(socketIn));

while(true)
{

String
msg = br.readLine();

sb.append(msg);

System.out.println(msg);

if
(msg == null
|| msg.trim().equals(""))
{

break;

}

}

//输入响应报文

pw
= new
PrintWriter(new
OutputStreamWriter(socket.getOutputStream(), "UTF-8"));

pw.println("HTTP/1.1
200 OK");

pw.println("Content-Type:
text/html;charset=UTF-8");

pw.println();

pw.write("html");

pw.flush();

}
catch
(IOException exception) {

//TODO处理异常

}
finally
{

socket.close();

pw.close();

//socket
= null;

}

}

}

}

Java web server 基本实现原理的更多相关文章

  1. Java Web文件上传原理分析(不借助开源fileupload上传jar包)

    Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web   最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...

  2. tiny java web server

    import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; ...

  3. Java Web 开发的JavaBean + Servlet + Sql Server

    日期:2018.12.9 博客期:026 星期日 我知道对于每个人都需要对开发web进行了解,而我们常用的技术,也应该有所了解 /*<------------------->*/知识点: ...

  4. Java Web项目实战第1篇之环境搭建

    写在前面的话 从今天开始一个Java Web实战项目,参考自 http://blog.csdn.net/eson_15/article/details/51277324 这个博客(非常感谢博主的分享精 ...

  5. JAVA Web学习笔记

    JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...

  6. [置顶] Embedded Server:像写main函数一样写Web Server

    1.传统的JEE Web Server 传统的JEE中,如果我们想要部署一个Web Application,我们需要首先安装一个Container Server,如JBoss,WebLogic,Tom ...

  7. JAVA WEB快速入门之环境搭建

    前言 我是一直致力于:.NET技术栈.WEB前端.架构设计相关的开发与管理工作,但因国内大环境影响及公司技术方向发生转变(由.NET全部转为JAVA),需要熟练掌握JAVA WEB相关的知识,故我也得 ...

  8. Tomcat是怎么工作的(2) -- 动手实现山寨版的简单Web Server

    本文先讲解一下Java web server都是怎么工作的.web server也叫HTTP server——顾名思义它是用HTTP协议和客户端交互的.客户端一般就是各种各样的浏览器了.相信所有朋友都 ...

  9. Java Web程序工作原理

    Web开发的最重要的基本功能是HTTP:Java Web开发的最重要的基本功是Servlet Specification.HTTP和Servlet Specitication对于Web Server和 ...

随机推荐

  1. (WA)BZOJ 1503: [NOI2004]郁闷的出纳员

    二次联通门 : BZOJ 1503: [NOI2004]郁闷的出纳员 /* BZOJ 1503: [NOI2004]郁闷的出纳员 考虑这样一个事实 无论是加或减 都是针对全体人员的 那么只需要记录一个 ...

  2. vs2015 调试 无法启动程序

    应用程序输出在这个目录 E:\learn\3dlesson\lesson1_createwindow\build\Debug 项目属性 解决方案: 把项目设为启动项目.

  3. Luogu4191 [CTSC2010]性能优化【多项式,循环卷积】

    题目描述:设$A,B$为$n-1$次多项式,求$A*B^C$在系数模$n+1$,长度为$n$的循环卷积. 数据范围:$n\leq 5*10^5,C\leq 10^9$,且$n$的质因子不超过7,$n+ ...

  4. Magic Points ZOJ - 4032

    The 15th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple Magic Points ZOJ - ...

  5. House Lawn Kattis - houselawn

    Problem You have just bought a new house, and it has a huge, beautiful lawn. A lawn that needs cutti ...

  6. Java实现线程的三种方式和区别

    Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...

  7. pod package 生成 Framework

    pod package 生成 Framework pod package 是 cocoapods 的一个插件,如果没有的话使用以下命令安装: sudo gem install cocoapods-pa ...

  8. arcgis python 把多个MXD批量导出一个PDF

    # -*- coding: cp936 -*- import arcpy, os, string #Read input parameters from script tool mxdList = s ...

  9. git 新建仓库第一次提交

    1 . git init //初始化仓库,在初始化的目录中会出现.git的文件夹 2. git add .(文件name) //添加文件到本地仓   3. git commit -m "fi ...

  10. tensorflow查看ckpt各节点名称

    from tensorflow.python import pywrap_tensorflowimport os checkpoint_path=os.path.join('output/res101 ...