JavaWeb部分知识点

JavaWeb知识点

1.tomcat服务器

  • 轻量级服务器:实现了一部分javaEE的规范

  • tomcat服务器默认端口号是8080,访问url地址后必须手动写:8080

    80端口是HTTP协议采用的端口号,访问url地址后不用再写:80

2.HTTP协议

  • HTTP协议是基于TCP/IP协议的

  • HTTP协议的请求

    • 请求组成部分:请求行、请求头、请求空行、请求体

    • 请求方式:GET、POST

      只有POST请求方式才有请求体

  • 响应行:常见状态码

状态码说明
200成功
302/307请求重定向,两次请求,地址栏发生变化
304请求资源未发生变化,使用缓存
400请求错误,常见于请求参数错误
404请求资源未找到
405请求方式不支持
500服务器错误

3.Servlet

  • Servlet 是运行在Java服务器端的程序,用于接收和响应来自于客户端基于HTTP协议的请求。

  • 执行流程:客户端浏览器向Tomcat服务器发出请求——>Tomcat服务器解析请求地址(URL)——>找到对应应用——>找到项目中的web.xml文件——>解析请求资源地址(URI)——>找到应用资源(功能类)——>执行service方法,响应给客户端浏览器

  • 核心方法:**service()**方法,任何客户端的请求都会经过该方法

  • 实现方式

    • 第一种:实现Servlet接口
    • 第二种:继承GenericServlet抽象类,必须重写service方法,这种方式与HTTP协议无关
    • 第三种:继承HttpServlet抽象类,需要重写doGetdoPost方法,该方式表示请求和响应都需要和HTTP协议相关。
  • 生命周期

    • 出生:请求第一次到达Servlet时,对象就创建出来,并且初始化成功,只出生一次,将对象放到内存中。

    • 活着:服务器提供服务的整个过程中,该对象一直存在,每次都是执行 serevice方法

    • 死亡:服务停止时,或者服务器宕机时,对象死亡

      Servlet对象只会创建一次,销毁一次,所以Servlet对象只有一个实例,如果一个对象实例在应用中是唯一的存在,那么我们就称它为单例模式

  • Servlet是线程不安全的,可以通过同步代码块或者定义到doGet或者doPost方法内保证

  • 映射方式

    • 第一种:具体名称的方式。访问的资源路径必须和映射配置完全相同

    • 第二种:/+通配符的方式,只要符合目录结构即可,不用考虑结尾是什么 /servlet/*

    • 第三种:通配符+固定结尾的方式,只要符合固定结尾格式即可,不用考虑前边的路径 *.do

      优先级问题,越是具体的优先级越高

  • 创建时机:

    • 第一次访问时创建:

      • 优势:减少对服务器内存的浪费,提高了服务器启动的效率
      • 弊端:如果有一些要在应用加载时就做的初始化操作,无法完成
    • 服务器加载时创建

      • 优势:提前创建好对象,提高了首次执行的效率。可以完成一些应用加载时要做的初始化操作。
      • 弊端:对服务器内存占用较多,影响了服务器启动的效率。

      修改Servlet创建时机,在**标签中,添加**标签

      正整数代表服务器加载时创建,值越小,优先级越高,负整数或不写代表第一次访问时创建

  • Tomcat服务器默认提供一个Servlet

  • ServletConfig是Servlet的配置参数对象,每一个Servlet都有自己的ServletConfig。

    作用:在Servlet的初始化时,把一些配置信息传递给Servlet。

    生命周期:和Servlet相同

  • ServletConfig配置方式:

    • 在标签中,通过标签来配置,有两个字标签

      :代表初始化参数的key :代表初始化参数的value

    • 常用方法:

      返回值方法名说明
      StringgetInitParameter(String name)根据参数名称获取参数的值
      EnumerationgetInitParameterNames()获取所有参数名称的枚举
      StringgetServletName()获取Servlet的名称
      ServletContextgetServletContext()获取ServletContext对象
  • ServletContext:是应用上下文对象(应用域对象),每一个应用中只有一个ServletContext对象

    • 作用:可以配置和获得应用的全局初始化参数,可以实现Servlet之间的数据共享

    • 生命周期:应用一加载则创建,应用被停止则销毁。

      域对象:指的是对象有作用域

      在Servlet规范中,一共有四个域对象,ServletContext是web应用中最大的作用域,也叫application域,他可以实现整个应用之间的数据共享。

  • ServletContext配置方式:

    • 在标签中,通过标签来配置。有两个子标签

      :代表全局初始化参数的key

      :代表全局初始化参数的value

    • 常用方法:

      返回值方法名说明
      StringgetInitParameter(String name)根据名称获取全局配置的参数
      StringgetContextPath()获取当前应用访问的目录
      StringgetRealPath(String path)根据虚拟目录获取应用部署的磁盘绝对路径
      voidsetAttribute(String name,Object value)向应用域对象中存储数据
      ObjectgetAttribute(String name)通过名称获取应用域对象中的数据
      voidremoveAttrebute(String name)通过名称移除应用域对象中的数据
  • 注解开发:

    • 自动注解:在类上使用@WebServlet注解配置Servlet
  • 手动创建(太麻烦)

4.请求和响应

  • 请求:获取资源,在BS架构中,就是客户端浏览器向服务器发出询问。

    请求对象:就是在项目中用于发送请求的对象。

    常用方法:

    返回值方法名说明
    StringgetContextPath()获取虚拟目录名称
    StringgetServletPath()获取Servlet映射路径
    StringgetRemoteAddr()获取访问者ip地址
    StringgetQueryString()获取请求的消息数据
    StringgetRequestURI()获取统一资源标识符
    StringBuffergetRequsetURL()获取统一资源定位符

    URI范围比URL大

    获取请求头信息:

    返回值方法名说明
    StringgetHeader(String name)根据请求头名称获取一个值
    EnumerationgetHeaders(String name)根据请求头名称获取多个值
    EnumerationgetHeaderName()获取所有请求头名称
    image-20220316094651711
  • 请求对象获取参数三种方式:手动封装、反射封装、工具类封装

  • 中文乱码问题:GET没有乱码问题,Tomcat8版本后已经解决!POST乱码问题可以通过setCharacterEncoding()方法解决

  • 请求域:可以在一次请求范围内进行数据共享。一般用于请求转发的多个资源中共享数据

  • 请求转发:客户端的一次请求到达后,发现需要借助其他的Servlet来实现功能

    • 特点

      • 浏览器地址栏不变
      • 域对象中的数据不丢失
      • 负责转发的Servlet转发前后的响应正文会丢失
      • 由转发的目的地来响应客户端
    • 常用方法:

      返回值方法名说明
      RequestDispatchergetRequestDispatcher(String name)获得请求调度对象
      voidforward(ServletRequest req,ServletResponse resp)实现转发
      voidinclude(ServletRequest req,ServletResponse resp)实现包含
  • 请求包含:可以合并其他Servlet中的功能一起响应给客户端。

    • 特点:
      • 浏览器地址栏不变
      • 域对象中的数据不丢失
      • 被包含的Servlet响应头会丢失
  • 响应:回馈结果。在B/S架构中,就是服务器给客户端浏览器反馈结果。

    响应对象:就是在项目中用于发送响应的对象

    字节流响应消息:

    返回值方法名说明
    ServletOutputStreamgetOutputStream()获取响应字节输出流对象
    voidsetContextType(“text/html;charset=UTF-8”)设置响应内容类型,解决中文乱码问题

    字符流响应消息:

    返回值方法名说明
    PrintWritergetWriter()获取响应字符输出流对象
    voidsetContextType(“text/html;charset=UTF-8”)设置响应内容类型,解决中文乱码问题
  • **缓存:**对于不经常变化的数据,我们可以设置合理缓存时间,以避免浏览器频繁请求服务器,以此来提高效率。

    设置缓存

    返回值方法名说明
    voidsetDateHeader(String name,long time)设置消息头添加缓存
    voidsetHeader(String name,String value)设置消息头定时刷新
    voidsendRedirect(String name)设置重定向
  • **请求重定向:**客户端的一次请求到达后,发现需要借助其他Servlet来实现功能

    特点:浏览器地址栏会发生改变,两次请求、请求域对象中不能共享数据,可以重定向到其他服务器

    实现原理:设置响应状态码为302

    ​ 设置响应的资源路径(响应到那里去,通过响应消息头location来制定)

5.Cookie&Session

  • 会话:浏览器和服务器之间的多次请求和响应。会话中产生的一些数据,可以通过会话技术CookieSession保存。

  • Cookie:客户端会话管理技术。把要共享的数据保存到客户端。

    作用:可以保存客户端访问网站的相关内容,从而保证每次访问时先从本地缓存中获取,以此提高效率。

    注意

    • 一个Cookie的值可以唯一标识客户端
    • Servlet发送Cookie到浏览器端使用的是addCookie方法,其本质是通过添加响应消息头的方式吧Cookie发送到浏览器端。
  • 属性

    属性名作用重要性
    nameCookie的名称必须属性
    valueCookie的值(不支持中文)必须属性
    pathCookie的路径重要(非必须)
    domainCookie的域名重要(非必须)
    maxAgeCookie的存活时间重要(非必须)
  • 细节

    • 数量限制: 每个网站最多只能有20个Cookie,且大小不能超过4KB,所有网站的Cookie总数不能超过300个。
    • 名称限制:不能包含逗号、分号、空格、,不能以$开头。Cookie不支持中文
    • 存活时间限制setMaxAge():
      • 负整数:当前会话有效
      • 0:立即清除
      • 正整数:以秒为单位设置存活时间
    • 访问路径限制
      • 默认路径:取自第一次访问的资源路径前缀。只要以这个路径开头就能访问到。
      • 设置路径:setPath()方法设置指定路径。
  • Session

    HttpSession:服务器端会话管理技术

    本质也是采用客户端会话管理技术。只不过客户端保存的是一个特殊标识,而共享数据保存到了服务器端的内存对象中。

    作用:可以实现数据共享

    域对象功能作用
    ServletContext应用域在整个应用之间实现数据共享
    ServletRequest请求域在当前的请求或请求转发之间实现数据共享
    HttpSession会话域在当前会话范围之间实现数据共享
    PageContext页面域用来获取其他八大隐式对象,或者获取所有域中的数据

    浏览器禁用Cookie:

    • 通过提示信息告知用户,大部分网站采用的解决方式。(推荐)
    • 访问时拼接jsessionid标识,通过encodeURL()方法重写地址。

    钝化和活化

    • 钝化:序列化,吧长时间不用,但还不到期的HttpSession进行序列化,写到磁盘上。

      活化:相反的状态。

    • 何时钝化:

      • 当访问量很大时,服务器会根据getLastAccessTime来进行排序,对长时间不用,但还不到期的HttpSession进行序列化。
      • 当服务器进行重启的时候,为了保持客户HttpSession中的数据,也要对其进行序列化。

      HttpSession的序列化由服务器自动完成。

6.JSP

  • JSP:是一种动态网页技术标准

    JSP部署在服务器上,可以处理客户端发送的请求,并根据请求内容动态的生成HTML、XML或其他格式文档的Wev网页,然后再响应给客户端。

    JSP是基于JAVA语言的,它的本质就是Servelt
    **JSP执行过程:**客户端浏览器发出请求——>Tomcat服务器解析请求地址——>找到具体应用——>找到jsp文件——>翻译jsp文件为.java文件——>编译java文件为class文件——>响应给客户端

  • 语法

    • 注释:<%–注释内容–%>

    • Java代码块:<% Java代码 %>

    • JSP表达式:<%=表达式%>

    • JSP声明:<%! 声明变量或方法%>

      ​ 如果加!代表声明的是成员变量,不加声明的是局部变量

  • 指令

    • page指令:<%@ page 属性名=属性值 属性名=属性值… %>
    • include指令:可以包含其他页面 <%@ include file=包含的页面 %>
    • taglib指令:<%@ taglib uri=标签库的地址 prefix=前缀名称 %>
  • 使用细节:image-20220317144237995

    PageContext对象

    • 是JSP独有的,Servlet中没有
    • 是四大域对象之一的页面域对象,还可以操作其他三个域对象中的属性,还可以获得其他八个隐式对象
    • 生命周期是随着JSP的创建而存在,随着JSP的结束而消失,每个JSP页面都有一个PageContext对象。
    image-20220317145300209

7.MVC模型

  • M(Model):模型。用于封装数据,封装的是数据模型
  • **V(View):**视图,用于显示数据,动态资源用JSP页面,静态资源用HTML页面
  • C(Controller):控制器,用于处理请求和响应,例如Servlet

8.EL表达式&JSTL

  • EL:表达式语言

    作用:在JSP页面中获取数据,让JSP脱离java代码块和JSP表达式

    语法:${表达式内容}

    注意事项:EL表达式没有空指针异常、索引越界异常和字符串拼接。

    EL表达式获取对象私有属性值得原理是通过调用get()方法

  • EL表达式运算符

    运算符作用
    1.判断对象是否为null
    empty2.判断字符串是否为空字符串
    3.判断元素容器是否为0
    条件?表达式1:表达式2三元运算符
  • 使用细节

    • EL表达式能够获取四大域对象的数据,根据名称从小到大在域对象中查找
    • 还可以获取JSP其他八个隐式对象,并调用对象中的方法
  • EL表达式隐式对象:image-20220317170947582

  • JSTL:JSP标准标签库,主要提供给开发人员一个标准通用的标签库

    image-20220317171902891
image-20220317171948307

9.Filter

  • Filter是一个接口

  • 过滤器在doFilter()方法中执行,每个过滤器都有权访问FilterConfig对象,从中可以获取其初始化参数,以及对ServletContext的引用

  • 过滤器配置方式

    • 注解配置:@WebFilter(urlPattern=("/*"))
    • 配置文件方式image-20220317192218162

    如果有多个过滤器,取决于过滤器映射顺序

  • 核心方法

    返回值方法名说明
    voidinit(FilterConfig config)初始化方法
    voiddoFilter(ServletRequest request,ServletResponse response,FilterChain chain)对请求资源和响应资源过滤
    voiddestroy()销毁方法
  • FilterChain是一个接口,代表过滤器链对象,由Servlet容器提供实现类对象,直接使用即可。

    过滤器可以定义多个,就会组成过滤器链。

    核心方法

    返回值方法名说明
    voiddoFilter(ServletRequest request,ServletResponse response)放行方法

    如果有多个过滤器,在第一个过滤器中调用下一个过滤器,依次类推,直到到达最终访问资源。

    如果只有一个过滤器,放行时,就会直接到达最终访问资源。

  • 过滤器生命周期

    • 创建:当应用加载时实例化对象并执行init初始化方法
    • 服务:对象提供服务的过程,执行doFilter方法
    • 销毁:当应用卸载或服务器停止时对象销毁,执行destory方法
  • FilterConfig是一个借口。代表过滤器的配置对象,可以加载一些初始化参数。

  • 核心方法image-20220317192952549

  • 过滤器五种拦截方式image-20220317193218208

10.Listener

  • 观察者设计模式:

    • 三个组成部分
      • 事件源:触发事件的对象
      • 时间:触发的动作,封装了事件源
      • 监听器:当事件源触发事件后,可以完成功能

    所有监听器都是基于观察者设计模式的!

  • Servlet规范中共计8个监听器,监听器都是以接口形式提供,具体功能需要我们自己来完成。

  • 监听对象的监听器

    • ServeltContextListener:用于监听ServletContext对象的创建和销毁

      核心方法

      返回值方法名说明
      voidcontextInitialized(ServletContextEvent sce)对象创建时执行该方法
      voidcontextDestroyed(ServletContextEvent sce)对象销毁时执行该方法

      参数:ServletContextEvent代表事件对象

      事件对象中封装了事件源,也就是ServletContext

      真正的事件指的是创建或销毁ServletContext对象的操作

    • HttpSessionListener:用于监听HttpSession对象的创建和销毁

      核心方法

      返回值方法名说明
      voidsessionCreated(HttpSessionEvent se)对象创建时执行该方法
      voidsessionDestroyed(HttpSessionEvent se)对象销毁时执行该方法

      参数:HttpSessionEvent 代表事件对象

      事件对象中封装了事件源,也就是HttpSession 

      真正的事件指的是创建或销毁HttpSession对象的操作

    • ServletRequestListener:用于监听ServletRequest对象的创建和销毁

      核心方法

      返回值方法名说明
      voidrequestInitialized(ServletRequestEvent sre)对象创建时执行该方法
      voidrequestDestroyed(ServletRequestEvent sre)对象销毁时执行该方法

      参数:ServletRequestEvent 代表事件对象

      事件对象中封装了事件源,也就是ServletRequest 

      真正的事件指的是创建或销毁ServletRequest对象的操作

  • 监听域对象属性变化的监听器

    • ServletContextAttributeListener:用于监听ServletContext应用域中属性的变化

      核心方法

      返回值方法名说明
      voidattributeAdded(ServletContextAttributeEvent scae域中添加属性时执行该方法
      voidattributeRemoved(ServletContextAttributeEvent scae)域中移除属性时执行该方法
      voidattributeReplaced(ServletContextAttributeEvent scae)域中替换属性时执行该方法

      参数:**ServletContextAttributeEvent ** 代表事件对象

      事件对象中封装了事件源,也就是ServletContext 

      真正的事件指的是添加、移除、替换应用域中属性的操作

    • image-20220317200743694
    • image-20220317200819855
  • 监听会话相关的感知型监听器

    • image-20220317200937509
    • image-20220317200955890
  • 监听器配置方式

    • 注解配置 @WebListener

    • 配置文件配置

      <listener>
          <listener-class>com.pangpangyu.listener.ServletContextListenerDemo01</listener-class>
      </listener>
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值