zoukankan      html  css  js  c++  java
  • javaweb(tomcat部署项目)

    软件体系结构

    1. C/S:Client/Servlet,例如QQ就是CS结构
    需要编写服务器端程序和客户端程序。
    缺点:更新需要两端,总要求客户下载新的客户端程序
    优点:安全性比较好

    2. B/S:Browser/Server
    缺点:安全性较差
    优点:只需要编写服务器端程序

    3. Web资源
     * 静态资源:html、css、javascript、图片等;
     * 动态资源:javaweb的动态资源有jsp/servlet,其他web程序动态资源有asp、php等。

    4. 静态资源和动态资源的区别
     * 客户端访问服务器静态资源,服务器直接响应;
     * 客户端访问服务器动态资源,服务器需要先把动态资源转换成静态资源,再响应。

    5. 客户端通过浏览器访问服务器
     * http://主机名:端口号/路径,例如:http://www.baidu.com/index.html

    6. Web服务器
     * Tomcat(Apache):当前应用最广的JavaWeb服务器,支持servlet规则,不支持JavaEE规范;
     * JBoss(Redhat红帽):支持JavaEE规则;
     * GlassFish(Orcale):支持servlet规则,应用不是很广;
     * Resin(Caucho):支持JavaEE规则,应用越来越广;
     * Weblogic(Orcale):要钱的!支持JavaEE规则,适合大型项目;
     * Websphere(IBM):要钱的!支持JavaEE规则,适合大型项目;

    ===================================
    ===================================
    ===================================

    Tomcat

    tomcat6支持servlet2.5
    tomcat7支持servlet3.0

    1. 启动关闭tomcat
      需要先配置JAVA_HOME
      * 双击%CATALANA_HOME%instartup.bat
      * 双击%CATALANA_HOME%inshutdown.bat

     访问服务器:http://localhost:8080/index.jsp
      因为服务器在本机上,所以主机名为localhost,表示本机
      tomcat的默认端口为8080
      index.jsp是主页

    2. 修改端口号
      * 修改端口号,%CATALANA_HOME%confserver.xml,修改<Connector port="8080">,把8080修改了即可。
      * http协议默认端口为80,也就是说http://localhost,等同与http://localhost:80

      如果把Tomcat端口号修改成80,那么访问服务器就可以无需再给出端口号。

    3. tomcat目录结构

     * bin:二进制可执行文件,例如startup.bat和shutdown.bat
     * conf:配置文件,例如:server.xml、context.xml、web.xml、tomcatusers.xml
     * lib:tomcat所需jar包
     * logs:日志文件
     * temp:存放tomcat运行时产生的临时文件,当tomcat关闭后,这个目录中的文件可以删除
     * webapps:这个目录下的每个文件夹对应一个JavaWeb应用程序
     * work:webapps下的应用程序在运行时会自动生成文件,就在work目录下。work目录删除了也没问题,但再次运行应用程序还要再生成work目录和文件。

    4. 创建JavaWeb目录:hello
     * 在webapps目录下创建一个hello目录,hello目录就是项目目录了;
     * 在hello目录下创建WEB-INF
     * 在WEB-INF下创建web.xml
     * 在WEB-INF下创建classes目录
     * 在WEB-INF下创建lib目录
     * 在hello目录下创建index.html

      在web.xml文件中添加如下内容:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    </web-app>

      在index.html中添加如下内容:
    <html>
      <head><title>index.html</title></head>
      <body>
        <h1>hello主页</h1>
      </body>
    </html>
      启动tomcat,打开客户端访问http://localhost:8080/hello/index.html

    ===================================

    配置外部应用
      外部应用既是把应用程序不放到Tomcat的wabapps目录下!而已放在外面,例如:F:/hello

    1. 在conf/server.xml下配置,指定外部应用的路径。

    <Host name="localhost" appBase="webapps"
          unpackWARs="true" autoDeploy="true">
          <Context path="hello" docBase="F:/hello"/>
    </Host>

      * 在<Host>元素下添加<Context>元素,path为URL访问路径,docBase为外部应用的目录。
      * 在浏览器地址栏中访问:http://localhost:8080/hello/index.html

    2. 在conf/catalana/localhost下添加配置文件,指定外部应用路径
      * 在conf/catalana/localhost目录下创建hello.xml文件,其中hello就是URL访问路径
      * 在hello.xml文件中添加:<Context docBase="F:/hello"/>,docBase指定外部应用的目录。

    3. 缺省web应用
      * 在webapps目录下有一个ROOT目录,它是缺省web应用,访问这个应用的路径:http://localhost:8080/index.jsp
      * 如果把web应用的内部放到webapps/ROOT下,访问URL路径中不用给出应用名称。

    4. 配置虚拟主机
      希望:http://www.baidu.com访问web应用。
      * 这需要把域名http://www.baidu.com映射成IP地址:127.0.0.1
      * 需要把tomcat端口号修改为80
      * 需要在server.xml中配置主机,并指定主机的应用目录
      * 在应用目录中添加名为ROOT的web应用。

      1). 找到C:WINDOWSsystem32driversetchosts文件,添加127.0.0.1 http://www.baidu.com
      2). 在conf/server.xml中修改端口为80
      3). 在conf/server.xml中添加<Host>元素
    <Host name="www.baidu.com" appBase="F:/myapps" unpackWARs="true" autoDeploy="true">
    </Host>
        * name:指定该主机域名为www.baidu.com
        * appBase:指定该主机的应用目录为F:/myapps
      4). 在F:/myapps下创建名为ROOT的web应用。

      访问:http://www.baidu.com/index.html
      其中www.baidu.com在本机上会被解析为127.0.0.1,但其他电脑访问时无效。

    ===================================

    使用MyEcipse创建Web项目

    1. MyEclipse指定Tomcat
    2. MyEclipse创建Web项目
    3. MyEclipse发布Web项目到Tomcat下
    4. MyEclipse启动关闭Tomcat
    5. MyEclipse对已发布项目的修改会对tomcat下项目的进行修改

      MyEcipse是JavaWeb应用的开发环境,而不是运行环境!运行还是在Tomcat下运行。

      使用MyEclipse打war包,把war包发布到Tomcat下。

    ===================================

    Tomcat管理页面

    ===================================
    ===================================
    ===================================

    HTTP协议

    1. 安装HttpWatch

    2. http协议
      * 即超文本传输协议。它规定了浏览器与服务器之间的通讯规则。
      * http是基于请求/响应模式的,所以分为请求协议和响应协议

    ===================================

    请求

      请求内容就是客户端发送给服务器的数据!

    1. 请求格式:
      * 请求首行
      * 请求头
      * 空行
      * 请求体(或称之为请求正文)

    2. 请求方法
      * 常见请求方法有GET和POST
      * 在浏览器地址栏中发送请求,以及点击超链接都是GET请求
      * 提交表单可以发送GET请求,以及POST请求
      * GET请求没有请求体,但空行是存在的
      * POST请求是存在请求体的

    3. 使用HttpWatch获取请求信息
      * 请求行:请求方法 请求路径 请求协议及版本,例如:GET /hello/index.jsp HTTP/1.1
      * 请求头:请求头就是一些键值,格式为:头:值,例如:Host:localhost
      * 空行:就是一个空行,用来与请求体分隔
      * 请求体:GET方法没有请求体,POST才有请求体,请求体内容为:参数名=参数值&参数名=参数值,其中参数值为中文,会使用URL编码。

    4. 常见请求头
      * Host:请求的服务器主机名
      * User-Agent:客户端浏览器与操作系统相关信息
      * Accept-Encoding:客户端支持的数据压缩格式
      * Connection:客户端支持的连接方式
      * Cookie:客户端发送给服务器的“小甜点”,它服务器寄存在客户端的。如果当前访问的服务器没有在客户端寄存东西,那么就不会存在它!
      * Content-Length:请求体的长度
      * Referer:当前发出请求的地址,例如在浏览器地址栏直接访问服务器,那么没有这个请求头。如果是在www.baidu.com页面上点击链接访问的服务器,那么这个头的值就是www.baidu.com
        > 作用1:统计来源
        > 作用2:防盗链
      * Content-Type:如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码。

    ===================================

    响应

      响应就是服务器发送给客户端的数据!

    1. 响应格式:
      * 响应首行
      * 响应头
      * 空行
      * 响应体(或称之为响应正文)

    2. 状态码
      响应首行的结构:协议及版本 状态码 状态码说明,例如:HTTP/1.1 200 OK

      * 200:请求成功
      * 302:请求重定向
      * 304:请求资源没有改变
      * 404:请求资源不存在,属性客户端错误
      * 500:服务器内部错误

    3. 响应头
      * Content-Type:响应正文的MIME类型,例如image/jpeg表示响应正文为jpg图片,例如text/html;charset=utf-8表示响应正文为html,并且编码为utf-8编码。浏览器会通过这一信息来显示响应数据
      * Content-Length:响应正文的长度
      * Set-Cookie:服务器寄存在客户端的“小甜点”,当客户端再次访问服务器时会把这个“小甜点”还给服务器
      * Date:响应时间,可能会有8小时的误差,因为中国的时区问题

      通知客户端浏览器不要缓存页面的响应头:
      * Expires:-1
      * Cache-Control: no-cache
      * Pragma: no-cache

      自动刷新响应头,浏览器会在3秒钟后自动重定向到传智主页
      * Refresh: 3;url=https://www.baidu.com

    4. 状态码304
     相关头信息
      * Last-Modified:响应头,表示当前资源的最后修改时间;
      * If-Modified-Since:请求头,表示缓存的资源最后修改时间;

     状态码304:表示访问的资源没有改变

      1. 客户端首次访问服务器的静态资源index.html,服务器会把index.html响应给客户端,而且还会添加一个名为Last-Modified的响应头,它说明了当前index.html的最后修改时间
      2. 客户端收到响应后,会把index.html缓存在客户端上,而且还会把Last-Modified缓存起来。
      3. 客户端第二次请求index.html时,会添加名为If-Modified-Since的请求头,它的值是上次服务器响应头Last-Modified,服务器获取到客户端保存的最后修改时间,以及当前资源的最后修改时间进行比较,如果相同,说明index.html没有改动过,那么服务器不会发送index.html,而是响应状态码304,即通知客户端资源没有改变,你可以使用自己的缓存。

    tomcat:

    如果你的项目中使用了过多的jar包,可能会导致Java方法区内存溢出。

    在%CATALINA_HOME%incatalina.bat文件中添加如下内容:set JAVA_OPTS=-Xms128m -Xmx256m

    rem ----- Execute The Requested Command ---------------------------------------
    set JAVA_OPTS=-Xms128m -Xmx256m

    echo Using CATALINA_BASE:   "%CATALINA_BASE%"
    echo Using CATALINA_HOME:   "%CATALINA_HOME%"
    echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"



    动态资源:需要转换成静态资源后再响应给客户端,例如:jsp、servlet,其他语言的动态资源有:asp、php
    静态资源:无需转发即可直接响应给客户端,例如:html、css、javascript

    ------------------------

    Tomcat:
    1. 开源免费的web服务器
    2. jsp/servlet容器,支持Servlet规范
    3. Tomcat默认端口为8080,可以在server.xml文件中修改端口
    4. Tomcat启动前必须配置JAVA_HOME环境变量
    5. Tomcat不支持JavaEE规范

    ------------------------

    Tomcat主要目录结构:
    bin:二进制可执行文件,包含启动和关闭tomcat文件;
    conf:配置文件,其中包含了server.xml、context.xml、web.xml等;
    webapps:存放应用程序的目录

    ------------------------

    JavaWeb应用程序的标准目录结构

    应用目录/WEB-INF
    应用目录/WEB-INF/web.xml
    应用目录/WEB-INF/classes
    应用目录/WEB-INF/lib

    ------------------------

    创建JavaWeb应用程序流程:

    1. 创建web项目目录
    2. 设计web项目目录结构
    3. 编写web项目代码
    4. 部署web项目到Tomcat的webapps目录下
    5. 运行web项目

    ------------------------

    访问web项目资源:
    例如:项目名为hello,有index.html文件在hello目录下
    访问路径为:http://localhost:8080/hello/index.html

    ------------------------

    发布项目的三种方式:
    1. 把项目放到webapps下
    2. 在server.xml中配置项目路径
    3. 在conf/caalina/localhost/下创建xml,然后配置项目路径

    ------------------------

    http协议的格式

    1. 首行
    2. 头
    3. 空行
    4. 体

    ------------------------

    http请求头:
    * Referer:请求来自哪里,如果是在http://www.baidu.com上点击链接发出的请求,那么Referer的值为http://www.baidu.com。如果是直接在浏览器地址栏中直接输入的地址发出的请求,那么Referer为空。
      用途:
        * 统计来源:例如通过百度访问本网站的次数
        * 防盗链:例如防止非点击本站链接来直接访问本站资源的行为

    ------------------------

    http响应头:
    三种禁用浏览器缓存的响应头
    * Expires: -1
    * Cache-Control: no-cache
    * Pragma: no-cache



    ------------------------

    状态码:
    200 --> 成功
    302 --> 请求重定向
    304 --> 请求资源没有改变
    404 --> 请求的资源不存在,属性客户端错误。
    500 --> 服务器内部错误


    ------------------------

    GET请求:
    1. 请求数据长度不能超过1K
    2. 请求参数会在浏览器地址栏中显示出来
    3. GET请求没有请求体(请求正文),参数是追加在url后面

    POST请求:
    1. 请求数据没有上限
    2. 请求参数不会在浏览器地址栏中显示
    3. 有请求体(请求正文)
    4. 请求参数默认使用URL编码








    1. html + css + javascript,前端
      * javascript:
        > 基本语法
        > BOM、DOM
    2. xml
      * 格式
      * 约束:DTD(看懂即可)、Schema(看不懂也行,名称空间要明白)
      * 解析:
        > DOM4J应用!
        > DOM、SAX:这两规范!
          * DOM:它关注的不是怎么去解析,而关注解析的结果是一个Document对象,文档树!
          * SAX:它关注的过滤,基于事件驱动!它不关注解析的过程!
      > JAXP:它是由Java提供的一组抽象类,它是一个抽象层!它也不是解析器! (抽象工厂!)
          * System.getProperties中查找实现类
          * java安装目录下的某个位置
          * classpath下jar中servies下的javax.xml.parsers.DocumentBuilderFactory
          * 自己有个默认类,其实就是xerces修改之后的版本!
      > xerces:它是DOM和SAX解析的实现,是真正的解析器!它也实现了JAXP提供的接口和抽象类!

    3. Tomcat
      * 安装:
        >  配置JAVA_HOME
      * 目录结构:
        > bin:startup.bat、shutdown.bat
        > lib:支持tomcat运行的jar包
        > conf:四大配置文件:
          * server.xml:主配置文件
          * context.xml:这里的配置等同与给所有的应用添加了<Context>元素配置
          * web.xml:它是所有的应用中的web.xml中的父文件!这里的东西等同与写在每个应用中的web.xml中
          * tomcat-users.xml:这个配置tomcat管理员的文件!
        > temp:tomcat运行时生成的临时文件,在关闭tomcat后,这个目录中的内容可以删除
        > logs:日志文件
        > webapps:这里的每个目录都是一个Web应用!
        > work:tomcat会把编译后的jsp生成的.java和.class文件存放在这里
      * 配置tomcat应用
        * webapps下
        * 外部应用:
          > server.xml中<Host>下添加<Context>元素
          > 在conf/catalina/localhost/添加自定义xml文件,在xml文件中添加<Context>元素
        * 虚拟主机:
          > 在Server.xml文件配置一个<Host>,指定虚拟主机的路径!在该路径下创建应用,这个路径等同与webapps

    4. HTTP
      * 请求协议
        > 请求首行:
          * 请求方式
          * 协议和版本
          * 请求路径
        > 请求头:
          * Host:请求的服务器主机和端口号
          * User-Agent:包含了客户端的浏览器以及操作系统信息
          * Referer:请求的来源
            > 防盗链
        > 统计来自
        > 请求体:
          * POST请求方式有体,其中中文会被URL编码
          * GET请求方式没体,参数需要在URL之后
     
      * 响应协议
        > 响应首行
          * 状态码
            > 200:成功
        > 302:重定向
        > 404:访问的资源找不到
        > 500:服务器报错
          * 对状态码的文本解释
          * 协议和版本
        > 响应头
          * Content-Type:响应内容的类型,若是文本类型,还需要指定编码!服务器响应的内容类型!
          * Location:在状态码为302时,必须存在这个头,它是浏览器下一个请求的目标地址!
        > 响应体
          * 响应的主体部分,通常是HTML,浏览器会解读它!

     5. Servlet
       * Servlet的生命周期
         > void init(ServleConfig config):Servlet创建之后,马上调用!
           * Servlet在第一次被访问时,Tomcat会创建它
           * Servlet会在tomcat启动时被创建
         > void service(ServletRequest,ServletResponse)
           * 每次处理请求时都会实被调用
         > void destroy()
           * Tomcat在销毁Servlet之前调用该法
             > 在关闭Tomcat时

       * GenericServlet
         > 提供了init():由init(ServletConfig)来调用,而init(ServletConfig)会先保存ServletConfig到本类成员中
         > 提供了getServletContext()方法,内部使用ServletConfig完成
         > 提供了获取初始化参数的方法,内部使用ServletConfig完成
         > 提供了destory()空方法
       * HttpServlet
         > service(HttpServletRequest, HttpServletResponse):获取请求方式,通过请求方式来决定是调用doGet()、还是doPost()
         > doGet():默认为响应405,所以我们需要覆盖它!
         > doPost():默认为响应405,所以我们需要覆盖它!

     6. ServletContext
       * 它是一个域对象:一个应用只有一个Servletcontext对象!
         > setAttribute()
         > getAttribute()
         > removeAttribute()
       * 获取真实路径:getRealPath(),得到的路径是包含盘符的!不是以http开头的!
       * 获取MIME类型,getMimeType(),给它一个文件名称,它会返回一个MIME类型,例如:image/jpeg

     7. Request和Response
       * Response:
         > 发送状态码:
           * setStatus()
           * sendError()
         > 发送响应头:
           * setHeader(String,String)
           * addHeader(String,String)
         > 发送响应体
           * PrintWriter response.getWriter()
           * ServletOutputStream response.getOutputStream();
           * 在一个请求内两个只能用一个
         > 便捷方法:
           > setContentType():设置Content-Type响应头的便捷方法。
             * 设置Content-Type响应头,用来告诉浏览器当前响应内使用的文本编码
         * 把响应体使用该编码进行处理
           > sendRedirect():重定向的便捷方法

      8. 编码问题
        > 请求:
          * GET:先获取,再重编
          * POST:在获取之前,调用request.setCharacterEncoding("utf-8")
        > 响应:response.setContentType("text/html;charset=utf-8");
     
     9. Cookie和session
       Cookie:
         * HTTP协议的一部份
         * 底层依赖:Cookies请求头,和Set-Cookie响应头
         * Cookie保存在客户端
         * 发送Cookie给浏览器:response.addCookie(cookie);
         * 获取浏览器的Cookie:Cookie[] cs = request.getCookies();
         * Cookie的生命:
           > 0:指定的在客户端存活的秒数
           < 0:指定只在浏览器内存中存活
           = 0:指定为马上删除
         * Cookie的path
           每个Cookie都有一个path,若你当前访问的路径中包含了Cookie的路径,那么归还这个Cookie给服务器!
           若在发送Cookie给浏览器时,没有指定path,那么默认为当前资源所在路径!

       Session:
         * 保存在服务器端
         * 依赖Cookie或URL重与
         * 得到session:request.getSession()
         * session的生命周期
           * 从第一次执行request.getSession()方法开始,到Session超时,被移除!

         * session是域对象





  • 相关阅读:
    队列
    栈的链式存储
    单例和多例设计模式
    顺序栈的基本操作
    串的模式匹配
    线性表的链式存储结构
    倒置顺序表
    回文序列
    go语言系列-从运算符到函数
    go语言系列-从零到数据类型
  • 原文地址:https://www.cnblogs.com/cyf18/p/14307377.html
Copyright © 2011-2022 走看看