Servlet和HTTP请求

web相关概念回顾

1.软件架构
    1.C/S:客户端/服务器端
    2.B/S:浏览器/服务器端
2.资源分类
    1.静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源。
        静态资源可以直接响应给浏览器解析
        如:html css javascript
    2.动态资源:每个用户访问相同资源后,得到的结果可能不一样,称为动态资源
        动态资源被访问后,需要先转换为静态资源,再响应给浏览器解析
        如:JSP Servlet

3.网络通信三要素
    1.IP:电子设备在网络中的唯一标识
    2.PORT:应用程序在计算机中的唯一标识
    3.传输协议:规定了数据传输的规则
        1.基础协议:
            1.tcp(传输控制协议):安全协议,三次握手。面向连接,通信较慢
                常用于文件,视频等数据传输
            2.udp(用户数据报协议):不安全协议。无连接,通信快
                常用语通话,视频等数据传输

Web服务器软件

服务器:安装了服务器软件的计算机---> 硬件+软件
服务器软件:接收用户的请求,处理请求,做出响应
    web服务器软件(web容器):可以部署web项目,让用户通过浏览器来访问项目
    动态资源必须在web容器中才能运行
常见的java相关web服务器软件:
    webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费
    webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费
    JBOSS:JBOSS公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费
    Tomcat:Apache基金组织,中小型的JavaEE服务器,仅支持少量JavaEE规范(如:JSP Servlet),且开源,免费
JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范

Tomcat:web服务器软件
    1.下载:官网下载
    2.安装:压缩包解压(安装路径不要存在中文,空格)
    3.卸载:删除目录
    4.启动:
        bin/startup.bat 双击运行服务器(windows)
        bin/startup.sh 双击运行服务器(linux)
        访问:浏览器输入:http://localhost:8080 访问自己
                       http://别人IP:8080 访问别人的服务器
        可能遇到的问题:
            1.黑窗口一闪而过:
                原因:没有正确配置JAVA_HOME环境变量
                解决方案:正确配置JAVA_HOME环境变量
            2,启动报错:
                1.找到占用的端口号,找到对应的进程,杀死该进程
                    dos中netstat -ano调出进程
                2.修改自身端口
                    在conf/server.xml配置文件中
                    一般讲tomcat的默认端口口设为80,80是http协议默认端口
                        好处:访问时,无需输入端口
    5.关闭:
        1.正常关闭
            1.bin/shutdown.bat
            2.ctrl+c
        2.强制关闭
    6.配置
        部署项目方式:
            1.直接将项目放在webapps目录下
                /hello/hello.html: /hello--> 虚拟目录
                简化部署:将项目打包成war包,将war包放在webapps目录下,war包将自动解压
            2.配置conf/server.xml文件
                在<Host>标签体中配置
                <Context docBase="项目路径" path="设置的虚拟目录名">
            3(推荐方式).在conf\Catalina\localhost创建任意名称的xml文件。在文件中编写
                <Context docBase="项目路径">
                虚拟目录:就是xml文件名称(名称去后缀)

        静态项目和动态项目:
            目录结构:
                java动态项目结构:
                    项目根目录
                        WEB-INF目录
                            web.xml:web项目的核心配置文件
                            classes目录:字节码文件目录
                            lib目录:依赖jar包目录
        将tomcat集成到IDEA中,并常见JavaEE项目,部署项目
            热部署:update和fram两个都设置为update resources

Servlet(web核心知识): server applet

概念:运行在服务器端的小程序
    Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则
    将来我们自定义一个类,实现Servlet接口,复写方法
基本操作:
    1.创建JavaEE项目
    2.定义一个类,实现Servlet接口
    3.实现接口中的抽象方法
    4.配置Servlet
        在web.xml中配置servlet及servlet-mapping
执行原理:
    1.服务器接收到客户端浏览器请求后,会解析请求URL路径,获取访问的Servlet的资源路径
    2.查找web.xml文件,是否有对应的<url-pattern>标签体内容
    3.如果有,则再找到对应的<servlet-class>全类名
    4.tomcat会将字节码文件加载进内存,并且创建其实例对象(反射技术)
    5.调用其方法

Servlet中的方法:
    void init(ServletConfig servletConfig)
        初始化方法,在Servlet被创建时执行,只会执行一次
    ServletConfig getServletConfig()
        获取Servlet的配置对象方法
    service(ServletRequest servletRequest, ServletResponse servletResponse)
        提供服务的方法,每一次Servlet被访问时,执行。访问一次执行一次
    String getServletInfo()
        获取Servlet一些信息,版本,作者等
    void destroy()
        销毁方法,在服务器正常关闭时,执行,只执行一次

    Servlet中的生命周期:
        1.创建:执行init方法,执行一次
            Servlet什么时候被创建?
                默认情况下,第一次被访问时,Servlet被创建
                可以配置执行Servlet的创建时机
                    在<servlet>标签下配置
                        1.第一次被访问同时,创建
                            <load-on-startup>值为负整数
                        2.在服务器启动时,创建
                            <load-on-startup>值为0或正整数
            Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例
                多个用户同时访问时,可能存在线程安全问题
                解决:如果定义变量可以定义局部变量,或者不要对定义的成员变量修改值
        2.提供服务:执行service方法,执行多次
            每次访问Servlet,服务器都会调用service方法一次
        3.销毁:执行destroy方法,执行一次
            Servlet被销毁时执行。服务器关闭时,销毁Servlet
            只有服务器正常关闭,才会执行destroy方法
            该方法在Servlet销毁前执行,一般用于释放资源

Servlet3.0:
    好处:支持注解配置是,选择Servlet3.0以上版本,可以不创建web.xml配置文件,配置更方便

    步骤:
        1.创建JavaEE项目6以上
        2.定义一个类,实现Servlet接口
        3.复写方法
        4.在类上使用@WebServlet注解,进行配置
            @WebServlet("/资源路径")

Servlet体系结构:
    HttpServlet extends GenericServlet Implements Servlet
    AbstractClass       AbstractClass            Interface

    GenericServlet:将Servlet接口中其他的方法做了默认空实现,只抽象了service方法
        将来定义Servlet类时,可继承GenericServlet,实现service方法即可
    HttpService:对http协议的一种封装,简化操作
        1.定义类继承HttpServlet
        2.复写doGet/doPost方法

Servlet相关配置
    1.urlPatterns:Servlet访问路径
        1.一个Servlet可以定义多个访问路径:
            @WebServlet({"/d4", "/dd4", "/ddd4"})
        2.路径定义规则:
            1. /xxx
            2. /xxx/xxx:多层路径,目录结构
            3. *.do-->此形式不要加"/",不然会报错

IDEA与tomcat的相关配置:

1.IDEA会为每一个tomcat部署的项目单独建立一份配置文件
    查看控制台的log:Using CATALINA_BASE:
        "C:\Users\Administrator\.IntelliJIdea2017.3\system\tomcat\Tomcat_8_5_31_day13_2"
2.工作空间项目 和 tomcat部署的web项目
    tomcat部署的web项目可以在CATALINA_BASE的catalina/locahost/下的配置文件中找到
    tomcat真正访问的是"tomcat部署的web项目","tomcat部署的web项目"对应着"工作空间"的web目录下所有资源
    WEB-INF目录下的资源不能被浏览器直接访问
3.断点调试:使用"虫子图标"按钮启动

Http:

概念:Hyper Text Transfer Protocol 超文本传输协议(应用层协议)
特点:
    1.基于TCP/IP的高级协议
    2.默认端口号:80
    3.基于请求/响应模型的:一次请求对应一次响应
    4.无状态的:每一次请求之间相互独立,不能交互数据
历史版本:
    1.0:每一次请求响应都会建立新的连接(短连接)
    1.1:复用连接(长连接)

请求消息数据格式:
    1.请求消息数据格式
        1.请求行
            请求方式 请求url 请求协议/版本
            GET /login.html?username=xxx HTTP/1.1
            POST /login.html HTTP/1.1

            请求方式
                HTTP协议有7种请求方式,常用2种
                    GET:
                        1.请求参数在请求行中,在url后
                        2.请求的url长度有限制
                        3.不太安全
                    POST:
                        1.请求参数在请求体中
                        2.请求的url长度没有限制
                        3.相对安全
        2.请求头
            客户端浏览器告诉服务器一些信息
            格式:
                请求头名称: 请求头的值
            常见请求头:
                1.User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
                2.accept-xxx:可以接收的信息
                3.Referer:http://xxx
                    告诉服务器,我(当前请求)从哪里来?
                        作用:
                            1.防盗链:比如看电影,从别的网站跳转到优酷(防止该行为)
                            2.统计工作:比如统计来自某站点的访问流量
        3.请求空行
            空行
            windows:"/r/n"
            linux: "/n"
            mac:"/r"
            作用:用于分隔POST请求的请求头,和请求体的
        4.请求体(正文)
            封装POST请求消息的请求参数的
        字符串格式:
            POST /login.html HTTP/1.1
            Host: localhost
            ...【多个请求头】
            【空行】
            username=zhangsan
响应消息数据格式:
上一篇:JavaEE笔记:【1】Java简介


下一篇:云计算市场竞争激烈