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. win7虚拟机MAC系统

    http://www.cnblogs.com/xiangshancuizhu/p/3379860.html 结果是一个周末的四分之三整进去还到处不行,然后剩下的四分之一卸载.

  2. Chisel-LLDB命令插件,让调试更Easy

    http://blog.cnbluebox.com/blog/2015/03/05/chisel/ LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器.LLDB 绑定在 ...

  3. Linux下如何安装Nginx

    看这就够了 https://segmentfault.com/a/1190000012435644 注意如果是远程浏览器访问是否启动了nginx,出现无法访问 服务器能够启动.访问不了页面 很大可能是 ...

  4. java字符串MD5加密后再转16进制

    话不多说上码 pom.xml <!-- MD5 --> <dependency> <groupId>org.apache.commons</groupId&g ...

  5. Ubuntu安装teamview客户端

    1,下载teamviem客户端的Ubuntu版本 下载地址 https://www.teamviewer.com/en/download/linux/ 2,安装 apt install ./teamv ...

  6. 【ARTS】01_28_左耳听风-201900520~201900526

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  7. python基础----pymysql模块

    安装pymysql   ----pip install mysql 步骤: 1.建立连接   指定ip.端口号.密码.账号.数据库 2.建立游标 3.执行sql语句 4.获取结果或提交 5.关闭游标, ...

  8. (转)svn执行clean up命令时报错“Previous operation has not finished; run 'cleanup' if it was interrupted”

    今天碰到了个郁闷的问题,svn执行clean up命令时报错“Previous operation has not finished; run 'cleanup' if it was interrup ...

  9. OpenGL(5)——变换

    学习三种变换:Scaling, Rotation和Translation. 上学期修了Kobbelt教授(男神!)的图形学基础课,这部分内容已经接触过. 添加GLM库,直接给出齐次坐标系下的变换矩阵和 ...

  10. 热更新之lua框架设计

    目前中大型游戏项目包含部分VR与AR项目,都需要热更新与在线修改Bug等功能实现,虽然Xlua等插件已经给出了关于C#与Lua语言之间的双向无缝调用实现,但是就热更新的架构却没有提出,这需要广大游戏公 ...