浅学tomcat

浅学Tomcat

一.web概念的回顾

1.软件架构
    c/s架构:客户端/服务器端
    b/s架构:浏览器/服务器端
2.资源分类
    静态资源:各用户对同一资源访问后,结果一致;静态资源可有浏览器直接解析
                HTML,css,JS
    动态资源:各用户对同一资源的获取可能不一样,动态资源得由服务器端转换成静态资源后由浏览器解析
                Servlet/jsp,php,asp                    
3.通信协议三要素
    1.IP:计算机在网络中的唯一标识
    2.端口:各应用程序在计算机中的唯一标识  0—65536
    3.传输协议:规定了数据传输规则
        1.基本协议
            tcp:安全协议,三次握手,网速慢
            udp:不安全协议,广播,网速快

#web服务器概念
    服务器:安装有服务器软件的计算机
    服务器软件:接收用户请求,处理请求,响应请求
    web服务器软件:接收用户请求,处理请求,响应请求
        *在web服务器软件中,可以部署web项目,用户通过浏览器访问web项目
        *web容器
    常用的web服务器软件:
       webLogic:大型web服务器,支持全部JAVAEE规范
       webSphere:大型web服务器,支持全部JAVAEE规范
       JBoss:大型web服务器,支持全部JAVAEE规范
       tomcat:支持少部分JAVAEE规范
       
JavaEE是Java语言在企业级开发中使用的技术规范的总和,总共13项大的规范

*Tomcat的基本使用
    文件夹内容
        bin  可执行文件
        conf 配置文件
        lib     依赖的jar包
        logs 日志文件
        temp 存放临时文件
        webAPP存放web项目
        work  存放运行时数据
    下载
    安装  *安装不要有中文或者空格
    卸载
  启动   *bin/startup.bat双击运行
        *用浏览器访问自己http://192.0.0.1(或者localhost):8080
                     别人http://IP:8080
        *常见问题
            *黑屏和闪退    因为JAVA_HOME没有正确配置    新建环境JAVA_HOME,内容是jdk的目录,在path中添加%JAVA_HOME%
            *窗口报错       暴力解决:杀死占用8080端口的进程   
                                cmd:netstat -ano 就会有dos窗口显示,找到8080(0.0.0.0:8080)对应的PID,打开任务管理器,点击查看,勾选PID,找到对应的进程杀死
                           温柔解决:修改TOMCAT的端口号
                                进入conf/server.xml   找到<conntctor port="8080" protocol="HTTP/1.1" connectionTimeout="2000" redirectPort="...">的类似代码并修改port对应的数字
                                *可以改成80端口(HTTP协议默认端口)打开浏览器就不用输入端口号了(只要使用http协议上网,后面都会跟上80端口)
    关闭
        正常关闭:
            bin/shutdown.bat双击运行
            在Tomcat运行窗口ctrl+c
        强制关闭:
            直接点击Tomcat的X按钮
   配置   
        *项目的部署方式
            1.直接在webapps中配置
            */hello:项目的访问路径-->虚拟路径
            *将项目打war包放入webapps中,将会自动解压(删除war,解压的文件会自动被删除)
            2.修改server.xml
            在<Host></Host>中添加<Context docBase="D:\hello" path="/hehe"/>
            docBase指项目存放路径,path是虚拟目录
            3.在conf/Catalina/localhost中添加任意xml文件
            该改文件中写<Context docBase="D:\hello" />
               虚拟目录:xml文件名称
        *静态项目和动态项目
            *Java动态项目的结构
                根目录下的WEB-INF目录
                    web.xml:web项目的核心配置文件
                    classes目录:放置字节码文件目录
                    lib目录:依赖的jar包目录
     * 将Tomcat集成到IDEA中,并且创建JavaEE的项目,部署项目。
            *将Tomcat集成到IDEA中
                run->edit configurations(编辑配置)->defaults(默认)->tomcat->local:--server:application server--configure配置tomcat文件夹,http port:8080
            *在项目中添加tomcat:new->module->java Enterprice---configure SDK,javaEE version(选择与tomcat相匹配的javaEE7),tomcat
                                 勾选Web Application,选择Versions与勾选的Web Application一致,勾选creat web.xml,然后创建module
                                 run->edit configrations(编辑配置)->tomcat server->tomcat->deployment->XXX:war exploded(此时旁边有Application context)
                                 (在Application context(虚拟目录)右边有/代表访问时不用虚拟目录而且相当于根路径 )
                                 (部署成功后在Edit Configuration中会自动多一项tomcat server并且在deployment部署中显示war exploded项目是以war包形式部署的)
                                 热部署:选择tomcat server的server下on'Update'action->update source(更新项目),on frame deactivation->update source(无须重启server)

实战:tomcat中添加多个项目时,在Appliacation context(虚拟目录)中将'/'换成别的名字(最好与项目名称相同'/project name')
                      在访问时在URL中加/project name/XX(要访问的文件),即localhost:8080/project name/demo1

* 快速入门:
     *基本概念
        *server applet
        运行在服务器端的小程序
        Servlet是一个接口,定义了Java类(服务器动态资源中的类没有main方法,依赖于服务器执行,tomcat解析它且该类遵循一定的规则)被浏览器访问到(tomcat识别)的规则
        将来我们定义一个类,实现Servlet接口,复写方法
    * 快速入门:
        1. 创建JavaEE项目
        2. 定义一个类,实现Servlet接口
            * public class ServletDemo1 implements Servlet
                (该接口中共5个虚拟方法,为测试是否调用该类,可在service()中system.out.print打印输出标记)
        3. 实现接口中的抽象方法
        4. 配置Servlet
             在web.xml中配置:
            <!--配置Servlet -->
                 <servlet-name>demo1</servlet-name>
                <servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
            </servlet>
        
            <servlet-mapping<!-—servlet的映射-->
                <servlet-name>demo1</servlet-name>
                <url-pattern>/demo1</url-pattern><!--当使用URL访问时的虚拟目录-->
            </servlet-mapping>

    *基本原理
        1.服务器接到浏览器请求,解析URL地址,获取访问的servlet路径(虚拟目录和要访问的文件)
        2.tomcat根据解析的内容到web.xml中找到<url-pattern>对比其内容,再找到<servlet-name>中的内容并对比
        3.tomcat根据<servlet-name>的内容找到对应的<servlet-name>,并找到<servlet-class>中的全类名(这是反射)
        4.tomcat根据全类名找到对应的字节码文件并加载入内存Class.forName(),创建其对象cls.newInstance()
        5.实现相应的方法service()等

*Servlet的生命周期及方法
        1.被创建:执行init()初始化,只执行一次
            *servlet什么时候被创建
                *默认情况:第一次被访问时,创建
                *可以配置
                    在web.xml中找到<servlet>标签,并且添加标签<load-on-startup>,在该标签中给值
                    如果配负数,第一次访问时被创建;配0或正整数,服务器启动时被创建(一般0-10)
              servlet创建时执行init()且只执行一次,servlet在内存中只有一个对象,servlet是单例
                问题:当多个用户访问时(多线程),线程变得不安全
                解决:不要在servlet中定义成员变量;即便定义成员变量,也不要修改他的值
              
        2.提供服务:执行service()服务,(调用一次执行一次)执行多次
        3.被销毁:执行destroy()销毁(正常销毁,且在销毁之前执行,为了释放资源),只执行一次
        getServletConfig()获取servlet的配置
        getServletInfo()获取servlet版本、作者等信息

*IDEA和tomcat的相关配置
        1.IDEA会为每一个tomcat部署的项目单独建立一份配置文件
            *运行tomcat,在控制台能看到log:Using CATALINA_BASE:   "C:\Users\fqy\.IntelliJIdea2018.1\system\tomcat\_itcast",这是tomcat使用的文件路径
            *在IDEA中的tomcat修改端口,就会用tomcat项目部署的第三种方式创建xml文件(文件名字是对应的application context中的虚拟目录一致)
        2.工作空间项目   和   tomcat部署的web项目    
            *tomcat访问的是“tomcat部署的web项目”,“tomcat部署的项目”对应“工作空间项目”的所有文件(部署的项目一般在工作空间的out目录下面,该项目中会有classes文件存放字节码文件)
            *在WEN-INF中布置的文件,浏览器无法直接访问
        3.断点调试:使用debug调试(在文件中设置断点,运行服务器,当运行到断点时会停止,点击下一步继续)

发布了2 篇原创文章 · 获赞 0 · 访问量 1390

猜你喜欢

转载自blog.csdn.net/qq_41841880/article/details/104102119
今日推荐