• 【Tomcat&http&servlet】


    tomcat是一个免费的,开放源代码的Web应用服务器,是Apache软件基金会项目中的一个核心项目,由Apache ,Sun和一些公司以及个人共同开发而成,深受Java爱好者的喜爱,是一款比较流行的web应用服务器。

    Tomcat由一系列的组件构成,其中核心的组件有三个:

    (1) web容器:完成web服务器的功能。

    (2) servlet容器:名字为catalina,用于处理Servlet代码。

    (3 ) JSP容器:用于将JSP动态网页翻译成Servlet代码。

    因此Tomcat是web应用服务器,也是一个Servlet/JSP容器。Tomcat作为 Servlet容器,负责处理客户请求,把请求传送给servlet,并将servlet的响应传送回给客户。

    什么是servlet ?
    Servlet 是 Java Servlet 的简称,可以理解为是一个服务连接器,是用Java编写的服务器端程序,具有独立于平台和协议的特性,简单的理解: servlet就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。

    什么是JSP?
    JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用JSP 标签在HTML,网页中插入Java代码。标签通常以 <% 开头,以 %> 结束。
    JSP是一种Java servlet,主要用于实现Java web 应用程序的用户界面部分。
    JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

    Tomcat 功能组件结构:
    Tomcat的核心功能有两个,分别是负责接收和反馈外部请求的连接器Connector,和负责处理请求的容器Container:其中连接器和容器相辅相成,一起构成了基本的 web服务Service。每个Tomcat服务器可以管理多个Service。

    Conector: 负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。

    Container: 负责对内处理业务逻辑。其内部由 Engine、Host、Context和wrapper 四个容器组成,用于管理和调用Servlet相关逻辑。

    Service:对外提供的web服务。主要包含Connector和 Container两个核心组件,以及其他功能组件。Tomcat可以管理多个

    Service,且各Service 之间相互独立。

    Servlet作用:

    Servlet的作用十分复杂,即承担了处理数据的作用,又承担了展示页面的作用,导致代码的耦合性过高,不易于维护。随着时间的推移,出现了MVC思想,也就是模型 - 界面 - 控制器思想,极大的简便了开发,也明确了Servlet的作用。

    附加:最经典的MVC模型是:JSP+JavaBean+Servlet开发模式。
     


     

     servlet体系结构:

    Servlet的体系结构    
        Servlet -- 接口
            |
        GenericServlet -- 抽象类
            |
        HttpServlet  -- 抽象类


        * GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
            * 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

        * HttpServlet:对http协议的一种封装,简化操作
            1. 定义类继承HttpServlet
            2. 复写doGet/doPost方法
        其他功能
            其他功能:
    1.  不论get还是post请求方式都可以使用下列方法来获取请求参数
    1. String getParameter(String name):根据参数名称获取参数值    username=zs&password=123
    2. String[] getParameterValues(String name):根据参数名称获取参数值的数组  hobby=xx&hobby=game
    3. Enumeration getParameterNames():获取所有请求的参数名称
    4. Map getParameterMap():获取所有参数的map集合
            请求转发:一种在服务器内部的资源跳转方式
     1. 步骤:
     1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
     2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
            共享数据:
                * 域对象:一个有作用范围的对象,可以在范围内共享数据
                * request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
                * 方法:
                    1. void setAttribute(String name,Object obj):存储数据
                    2. Object getAttitude(String name):通过键获取值
                    3. void removeAttribute(String name):通过键移除键值对
                * 注意:这个放于forward方法的上面,不然响应太快会导致无法获取信息!
    HTTP
        超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;
        http特点
            特点:
            1. 基于TCP/IP的高级协议
            2. 默认端口号:80
            3. 基于请求/响应模型的:一次请求对应一次响应
            4. 无状态的:每次请求之间相互独立,不能交互数据

        * 历史版本:
            * 1.0:每一次请求响应都会建立新的连接
            * 1.1:复用连接

    request和response的区别:
        ①request对象是服务器对浏览器请求的封装,而response是服务器对服务器响应的封装。                                                                                                                       ②request用来取出请求信息,而response则用来添加要返回给浏览器的信息                
    get和post的区别
        1、url可见性:
    get,参数url可见;
    post,url参数不可见
    2、数据传输上:
    get,通过拼接url进行传递参数;
    post,通过body体传输参数
    3、缓存性:
    get请求是可以缓存的
    post请求不可以缓存
    4、后退页面的反应
    get请求页面后退时,不产生影响
    post请求页面后退时,会重新提交请求
    5、传输数据的大小
    get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)
    post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。
    6、安全性
    这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,防君子不防小人就是这个道理。对传递的参数进行加密,其实都一样。

  • 相关阅读:
    26、JavaScript学习笔记——定时器
    编写程序,建立一动态链表,其中包含学生学号,姓名,年龄,输入一个学生学号删除相对应的节点
    mybatis学习(2) - MyBatis Generate的使用
    【组件自定义事件+全局事件总线+消息订阅与发布+TodoList案例——编辑+过度与动画】
    lement-ui 加载本地图片
    LiberOJ_10060
    OpenCV-C++选择、提取感兴趣区域(ROI区域)【附用鼠标选取ROI区域的代码】
    Diffusion Models可控视频生成Control-A-Video:论文和源码解读
    java线程池杂谈(线程池创建和运行)
    kotlin基础之协程
  • 原文地址:https://blog.csdn.net/akisi/article/details/126129795