zoukankan      html  css  js  c++  java
  • JavaWeb总结(二)

    Web服务器的缺陷

    Web服务器是被设计用来向客户端提供HTTP服务的,它只能向客户端提供静态网页内容。静态页面是原封不动的待在Web服务器目录中,服务器找到静态网页,并把它原样传回到客户端。每个客户端看到的页面都是一样的。

    - 只能向客户端提供静态网页内容; 

    - 增加一个辅助应用生成动态页面;

    在服务器端进行注册,根据参数查找并运行

     

    Web服务器与辅助应用协同创建动态页面

    服务器端网页编程

    建动态服务器端内容的过程

    - CGI技术

    - 微软的ASP和ASP.NET技术

    - 基于Java的Servlet/JSP技术

    最早的解决方案CGI

    CGI即通用网关接口(Common Gateway Interface),是最早用于创建动态服务器内容的一种技术,使用CGI,Web服务器可以将客户端的请求传递给一个外部程序,这个外部程序可以执行、创建内容,并且将响应传递给客户端;

    最大优点是它可以用Shell、Perl、C、PHP、Python等编写;

     

    CGI程序在Web服务器上的部署图

    CGI的缺陷

    在CGI运行时,每次请求就打开一个CGI进程,严重消耗服务器资源。极大地限制了一个服务器可以支持的并发 CGI用户数量;如果CGI对此处理不好,经常会使Web服务器崩掉。

     

    CGI处理一个请求示意图

     

    CGI处理多个请求示意图

    Java解决方案

    Sevrlet以及Web容器,被设计用来解决CGI问题,为Web开发者创建一个健壮的服务器端环境。Servlet与Web容器在Web服务器上的部署图如下图所示:

    Java解决方案

    - Web容器

    Web容器主要是用于给处于容器中的应用程序组件(Servlet、JSP)提供一个环境,使Servlet、JSP直接跟容器中的环境变量交互。这样,我们就可以把注意力放在用Servlet实现业务逻辑上,而不必关注其它系统问题。 

      - Web容器负责管理和运行Servlet 

      - 容器对Servlet支持包括

        - 通信支持

        - 生命周期管理

        - 多线程支持

        - JSP支持

        - 处理安全性

      - Servlet概述

        Servlet是一个在Web服务器端或者应用服务器端运行的Java程序,主要用户在服务器端产生动态内容。

    import javax.servlet.http.*;
    
    public class HelloWorld extends HttpServlet {
    
        public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{
    
            response.setContentType("text/html");
    
            PrintWriter out = response.getWriter();
    
            out.println("<html>");
    
            out.println("<head>");
    
            out.println("<title>Hello World!</title>");
    
            out.println("</head>");
    
            out.println("<body>");
    
            out.println("<h1>Hello World!</h1>");
    
            out.println("</body>");
    
            out.println("</html>");
    
        }
    
    }

    显示结果为

     

      根据以上代码,可以发现

        - Servlet是常规的Java代码。代码中用了一些新的API,但是不涉及新的语法。

        - Servlet代码中有我们不熟悉的重要语句。Servlet不属于J2SE,它属于单独的规范。

        - Servlet对标准类(HttpServlet)进行了扩展。

        - Servlet没有main()方法。

      - Servlet主要任务

        - 读取客户端发送的显式和隐式数据;

        - 生成结果;

        - 向客户端发送显式数据(即文档)和隐式数据(HTTP响应数据);

      - Servlet与Web容器配合处理请求

        与CGI类似,Servlet允许一个请求被一个程序处理,并且使用同样的程序产生动态的响应。此外,Servlet特别定义了一个有效的生命的周期,使得用单个进程管理所有请求成为可能。它消除了CGI的多进程缺陷,允许多个主进程在多个Servlet和多个请求之间共享资源;

    Servlet处理一个请求示意图

     

    Servlet处理多个请求示意图

    Web服务器应用软件(例如Apache)得到一个指向Servlet的请求时,服务器不是把这个请求交给Servlet本身,而是交给部署该Servlet的容器。容器将创建一个ServletRequest对象和一个ServletResponse对象,用户请求的参数封装在request对象中,然后传递给Servlet。Servlet将响应结果写到了ServletResponse对象中,交给容器再传回给用户。

    HTTP请求和响应在网络中的传递

      - 客户端向Web服务器发起一个HTTP请求。

      - HTTP请求被Web服务器接受,如果请求的是静态页面,则由Web服务器负责处理。如果请求的是Java Web组件(Servlet或者JSP),则移交给Web容器。Web容器可以在主机的同一个进程、不同的进程或其他的Web服务主机的进程中启动。

      - Web容器根据Servlet的配置文件确定调用的具体Servlet类,并把request对象、response对象传给它。

      - Servlet通过request对象知道客户端的使用者是谁,客户的请求信息是什么和其他的一些信息。Servlet处理完请求后把要返回的信息放入response对象返回到客户端。

      - 一旦Servlet完成了请求的处理,Web容器就会刷新response,把控制权返回给web服务器。

    Java Web应用程序的组成 

      - 配置文件

      - 静态文件和JSP

      - 类文件和包

     

    Java Web应用程序组成目录结构

    - /WEB-INF和web.xml

    Servlet规范中定义了一个称为部署描述器的配置文件,这个配置文件用于Web应用程序的一些相关配置信息。

    相关jar包放置在/WEB-INF下面的lib包里面

    创建一个Servlet,就需要在web.xml中配置相关信息

     

    web.xml中的Servlet配置信息

    - Web容器Tomcat介绍

      - 源自于Apache软件基金会Jakarta项目 

      - 满足Servlet和JSP规范要求 

      - 能独立成为一个Web服务器

      - 也是Servlet与JSP的容器

      - Tomcat目录结构介绍

    目录

    功能描述

    bin

    启动脚本和关闭服务器的脚本文件

    common/classes

    服务器及所有的应用都能公用的类文件

    common/lib

    服务器及所有的应用都能公用的jar文件

    shared/lib

    所有的应用都能公用的jar文件

    conf

    存放配置文件,如server.xml

    logs

    日志文件

    server

    包含三个子目录:classes、lib、webapps

    server/classes

    存放Tomcat服务器所需的类

    server/lib

    存放Tomcat服务器所需的各种jar包

    server/webapps

    存放Tomcat自带的两个Web应用:admin和manager

    webapps

    应用程序部署目录

    webapps/root

    默认的部署目录

    webapps/tomcat-docs

    Tomcat文档,包括Servlet和JSP API文档

    work

    由JSP生成的Servlet的存放目录

    - 发布WEB应用

      - 将应用目录打成war包 

      - 部署

        - 在Tomcat目录中部署方法

        - 在Tomcat目录外部署方法 

      - 配置server.xml文件 

    元素名

    属性

    解释

    server

    port

    指Tomcat监听shutdown的端口,默认为8080

    shutdown

    终止服务器时,指定向端口发送的命令字符串

    service

    name

    指定service的名字

    Connector

    port

    指定TCP/IP端口号,默认为8080

    minProcessors

    服务器启动时创建的处理请求的线程数

    maxProcessors

    最大可以处理请求的线程数,默认为200

    enableLookups

    如果为true,则支持域名解析,可以把IP解析为主机。默认为true

    redirectPort

    指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号

    acceptCount

    指定在监听端口号队列的最大客户数,默认为10,如果队列已满,客服请求将拒绝

    Engine

    defaultHost

    指定缺省的处理请求的主机名,它至少与其中一个host元素的name属性值一样的

    Context

    docBase

    Web应用程序的路径或者WAR文件存放的路径

    path

    表示此Web应用程序的url的前缀,这样请求的url为http://localhost:8080/path

    reloadable

    如果为true,则Tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes文件的改动,而不需重新启动

    host

    name

    指定主机名

    appBase

    应用程序基本目录,即存放应用的目录

    unpackWARs

    如果为true,则Tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序

    Logger

    className

    指定logger使用的类名,此类必须实现,org.apache.catalina.Logger接口

    prefix

    指定log文件的前缀

    suffix

    指定log文件的后缀

    Timestamp

    如果为true,则log文件名要加入时间

    Realm

    className

    指定Realm使用的类名

     

      - 配置web.xml文件 

    我不作恶

    但有权拒绝为善

    我不赞同

    但是我捍卫你不为善的权力

  • 相关阅读:
    python---装饰器用法小结
    python---mysql事务
    python---sql语句集体更改数据
    python多继承中的深度优先与广度优先
    python---copy
    vue 主次页面区分
    css 过渡动画
    android web外壳
    cordova 打包 守护进程无法启动
    JavaScript 原生控制元素添加删除
  • 原文地址:https://www.cnblogs.com/HackerBlog/p/5942454.html
Copyright © 2011-2022 走看看