JavaWeb

633 阅读6分钟
  • Java Web是用Java技术来解决相关web互联网领域的技术总称。

  • 需要在特定的web服务器上运行,分为web服务器和web客户端两部分。

  • 跨平台,能够在多个不同平台下布署与运行。

需要会哪些技术?

  1. 基于页面的前端技术,如HTML,CSS,JavaScript等
  2. 动态语言技术,如Java,JSP等
  3. 数据库的技术,如Oracle,MySQL,SqlServer等
  4. 其他工具与组件,如服务器,SSM,SSH框架等

JSP简介

  • JSP全名为Java Server Pages,中文名叫Java服务器页面,其根本是一个简化的Servlet设计

  • JSP是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP 文件,后缀名为(*.jsp)

  • 一个jsp文件中通常包含了HTML代码,CSS样式,JavaScript脚本,Java代码片段

  • JSP允许扩展JSP标签

  • 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行

XML

XML文档规则

  • XML整体结构

    • 有且只有一个根元素
    • 元素必须合理结束
    • 元素之间必须合理嵌套
    • 元素的属性必须有值
  • XML元素的基本规则

    • 合法标签名

      • XML元素由开始标签和结束标签组成,结束标签比开始标签多一条斜线
      • XML文档区分大小写。因此,开始标签和结束标签名必须绝对相同,大小写也要完全一致
      • XML文档对于标签名有如下要求:
        • 标签名可以字母、数字、下划线、中划线、冒号和点号组成,但不能以数字、中划线和点号开头;标签名不能包括<、>、,、$等符号;标签名中尽量不要出现英文冒号,除非是在使用名字空间;标签名不能以字符“xml”(或者XML、Xml等任意大小写组合开始);标签名不能包含空格
    • 嵌套子元素

      • XML允许无限深度嵌套子元素,只要保证元素之间合理嵌套即可
      • XML元素可以嵌套多个重名的子元素,这多个元素之间是有序的
    • 空元素

      • XML允许使用空元素语法,空元素不可接受子元素,也不可接受字符串内容
      • 空元素和内容为空的元素并不相同
      • 空元素只是不能包含子元素,也不能包含字符串内容,但完全可以接受属性
  • 字符数据

    开始标签和结束标签之间的文本可以是任何Unicode字符,并且其间的任何字符都将忠实地传递给XML处理程序

    • 使用实体引用

      • 为了正确处理XML文档中的特殊字符,XML允许使用实体来表示这些特殊字符。
    • 使用CDATA标记

      • 在特殊标记CDATA下,所有的特殊字符,甚至是有效的元素都将被当成简单字符处理,实体引用也会失去作用,变成纯文本

      • 语法:

      • 注释

        XML文档还可以加入解释用的字符数据,这些解释用的字符串不会被XML解析器处理。这些解释用的文本称为注释

        语法:

      • XML注释需要注意的地方:

        1、不要把注释放在标签之内,否则,该文档将不是一个格式良好的XML文档

        2、不要把注释放在XML声明之前,XML声明应该永远处于XML文档的第一行

        3、不要在注释中使用双中划线--

  • W3C对于属性的使用建议

    • 属性通常提供属于数据组成部分的信息,如果属性值里包含的信息属于该实体本身,则应该使用子元素来指定该信息,因此,W3C推荐尽量使用子元素,而避免使用属性
  • 换行处理

    目前主流的操作系统,主要有3种换行符:

    • 1、Windows平台:回车符和换行符的组合存储换行
    • 2、UNIX和Linux平台:以换行符存储换行
    • 3、Macintosh平台:以回车符存储换行

    XML统一换行符(LF)存储换行

  • XML文档分类

    • 格式不良好的XML文档
      • 完全没有遵守XML文档基本规则的XML文档
    • 格式良好但无效的XML文档
      • 遵守了XML文档基本规则,但没有使用DTD或Schema定义语句约束的XML文档
      • 使用DTD或Schema定义了语句约束,但没有遵守DTD或Schema所定义的语义约束的XML文档
    • 有效的XML文档
      • 遵守了XML文档基本规则,并使用DTD或Schema定义了语句约束,而且也完全遵守了DTD或Schema所定义的语句约束的XML文档

XML命名空间

  • 为什么使用命名空间?

    • 在同一份XML文档中可能出现多个同名的元素和属性
  • 使用命名空间

    • 语法:

    • 命名空间的特征:

      1、名字很长(命名空间往往是一个绝对的URL地址)

      2、名字里往往包含英文冒号、斜线等特殊字符

  • 属性使用命名空间

    • 通常情况下,由于属性是属于某个元素的,因此很自然地认为属性总是属于它所在元素所处的命名空间,一般无须专门为属性指定命名空间

XPath语言

  • XPath概念

    • XPath语言是一门专门用于在XML文档中查找信息的语言,其他XML程序可利用XPath在XML文档中对元素和属性进行导航
    • 问:为什么要查找标签和属性呢?
      • 因为XML文档是用来存储数据的,需要将数据提取出来使用,所以通过查找标签和属性进一步获取数据
  • XPath节点

  • XPath基本概念

    1、基本值(或称原子值)

    基本值专门用于表示简单的数据值,例如整数值、字符串等。我们可以把基本值当成没有父节点且没有子节点的节点

    2、项

    项是XPath2.0提出的一个术语,一个项代表一个节点或基本值

    3、节点集和序列

    在某些情况下,XPath表达式可以表示多个节点,多个节点组合在一起在XPath1.0里称为节点集 XPath2.0提出一个序列 的概念,XPath2.0的序列可以代表一个普通的项,也可以代表节点集

  • 节点关系

    1、父节点

    2、子节点

    3、兄弟节点

    4、祖先节点

    5、后代节点

  • 相对路径和绝对路径

    • XPath同样支持相对路径和绝对路径。对于XPath而言,绝对路径以斜线(/)开头,而相对路径则不会以斜线(/)开头
    • 例如:/list/book/name:该路径总是匹配list元素内的book元素之内的name子元素 list/book/name:该路径到底匹配哪个或哪些节点是不确定的
  • XPath基础语法

    • XPath使用路径表达式来定位XML文档中的节点或节点集,每个XPath表达式总由多个步(step)组成,多个步之间用斜线分隔

    ​ 例如:/list/book/name

    • XPath中步的完整语法格式如下:

    ​ 轴::节点测试[限定谓语]

    • 轴:XPath的步使用轴来定义所选节点与当前节点之间的结构关系

    • 节点测试:节点测试用于从指定轴所匹配的节点集中选出特定的节点

    • 限定谓语

      限定谓语是一个boolean表达式,或者可以转换为boolean值的表达式,用于进一步提炼所选的节点集。限定谓语应该放在括号中

  • XPath运算符

    • 算术运算符
    • 比较运算符
    • 逻辑运算符
    • 组合多个路径的运算符
      • XPath还提供了一个“|"运算符,可用于组合多个路径表达式,通过"|"运算符,可以一次选取若干个路径
      • 例如:book[position()=1] | name[position()=last()]

DOM、SAX和JAXP解析

  • XML文档解析方式

    • DOM:Document Object Model:即文档对象模型,它是由W3C推荐的处理XML文档的规范
    • SAX:Simple API for XML,它并不是W3C推荐的标准,但却是整个XML行业的事实规范 -XML文档解析原理
  • JAXP概述 1、Java解析XML文档的API称为JAXP,它的全称是Java API for XML

    2、JAXP往往作为JDK的一部分发布,但它仅仅是一些API接口,并为提供真正的实现,因此实际使用过程中还需要具体的解析实现

    3、JAXP只是允许应用程序在不同的XML解析器之间切换

  • JAXP的作用

    • JAXP提供的与解析相关的类
  • JAXP的SAX支持

    • SAX的处理机制:SAX采用事件机制的方式来解析XML文档,这是一种快速读写XML数据的方式

    • SAX解析XML文档的流程:使用SAX机制解析XML文档时,SAX解析器负责在XML文档中”行走“,每当遇到文档开始、元素开始、文本、元素结束和文档结束时,都将负责向外发送事件,而程序员则负责提供事件监听器来监听这些事件,并通过事件获取XML文档信息

    • SAX解析事件

      • JAXP提供了一个DefaultHandler类,这个类实现了4个监听器接口,并为监听器接口中所包含的方法提供了空实现
    • SAX解析XML文档

      ​ 需求:解析出first.xml的内容

      ​ 实现思路:

      ​ 1、在工程中引入Xerces-J具体解析器实现类jar包

      ​ 2、自定义事件监听器继承自DefaultHandler

      ​ 3、通过SAXParseFactory的newInstance()方法创建SAX解析器工厂对象

      ​ 4、通过SAXParseFactory对象的newSAXParser()方法创建SAXPasrer对象

      ​ 5、调用SAXParser对象的parse()方法解析XML文档

    • SAX生成XML文档

      ​ 实现思路:

      ​ 1、创建保存xml的结果流对象

      ​ 2、获取sax生成工厂对象实例

      ​ 3、获取sax生成处理者对象实例

      ​ 4、获取sax生成器

      ​ 5、生成文档及文档中的元素

Servlet

Servlet简介

  • Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容

Servlet的生命周期

  • 初始化阶段调用init()方法
  • 响应客户端请求阶段调用service()方法
  • 终止阶段调用destroy()方法

请求与响应

  • 浏览器对服务器的一次访问称之为一次请求,请求用HttpServletRequest对象来表示
  • 服务器给浏览器的一次反馈称之为一次响应,响应用HttpServletResponse对象来表示

ServletContext与SercletConfig

  • java是一门面向对象的语言,万事万物皆对象。整个JavaWeb工程也可以用一个对象来表示,这个对象就是ServletContext类型。
  • 我们可以在web.xml文件中给某一个Servlet配置一些配置信息,当服务器被启动的时候,这些配置信息就会被封装到某一个ServletConfig对象中去。因此ServletConfig表示的是某一个Servlet的配置文件

转发与重定向

  • 实现转发调用的是HttpServletRequest对象中的方法,实现重定向调用的是HttpServletResponse对象中的方法
  • 转发时浏览器中的url地址栏不会发生改变,重定向时浏览器中的url地址会发生改变
  • 转发时浏览器只请求一次服务器,重定向时浏览器请求两次服务器

EL表达式

  • EL表达式介绍及作用:Expression Language(表达式语言),目的是替换JSP页面中的复杂代码
  • EL表达式语法:${变量名}

JSTL

JSTL介绍

  • JSP标准标签库(JavaServerPages Standard Tag Library)
  • 与EL表达式关系:JSTL通常会与EL表达式合作实现JSP页面的编码
  • JSTL开发准备:在JSP页面添加taglib指令<%@ taglib uri="java.sun.com/jsp/jstl/co…" prefix="c"%>

为什么要使用JSTL标签

  1. 在jsp中不建议直接书写java代码(规范性问题)
  2. EL表达式虽然可以解决“不用书写java代码”问题,但是对于复杂的数据(如数组、集合等)取值会很麻烦
  3. 使用JSTL标签配合EL表达式能够很好的解决取复杂类型数据的问题,简化代码书写,可以减少JSP中嵌入的Java代码,有利于程序的维护和扩展

JSTL常用标签介绍

  1. 通用标签

    • set、out、remove

      • set标签:将值保存到指定范围里 将value值存储到范围为scope的变量variable中 <c:set var="username" value="张三" scope=" scope "/>

      • out标签:将结果输出显示 <c:out value="value" />

      • remove标签:删除指定域内数据 <c:remove var="username" scope="session"/>

  2. 条件标签:if、choose

  3. 迭代标签:forEach

Ajax

Ajax简介

  • Ajax是一种用于创建快速动态网页的技术,能够实现动态刷新,提高用户的体验度,降低后台服务端程序的压力

Ajax特点

  • 通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新
  • 传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面

使用Ajax好处

  • 更新时只需要刷新局部,用户体验度好
  • 由于只需要刷新局部的数据,对后台服务器的压力较小

Ajax语法总结及注意事项

  1. url:请求的地址
  2. type:请求时数据的传递方式(常用的有get/post)
  3. data:用来传递的数据(建议使用json来传递)
  4. success:交互成功后要执行的方法
  5. dataType:ajax接收后台数据的类型(建议使用json)
  6. 注意事项:ajax和后台交互时,后台是不能够直接跳转到其他页面的

Ajax的应用场景

  • 百度搜索框、地图等

Java正则表达式

正则简介

  • 使用特殊的符号来做校验,目标是操作字符串。例如:手机号码、邮箱、身份证的校验等

使用正则表达式的优缺点

  • 优点:简化代码书写量
  • 缺点:阅读性较差

正则表达式语法规则

  • [abc] a、b或c(简单类)
  • [a-zA-Z] a到z或A到Z,两头的字母包括在内(范围)
  • \d 数字:[0-9]
  • X{n} X,恰好n次
  • X{n,} X,至少n次
  • X{n,m} X,至少n次,但是不超过m次
  • \D:非数字
  • \s:空白字符(如空格、\t制表位、\n换行等)
  • \S:非空白字符(除了空白字符以外的其他都可以)
  • \w:单词字符:[a-zA-Z_0-9]
  • \W:非单词字符
  • 在正则表达式中“^”表示正则的起始标记,“$”表示结束标记(可以不写)

前台校验局限性

  • 前台校验优点

    • 能够对数据进行初步的筛选,减少后台服务器的压力
    • 使用html5校验,比较简单易用
  • 前台校验弊端:

    • 可以通过一些手段绕过前端的校验

Java过滤器

过滤器的作用

  • 实现对web资源请求的拦截,完成特殊的操作,尤其是对请求的预处理

过滤器的应用场景

  • web资源权限访问控制
  • 请求字符集编码处理
  • 内容敏感字符词汇过滤
  • 响应信息压缩

过滤器的生命周期

  1. web应用程序启动时,web服务器创建Filter的实例对象,以及对象的初始化
  2. 当请求访问与过滤器关联的web资源时,过滤器拦截请求,完成指定功能
  3. Filter对象创建后会驻留在内存,在web应用移除或服务器停止时才销毁
  4. 过滤器的创建和销毁由web服务器负责

过滤器的实现步骤

  1. 编写java类实现Filter接口,并实现其doFilter方法
  2. 在web.xml文件中对filter类进行注册,并设置所拦截的资源

过滤器链

  • 在一个web应用中,多个过滤器组合起来称之为一个过滤器链
  • 过滤器的调用顺序取决于过滤器在web.xml文件中的注册顺序

监听器

Java监听器定义

  • Servlet规范定义的一种特殊类
  • 用于监听ServletContext,HttpSession,ServletRequest等域对象的创建、销毁及其属性修改发生变化的事件
  • 监听器可以在事件发生前后进行一些必要的处理操作

常见应用场景

  • 统计在线人数
  • 页面访问量的统计
  • 应用启动时完成信息初始化工作
  • 与Spring结合

监听器的实现步骤

  • 编写java类实现监听器接口,并实现其接口方法
  • 在web.xml文件中对实现的监听器类进行注册

Java监听器分类

  • 按监听对象

    • ServletContext对象监听器
    • HttpSession对象监听器
    • ServletRequest对象监听器
  • 按监听事件

    • 域对象自身的创建和销毁事件监听器
    • 域对象中属性的创建、替换和消除事件监听器
    • 绑定到session中的某个对象的状态事件监听器