Java web server 基本实现原理
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 基本实现原理的更多相关文章
- Java Web文件上传原理分析(不借助开源fileupload上传jar包)
Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web 最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...
- tiny java web server
import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; ...
- Java Web 开发的JavaBean + Servlet + Sql Server
日期:2018.12.9 博客期:026 星期日 我知道对于每个人都需要对开发web进行了解,而我们常用的技术,也应该有所了解 /*<------------------->*/知识点: ...
- Java Web项目实战第1篇之环境搭建
写在前面的话 从今天开始一个Java Web实战项目,参考自 http://blog.csdn.net/eson_15/article/details/51277324 这个博客(非常感谢博主的分享精 ...
- JAVA Web学习笔记
JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...
- [置顶] Embedded Server:像写main函数一样写Web Server
1.传统的JEE Web Server 传统的JEE中,如果我们想要部署一个Web Application,我们需要首先安装一个Container Server,如JBoss,WebLogic,Tom ...
- JAVA WEB快速入门之环境搭建
前言 我是一直致力于:.NET技术栈.WEB前端.架构设计相关的开发与管理工作,但因国内大环境影响及公司技术方向发生转变(由.NET全部转为JAVA),需要熟练掌握JAVA WEB相关的知识,故我也得 ...
- Tomcat是怎么工作的(2) -- 动手实现山寨版的简单Web Server
本文先讲解一下Java web server都是怎么工作的.web server也叫HTTP server——顾名思义它是用HTTP协议和客户端交互的.客户端一般就是各种各样的浏览器了.相信所有朋友都 ...
- Java Web程序工作原理
Web开发的最重要的基本功能是HTTP:Java Web开发的最重要的基本功是Servlet Specification.HTTP和Servlet Specitication对于Web Server和 ...
随机推荐
- Asp.Net跨平台 Jexus 5.8.1 独立版
在Linux上运行ASP.NET网站或WebApi的传统步骤是,先安装libgdiplus,再安装mono,然后安装Jexus.在这个过程中,虽然安装Jexus是挺简便的一件事,但是安装mono就相对 ...
- JS对象-不可扩展对象、密封对象、冻结对象
不可扩展对象 Object.preventExtensions() 仅阻止添加自身的属性.但属性仍然可以添加到对象原型. 可以用 Object.isExtensible(obj) 来判断对象是否可扩展 ...
- ROS机器人开发实践学习笔记2
刚刚开始学习ROS,打算入机器人的坑了,参考教材是<ROS及其人开发实践>胡春旭编著 机械工业出版社 华章科技出品.本来以为可以按照书上的步骤一步步来,但是,too young to si ...
- js-常见算法操作
字符串操作 判断回文字符串 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function palindrome(str){ // \W匹配任何非单词字符.等价于“[^A-Za- ...
- MapReduce On Yarn的配置详解和日常维护
MapReduce On Yarn的配置详解和日常维护 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MapReduce运维概述 MapReduce on YARN的运维主要是 ...
- kotlin中值范围
值范围表达式用rangeTo函数,该函数的操作符形式是二个点(..)另外还有in 和!in 相关操作符,任何可比较的大小的数据类型都可以定义值范围 值范围应用 fun main(arg: Array& ...
- kotlin数据解构
fun main(arg: Array<String>) { val person = person("tom") var (name) = person//解构 pr ...
- Servlet的运行原理
- 一百三十六:CMS系统之发布帖子后台逻辑
模型 class PostModel(db.Model): __tablename__ = 'post' id = db.Column(db.Integer, primary_key=True, au ...
- C# json提取多层嵌套到数组-- C# json 数组
json比一般格式再复杂点的就像数组一样,有多层嵌套,研究了一下,记录代码如下: string jsonText = "{'name':'test','phone':'18888888888 ...