• 第3章 Tomcat&servlet


    1.BS与CS

    *CS:客户端服务器架构模式

       优点:充分利用客户端机器的资源,减轻服务器的负荷

       缺点:需要安装;升级维护成本较高

    *BS:浏览器服务器架构模式

       优点:客户端不需要安装,维护成本较低

       缺点:所有计算和存储任务都是放在服务器端尽心的,服务器负荷较重;在服务器端计算完成之后把结果再传给客户端,因此客户端和服务器端会进行非常频繁的数据通信,从而网络负荷较重

    2.Tomcat简介

    *Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

    *部署(deploy):把一个项目放到web容器里,项目的名字是context root

    *Tomcat目录结构:

       bin:可执行文件目录

       conf:配置文件目录

       lib:存放lib的目录

       logs:日志文件目录

       webapps:项目部署的目录

       work:工作目录

       temp:临时目录

    *配置java环境变量,双击bin目录下的startup.bat启动Tomcat

    (启动成功)

    *http://localhost:8080/,访问Tomcat主页,确定启动成功

    3.IDEA下操作Tomcat

    (1)新建项目/模块->右键,add Framework Support->选择Web Application->ok

     (2)在web下新建html文件,文件与WEB-INF同级:

    (3)部署到Tomcat上

       首先在IDEA上配置Tomcat,点击Add

     点左上角加号,找到Tomcat Server-local

     选择Tomcat文件位置,到bin上一级,点击Apply

     

     选择Deployment,点击+,点击Artifact,找到要部署的项目

     可以任意修改项目名,点击Apply

     

    热部署,Apply

    (4)debug测试

       点击右上角的debug进行测试

    4.Servlet入门

    (1)add.html

     (2)写AddServlet类,继承HttpServlet,HttpServlet是外部类,需要导入Tomcat依赖:

     (3)在WEB-INF下的web.xml里写入映射关系

    (4)创建DAO、Bean、连接数据库

    (5)在servlet里写入相应操作

    5.servlet中文乱码

    6.Servlet继承关系

    *HttpServlet->GenericServlet->Servlet

    *Servlet中的核心方法:init()、service()、destory()

    *service()方法:

       当有请求过来时,service方法会自动响应(其实是tomcat容器调用的)

       在HttpServlet中会分析请求的方式:get/post/head/delete···,再决定调用哪个do开头的方法

       自己创建的子类一定要重写doxxx方法,否则会出现405页面

    7.Servlet生命周期

    *生命周期:从出生到死亡的过程,对应Servlet中的三个方法:init()、service()、destroy()

    *默认情况下:

       第一次接收请求时,Servlet会进行实例化(调用构造方法)、初始化、服务

       从第二次请求开始,每次都只调用服务

       当容器关闭时,其中的所有servlet实例会被销毁,调用销毁方法

    *可以通过来设置servlet启动的先后顺序,数字越小启动越早,最小值是0

    *Servlet在容器中是单例的、线程不安全的

    8.HTTP协议

    *HTTP:超文本传输协议

    *客户端向服务器端发送http请求,请求包含三个部分:

       请求行、请求头(请求消息头)、请求体

       *请求行包含三个信息:

          请求的方式、请求的url、请求的协议(一般都是HTTP1.1)

       *请求消息头中包含了很多客户端要告诉服务器的信息,比如浏览器型号、版本、接收内容的类型

       *请求体分三种情况:

          get方式,没有请求体,但有一个queryString

          post方式,有请求体,form data

          json格式,有请求体,request payload

    *响应也包含三个部分:

       响应行、响应头、响应体

       *响应行包含三个信息:

          协议、响应状态码(200正常响应、404找不到资源、405请求方式不支持、500服务器内部错误)、响应状态

       *响应头包含服务器的信息

       *响应体响应的实际内容

    9.session

    *HTTP无状态:服务器无法判断两次请求是否来自于同一个客户端

    *通过会话跟踪技术解决无状态问题

    *会话跟踪技术:

       客户端第一次给服务器发送请求时,服务器获取session获取不到,则创建新的响应给客户端

       客户端再次给服务器发送请求时,会把session带给服务器,服务器判断这次和上次的session一样,则为同一个客户端

       常用的API:

       request.getSession()->获取当前session,如果没有则创建一个

       session.getId()->获取session的id

       session.isNew()->判断当前session是否是新的

       session.getMaxInactiveInterval()->session的非激活间隔时长,默认1800秒

       session.setMaxInactiveInterval()->

       session.invalidate()->强制性让会话失效

    *session测试:

     访问两次:

     输出结果:

    10.session保存/获取作用域

    *常用的API:

       session.setAttribute(k,v)//设置作用域

       session.getAttribute(k)//获取作用域

       removeAttribute(k)//删除作用域

    11.服务器内部转发以及客户端重定向

    *服务器内部转发:

     *客户端重定向:

  • 相关阅读:
    华为政企园区网络交换机产品集
    day25--JS进阶(递归函数,深浅拷贝,异常处理,改变this指向,防抖及节流)
    【LeetCode】2656. K个元素的最大和
    【贪心算法-LeetCode3:无重复字符的最长子串(Java实现)】
    SAP 自定义权限对象开发与使用
    CMake使用小结
    Python基础--PART2
    数据结构-难点突破(C++实现图的基本操作(邻接矩阵,邻接表,十字链表法储存代码))
    HaaS学习笔记 | HaaS框架环境下基于MicroPython的LED跑马灯实现及比较
    基于多通信半径与跳距加权优化的DV-HOP改进算法附matlab代码
  • 原文地址:https://blog.csdn.net/weixin_47687315/article/details/128083573