Java web基础总结三之—— java web 服务器

Java web基础总结三之—— java web 服务器

一.什么是java web服务器

首先来看一下什么是web服务器,它一般指网站服务器,是指一个再互联网一个主机上的一个程序。它可以解析客户端发送来的遵循http协议的请求,并且经过逻辑业务处理后,以http协议向浏览器等Web客户端提供文档。

互联网上供外界访问的Web资源可以分为两种:一个是静态web资源(如html 页面),指web页面中供人们浏览的数据始终是不变。另一个动态web资源,指web页面中供人们浏览的数据是由程序动态产生的,不同的时间访问web页面看到的内容各不相同,现在的web页面基本都是动态的。常用动态web资源开发技术:JSP/Servlet、ASP、PHP等。

一般我们把动态web页面的开发称为javaweb技术,所以通常所说的java web服务器也可以认为是遵循全部JSP/Servlet规范的容器。所谓的容器就是它实现了java定义的JSP/Servlet的接口规范,可以对JSP/Servlet的创建,运行,销毁等整个生命周期进行管理。

servlet 容器的实现是非常复杂的。但是主要还是实现了三个过程:首先创建一个实现了javax.servlet.ServletRequest 接口或javax.servlet.http.ServletRequest 接口的 Request 对象,并用请求参数、请求头(headers)、cookies、查询字符串、uri 等信息填充该 Request对象;紧接着,创建一个实现了javax.servlet.ServletResponse或javax.servlet.http.ServletResponse
接口的 Response 对象;调用相应的servlet 的服务方法,将先前创建的 request 对象和 response 对象作为参数传入。接收请求的 servlet 从 request 对象中读取信息,并将返回值写入到 response 对象。然后把这个response 对象转换成http报文传到客户端。

二.自己实现一个最简单的java web服务器

由于http协议是基于tcp/ip协议之上的,所以只需要使用ServerSocket和Socket就可以实现一个非常简单的http服务器。下面是一个类似于hello world的最简单,最简陋的http服务器。没有对请求进行处理,对于所有的客户端请求都返回hello world。

package com.c;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class HTTPServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket=new ServerSocket(8080);

            while(true){
                Socket socket=serverSocket.accept();
                System.out.println("-------");
                PrintWriter printWriter=new PrintWriter(socket.getOutputStream());
                //封装http响应报文
                printWriter.println("HTTP/1.1 200 OK");
                printWriter.println("Content-type:text/html");
                printWriter.println();
                //发送hello world
                printWriter.println("<h1>hello world</h1>");
                printWriter.flush();
                socket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
三.常见的几个java web服务器
1.  WebLogic

WebLogic是BEA公司的产品,是目前应用最广泛的Web服务器,支持J2EE规范,当然是商业的,所以需要付费。

2.       WebSphere

它是IBM公司开发的,支持J2EE规范。一般用于保险,银行等等核心交易系统。跟钱有关的业务系统很多都是用的WebSphere Application Server。所以性能高,同样的也不是免费的。

3. Apache

Apache开源组织有一个很优秀的开源web服务器:Tomcat,在小型的应用系统使用比较广泛,该服务器支持全部JSP以及Servlet规范,现在有很多的商业公司也会在生产环境使用它。

四.Tomcat服务器简介
1.      tomcat 的安装

它的下载地址是:http://tomcat.apache.org/.下载时,tar.gz文件是Linux操作系统下的安装版本。zip文件是Windows系统下的压缩版本。对于windows版本,下载以后,直接解压,双击 bin 目录下的 startup.bat 文件,或者在命令行下使用命令启动。输入http://localhost:8080/ 出现一个三条腿的汤姆猫就代表安装成功了。

2.      Tomcat 的目录层次结构:

我们的web项目都会部署到webapps这个目录下。然后tomcat就会自动进行管理。这个目录下面可以同时部署多个项目,但是一般正式的生产环境都会在一个tomcat实例中只部署一个项目。

时间: 2024-10-25 22:59:10

Java web基础总结三之—— java web 服务器的相关文章

【Java面向对象基础(三)】面向对象思想

[喵"的Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinking in Java中提到“Everything is an object”,即万物皆对象.这里的“对象”指的是任何实体或者任何可以当作实体看待的“虚幻的事物”.比如现实中的人(男人.女人.老人.小孩而...).动物(大象.狮子.猴子...).桌子.凳子.汽车.ATM机等等,也可以使看不见摸不着的空气(氧气.二氧化碳.氮气

Java Script基础(三) 函数

Java Script基础(三) 函数 一.JavaScript中的函数 在JavaScript中,函数类似于Java中的方法,是执行特定功能的代码块,可以重复调用.JavaScript中的函数分为两种,一种是系统函数,另一种是自定义函数. 1.系统函数 系统函数有JavaScript提供,直接调用即可,常用的系统函数包括: parseInt():转换为整数. parseFloat() :转换为浮点数. isNaN():判断是否是非数字,为非数字返回true,数字返回false. eval():

Java深度历险(三)——Java线程?:基本概念、可见性与同步

开发高性能并发应用不是一件容易的事情.这类应用的例子包括高性能Web服务器.游戏服务器和搜索引擎爬虫等.这样的应用可能需要同时处理成千上万个请求.对于这样的应用,一般采用多线程或事件驱动的架构.对于Java来说,在语言内部提供了线程的支持.但是Java的多线程应用开发会遇到很多问题.首先是很难编写正确,其次是很难测试是否正确,最后是出现问题时很难调试.一个多线程应用可能运行了好几天都没问题,然后突然就出现了问题,之后却又无法再次重现出来.如果在正确性之外,还需要考虑应用的吞吐量和性能优化的话,就

java学习笔记(三)java中的修饰符abstract、static与final

一.四种访问级别的访问范围 访问级别 访问修饰符 同类 同包 子类 不同的包 公开 public 受保护 protected 默认 没有访问修饰符 私有的 private 二.使用abstract修饰符需要遵守的语法规则 1.抽象类中可以没有抽象方法,但是包含抽象方法的类必须定义为抽象类,即用abstract修饰: 2.抽象类跟抽象方法不能被final修饰符修饰: 3.抽象类中可以有非抽象方法,因为继承抽象类的子类必须重写父类中所有的抽象方法,因此抽象类中不能有抽象构造方法和抽象静态方法: 4.

Java多线程基础(四)Java传统线程同步通信技术

Java多线程基础(四)Java传统线程同步通信技术 编写代码实现以下功能 子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次. 分析 1)子线程循环10次与主线程循环100次必须是互斥的执行,不能出现交叉,下面代码中通过synchronized关键字实现此要求: 2)子线程与主线程必须交替出现,可以通过线程同步通信技术实现,下面代码中通过bShouldSub变量实现此要求: 其他需要注意的地方 1)其中business变量必须声

Java 反射理解(三)-- Java获取方法信息

Java 反射理解(三)-- Java获取方法信息 基本的数据类型.void关键字,都存在类类型. 举例如下: public class ClassDemo2 { public static void main(String[] args) { Class c1 = int.class;//int 的类类型 Class c2 = String.class;//String类的类类型,可以理解为String类字节码 Class c3 = double.class; Class c4 = Doubl

Java Web基础(三)(HttpServletRequest-请求基础)

之前已经详细讲解了Servlet/JSP的基础知识,包括Servlet和JSP的关系.Servlet基本的编写和配置,以及一个请求/响应过程中,HTTP服务器.web容器.Servlet是如何配合工作的. 对于一个web应用程序来说,请求/响应是其工作工程的基础,我们这里只考虑基于HTTP协议的请求/响应模型,HttpServletRequest代表请求及相关参数,HttpServletResponse代表响应及相关参数,这两个对象会随着一个请求的发起而建立,随着一个响应的结束而销毁被回收.当一

Java学习之路(三):Java中的数组

数组的概述和定义的格式 数组的作用: 用来存储同种数据类型的多个值 数组的基本概念: 数组是存储同一种数据类型多个元素的集合.就相当于一个容器. 注意:数组既可以存储基本数据类型,也可以存储引用数据类型. 数组的定义格式: 数据类型[] 数组名 = new 数据类型[指定数组的长度] 数组的初始化 概念: 就是为数组开辟连续的内存空间,并且为每个数的元素赋值 如何初始化: 动态初始化:指定长度,有系统给出初始化值  int[] arr = new int[5] 静态初始化:给出初始化的值 格式:

java并发基础(三)

第6章开始是第二部分,讲解结构化并发应用程序,大多数并发应用程序都是围绕"任务执行"构造的,任务通常是一些抽象的且离散的工作单元. 一.线程池 大多数服务器应用程序都提供了一种自然的任务边界:以独立的客户请求为边界.现在我们要实现自己的web服务器,你一定见过这样的代码: class SingleThreadWebServer { public static void main(String[] args) throws IOException { ServerSocket socke