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;

}

}

}

}

时间: 2024-10-10 01:12:38

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

maven构建java web项目(eclipse原理同)

maven构建java web项目 1.  mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp 如果是用eclipse,则可以新建webapp的maven工程.以下同. 2. 再pom.xml中加入 <build> <finalName>gswm-web</finalName> <plugins> <plugin> <groupId>org.apach

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

本文先讲解一下Java web server都是怎么工作的.web server也叫HTTP server——顾名思义它是用HTTP协议和客户端交互的.客户端一般就是各种各样的浏览器了.相信所有朋友都清楚这个基本事实,否则你也不会看到这个系列文章了. 基于Java的web server必然用到两个极其重要的类:java.net.Socket和java.net.ServerSocket,然后以HTTP消息进行交互. 1. HTTP协议简介(The Hypertext Transfer Protoc

JAVA WEB快速入门之环境搭建

前言 我是一直致力于:.NET技术栈.WEB前端.架构设计相关的开发与管理工作,但因国内大环境影响及公司技术方向发生转变(由.NET全部转为JAVA),需要熟练掌握JAVA WEB相关的知识,故我也得顺应潮流,” 精通 “ JAVA  ^ v ^,当然.NET CORE也是我同步学习与研究的方向,甚至还有PYTHON,活到老学到老. JAVA我之前也涉猎过一些,也看过一些JAVA代码,但并没有系统的学习及深入的了解JAVA WEB框架及底层原理,我准备借此机会,由基础到入门到熟练,由浅入深的全面

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

2016.5.5(Java Web工作原理)

建动态服务器端内容的过程 CGI技术 微软的ASP和ASP.NET技术 基于Java的Servlet/JSP技术 HTTP是一种超文本协议,一种无状态的协议 HTTP请求分为:1.请求行 2.请求头 3.消息体 4.分隔请求头 5.消息体空行 HTTP 1.1 版本中,定义了有八种可能的HTTP请求方法:1.get:用于向服务器检索资源.(查找)2.post:用于向服务器发送数据,并要求指定的url处理.(新增输入)3.head:与get方法相同,服务器只返回转台行和头标,并不返回请求文档.4.

浅析Java web程序之客户端和应用服务器端交互原理

最近一直在思考一个问题,为什么在用struts框架开发的时候FormBean都需要序列化,即实现java.io.Serializable接口,本着勤学好问的精神我Google了下对象序列化方面的文章,虽然大体了解了怎么做,但是还是没有搞清楚为什么要这样做:最后我想解决一个问题要找问题的根源和本质,于是从web程序客户端和服务器端交互的原理入手,终于找到了我要的答案. 1. 对象序列化是什么东东? 简单地说,Java对象列化就是要把内存中的Java对象保存下来(持久化),以便可以在网络上传输或今后

java web 工作原理

HTTP是一套计算机在网络中通信的一种规则 HTTP请求包含请求行.请求头.空行和消息体 HTTP响应包含状态行.响应头.空行和消息体 Web服务器存在缺陷 CGI程序严重消耗服务器资源,Servlet可以消除这种缺陷 Web容器给处于容器中的应用程序组件提供一个环境 一个web应用程序包括配置文件.静态文件.JSP.类文件和包 Tomcat既是一个优秀的JSP/Servlet容器,也是一个HTTP服务器 server.xml和web.xml是Tomcat主要的配置文件 welcome-file

Java Web工作原理

学习Java Web应用程序开发,首先需要了解其核心的基础内容,即HTTP协议.HTTP协议是一种超文本传输协议,用于在计算机网络中的通信.一个完整的web应用程序由网页应用程序,客户端浏览器,web服务器,以及HTTP协议四部分组成.HTTP协议作为连接浏览器和web服务器的纽带,在web应用开发中起着重要作用. HTTP协议中定义的事物处理主要分四步:第一步,建立客户端和服务器之间的连接.第二步,由客户端向服务器发送HTTP请求.第三步,服务器结束到HTTP请求后,进行处理,生成HTTP响应

深入理解Web Server原理----在CC3200 WiFi模块上构建轻量级Web Server

作为博客园的处女作,本文将引导大家理解Web Server的原理. Table of contents 常见Web Server及其功能 低功耗WiFi 嵌入式Web Server的应用 Energia Project无缝支持Arduino框架在TI LaunchPad上的扩展 基于CC3200如何构建一个嵌入式Web Server 做过Web开发的同学都知道,Web Server是用来处理http(POST.GET.PUT.DELETE等)请求的系统,有大名鼎鼎的Apache http Ser