JavaWeb之服务器基础

Posted qfdsj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb之服务器基础相关的知识,希望对你有一定的参考价值。

本章内容:

Web项目简介

主流服务器介绍

Tomcat的安装和配置

自定义Web服务器

 

什么B/S和C/S结构?

   B/S 浏览器/服务器

服务器一般是性能强大PC或工作站,安装应用程序服务器软件,如:Tomcat、JBoss,和DBMS如:mysql、Oracle等。

浏览器去访问服务器,不需要安装客户端软件,如:网银、淘宝。

优点:软件安装服务器端,省去客户端更新、维护时间,目前管理系统一般是BS的。

缺点:服务器压力比较大,浏览器不能呈现太复杂的特效。

JavaWEB项目都属于BS结构程序。

C/S 客户端/服务器

需要安装客户端软件,如:QQ、微信、网游。

优点:客户端分担大量工作,可以呈现复杂特效。

缺点:更新和维护比较麻烦。

 

主流Web服务器简介

Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问。开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的Web服务器,比较常用的有Tomcat、Resin、JBoss、WebSphere 和 WebLogic 等

Tomcat 服务器

  目前最为流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型、轻量级的支持JSP和Servlet 技术的Web服务器,也是初学者学习开发JSP应用的首选。

Resin 服务器

  Resin是Caucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。Resin本身包含了一个支持html的Web服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站都是使用Resin服务器构建

JBoss服务器

  JBoss是一个种遵从JavaEE规范的、开放源代码的、纯Java的EJB服务器,对于J2EE有很好的支持。JBoss采用JML API实现软件模块的集成与管理,其核心服务又是提供EJB服务器,不包含Servlet和JSP的Web容器,不过它可以和Tomcat完美结合

WebSphere 服务器

  WebSphere是IBM公司的产品,可进一步细分为 WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server 是基于Java 的应用环境,可以运行于 Sun Solaris、Windows NT 等多种操作系统平台,用于建立、部署和管理Internet和Intranet Web应用程序。

WebLogic 服务器

  WebLogic 是BEA公司的产品(现在已经被Oracle收购),可进一步细分为 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特别强大。WebLogic 支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。对于那些正在寻求能够提供Java平台所拥有的一切应用服务器的用户来说,WebLogic是一个十分理想的选择

 

Tomcat的安装和配置

0、安装JDK

1、配置JAVA_HOME

JAVA_HOME的值为JDK安装目录

2、下载Tomcat

3、配置环境变量

系统变量添加:

CATALINA_HOME 值: Tomcat安装路径

在Path添加: ;%CATALINA_HOME %\bin;

4、测试,打开cmd,输入startup

打开浏览器输入:http://localhost:8080,出现类似下面的页面

 

   

Tomcat目录介绍

bin                               命令执行文件

conf                                    配置文件目录

server.xml               核心配置,如:端口、连接池

tomcat-user.xml     用户配置

web.xml                  web请求配置

lib                                tomcat运行需要的jar包

logs                             日志目录

webapps                            web项目部署目录

work                                   存放项目中的java字节码文件

 

Tomcat和Eclipse的配置

1、打开Server面板

Window > Show View > Other > Server > Servers

2、双击create new server

选择服务器版本,下一步

 

设置Tomcat安装目录

 

3、双击创建的服务器,设置项目部署路径

 

4、创建Web项目

new > dynamic web project

 

下一步到最后,勾中复选框,点击完成

 

5、在WebContent新建HTML页面,右键点击run as server运行。

 

Web项目的目录介绍:

 

src Java源代码

build 字节码目录

WebContent 网页内容(JSP、HTML、JS、CSS、图片)

META-INF 元信息

WEB-INF

web.xml 项目重要组件配置文件

lib 项目需要的jar包(拷贝后会自动导入项目)

 

Web服务器的原理

我们将网站部署到Web服务器上,用户通过浏览器就可以访问服务器上的页面,这个过程是如何实现的呢?

Web服务器都是基于HTTP协议的,当浏览器访问页面时,首先会发送HTTP的请求头给服务器,服务器接受请求后会在web项目的目录中查找浏览器需要的页面文件,然后服务器依次发送响应状态和响应头给浏览器,最后发送网页的HTML代码给浏览器,浏览器接受服务器的数据后会解析HTML文件并显示出来。

 

 

 

下面的案例是通过Socket模拟Web服务器,实现浏览器访问服务器上的页面。

/**

 * 自定义Web服务器

 * @author chenheng

 *

 */

public class MyTomcat {

 

       private static final int PORT = 8888;

       private ExecutorService threadPool = Executors.newFixedThreadPool(10); //创建线程池

       /**

        * 启动服务器

        */

       public void start(){

              System.out.println("服务器启动了");

              try {

                     //创建服务器Socket,监听8888端口

                     ServerSocket server = new ServerSocket(PORT);

                     while(true){

                            //获得客户端的连接Socket

                            Socket socket = server.accept();

                            //启动线程对客户端进行服务

                            threadPool.execute(new ServiceThread(socket));

                     }

              } catch (IOException e) {

                     e.printStackTrace();

              }

       }

      

       public static void main(String[] args) {

              new MyTomcat().start();

       }

 

}

 

/**

 * 为客户端服务的线程

 * @author chenheng

 *

 */

public class ServiceThread implements Runnable{

 

       public static final String DIR = "C:/java_code/web/";

       private Socket socket = null; // 客户端连接

      

       public ServiceThread(Socket socket) {

              this.socket = socket;

       }

 

       @Override

       public void run() {

              //获得客户端的输入流

              try(BufferedReader br = new BufferedReader(

                            new InputStreamReader(socket.getInputStream()))){

                     //读取客户端的请求信息

  String line = br.readLine();

                     //截取出请求头中客户请求的网页地址

                     String url = line.split(" ")[1];

                     System.out.println("url:"+url);

                     if(!url.endsWith(".html")){

                            return;

                     }

                     //在服务器的磁盘上读取该页面文件的内容

                     BufferedReader br2 = new BufferedReader(

                                   new InputStreamReader(new FileInputStream(DIR+url)));

                     StringBuilder strb2 = new StringBuilder();

                     while((line = br2.readLine()) != null){

                            strb2.append(line);

                     }

                     br2.close();

                     System.out.println("HTML:"+strb2.toString());

                     //获得客户端的输出流

                     OutputStream out = socket.getOutputStream();

                     //定义响应状态

                     String status = "HTTP/1.1 200 OK\r\n";

                     byte[] b_status = status.getBytes("UTF-8");

                     //发送响应状态

                     out.write(b_status, 0, b_status.length);

                     //将HTML正文转为字节

                     byte[] html = strb2.toString().getBytes("UTF-8");

                     //定义响应头

                     String response_headers = "Content-Type:text/html;charset=utf-8\r\n"

                                   + "Content-Length:"+html.length+"\r\n";

                     byte[] headers = response_headers.getBytes("UTF-8");

                     //发送响应头

                     out.write(headers);

                     //发送字节作为响应头和正文的分隔

                     out.write(new byte[]{13,10},0,2);

                     //发送正文

                     out.write(html,0,html.length);

                     out.close();

              } catch (IOException e) {

                     e.printStackTrace();

              }

       }

}

以上是关于JavaWeb之服务器基础的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb之服务器基础

JavaWeb基础—会话管理之Cookie

javaWeb基础之Cookie

javaWeb基础之Servlet

javaWeb基础之文件上传和下载

[Java拾遗三]JavaWeb基础之Servlet