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和 ...
随机推荐
- 在Android中使用OpenGL ES进行开发第(一)节:概念先行
一.前期基础是知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGL ES绘制 ...
- python3实现互信息和左右熵的新词发现--基于字典树
字典树 原来讲明白了剩下的就是具体实现了,最适合存储和计算词频的数据结构就是字典树,这里给一个讲解的很清楚的链接 具体代码 代码已开源,需要的点击这个Github
- re匹配 [\s\S][\w\W]的使用.
本来想提取一个字符串写了一堆正则都提取不出来. 因为有特殊字符 后来使用 [\s\S]* 或 [\w\W]* 匹配出来. \s 空白字符 [ \t\n\r\f\v] \S 非空白字符 相当于 [^ \ ...
- python爬虫demo01
python爬虫demo01 1 import requests, json, time, sys 2 from bs4 import BeautifulSoup 3 from contextlib ...
- Flask 编写一个授权登录验证的模块(二)
本篇比上一篇多了重定向的功能 #!/usr/bin/env python # -*- coding: utf-8 -*- #python3 import base64 import random im ...
- flask 设置配置文件的方式
from flask import Flask from flask import current_app """ 配置参数设置与读取 """ ...
- 安装使用VUE
安装使用VUE 如果是简单实用vue的话,可以直接引用js文件. https://vuejs.org/js/vue.js 但是在构建大型项目的时候推荐使用NPM安装,NPM能够很好的和诸如webpac ...
- Linunx创建软连接、删除软连接、修改软连接
创建: ln -s [目标目录] [软链接地址] ln -s /usr/local/python3/bin/python3 /usr/bin/python3ln -s /usr/local/pytho ...
- SQL-W3School-基础:SQL INSERT INTO 语句
ylbtech-SQL-W3School-基础:SQL INSERT INTO 语句 1.返回顶部 1. INSERT INTO 语句 INSERT INTO 语句用于向表格中插入新的行. 语法 IN ...
- Vs code调试Dart语言
1.下载Dart SDK,地址:Dart Windows下载 安装稳定版本,安装完看看有没有配置系统变量. 2.在VS code中安装Dart和Code Runner插件: 3.如果Dart有乱码输出 ...