JavaWeb | 3 JavaWeb基础

XML 入门


简介

EXtensible Markup Language:可扩展标记语言

  • 编写XML就是编写标签,与HTML非常类似,扩展名.xml
  • 良好的人机可读性
hr.xml
<employee>
	<name>张三</name>
	<age>31</age>
	<height>178</height>
</employee>

用途

XML文档语法规则

  • 第一行必须是XML声明
  • 有且只有一个根节点
  • XML标签的书写规则与HTML相同

XML声明

说明XML文档的基本信息,包括版本号与字符集,写在XML第一行

<?xml version="1.0" encoding="UTF-8"?>

版本号:1.0
字符集:UTF-8,用于支持中文

XML标签书写规则

  • 合法的标签名
<shop-cart><item>相册</item></shop-cart>
  • 适当的注释与缩进
  • 合理使用属性
  • 处理特殊字符
    • 特殊字符
      标签体中,出现 “<", ">"特殊字符,会破坏文档结构。
      解决方案
      • 使用实体引用:XML支持五种
        在这里插入图片描述

      • 使用CDATA标签( 指,不应由XML解析器进行解析)
        <![CDATA[......]]>

  • 有序的子元素
    在XML多层嵌套的子元素中,标签前后顺序应保持一致。

XML语义约束:DTD与XML Schema

XML文档结构正确,但可能不是有效的。语义约束:规定XML文档中允许出现哪些元素。有以下两种定义方式。

DTD

Document Type Defifnition,文档类型定义:一种简单易用的语义约束方式。文件扩展名.dtd

DTD 定义节点

可定义XML文档中允许出现的节点及数量,以hr.xml为例:

  • 定义节点:
/* 定义hr节点下只允许出现1个employee子节点 */
<!ELEMENT hr (employee)>
/* employee节点下必须包含以下四个节点,且按顺序出现 */
<!ELEMENT employee (name,age,salary,department)>
/* 定义name标签只能是文本,#PCDATA代表文本元素 */
<!ELEMENT name (#PCDATA)>
  • 定义节点数量:如果子节点需要多次重复出现,则需要在子节点后增加相应的描述符
/* hr节点下最少出现1个employee子节点 */
<!ELEMENT hr (employee+)>
/* hr节点下可出现0……n个employee子节点 */
<!ELEMENT hr (employee*)>
/* hr节点下最多出现1个employee子节点 */
<!ELEMENT hr (employee?)>
XML引用DTD文件

使用!DOCTYPE>标签,书写格式 <!DCOCTYPE 根节点 SYSTEM "dtd文件路径">

<!DCOCTYPE hr SYSTEM "hr.dtd">

XML Schema

  • 比DTD更复杂,提供了更多功能
  • 提供了数据类型、格式限定、数据范围等特性
  • 是W3C标准
DOM文档对象模型

在这里插入图片描述

Dom4j与XPath表达式

Dom4j

  • 一个易用、开源的库,用于解析XML。应用于Java平台,性能优异、功能强大、极其易使用
  • XML 视为Document对象
  • XML标签 定义为Element对象
利用 Dom4j 遍历 XML

利用 Dom4j 更新 XML

XPath

  • XPath 路径表达式是 XML 文档中查找数据的语言
  • 可极大提高在提取数据时的开发效率
  • 本质是掌握各种形式表达式的使用技巧
XPath 基本表达式
表达式描述
nodename选取此节点的所有子节点
/从根节点选取
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
.选取当前节点
选取当前节点的父节点
@选取属性
XPath 基本表达式案例
路径表达式结果
bookstore选取 bookstore 元素的所有子节点
/bookstore选取根元素bookstore
bookstore/book选取 bookstore 的子元素的所有 book 元素
//book选取所有 book 子元素,而不管它们在文档中的位置
bookstore//book选取 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置
//@lang选取名为 lang 的所有属性
XPath 谓语表达式
路径表达式结果
bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素
bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素
bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素
bookstore/book[positipon() < 3]选取最前面的两个属于 bookstore 子元素的 book 元素
//title[@lang]选取拥有名为 lang 的属性的 title 元素
//title[@lang=‘eng’]选取所有 title 元素,且这些元素拥有值为eng的 lang 属性
bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值需大于 35.00
bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值需大于 35.00
Jaxen介绍
  • 一个Java编写的开源的XPath库。适应多种不同的对象模型,包括 DOM、XOM、Dom4j 和 JDOM
  • Dom4j 底层依赖 Jaxen 实现 XPath 查询
  • 下载地址:jaxen.codehaus.org

Servlet 入门


Broswer-Server(B/S)模式

软件结构发展史

  • 单机时代:桌面应用
  • 联机时代:Client-Server模式(C/S结构),即,客户端和服务器结构
    • 优点:数据方便共享,安全性高
    • 缺点:必须安装客户端,升级与维护困难
  • 互联网时代:Broswer-Server模式(B/S结构),即,浏览器和服务器架构
    • 优点:开发简单,无需安装客户端,数据易于共享
    • 缺点:相较于C/S模式,执行速度与用户体验相对较弱

B/S模式执行流程


在这里插入图片描述

请求与响应

  • 请求 Request :从浏览器发出给服务器的数据包
  • 响应 Response :从服务器返回给浏览器的结果

J2EE

  • Java 2 Platform Enterprise Edition:Java 2 企业版
  • B/S 模式开发 Web 应用是 J2EE 最核心的功能
  • J2EE 由 13 个功能模块组成
    在这里插入图片描述

Apache Tomcat

  • Apache 软件基金会旗下一款免费的开放原代码的 Web 应用服务器程序
  • 是运行 Servlet (服务器小程序) 的容器
  • J2EE 与 Tomcat 的关系
    • J2EE 是一组技术规范与指南,具体实现由软件厂商决定
    • Tomcat 是 J2EE Web(Servlet与JSP)标准的实现者
    • J2SE是J2EE运行的基石,运行 Tomcat 离不开 J2SE

Servlet

  • Server Applet,服务器小程序:用于生成动态 Web 内容
  • 是 J2EE 最重要的组成部分
    在这里插入图片描述
  • Tomcat 提供硬件基础
  • Servlet 提供软件实现

Servlet 开发技巧

标准Java Web工程结构

组织结构描述
tomcat安装目录/webapps/Tomcat应用根目录
/web应用目录/Java Web应用目录
/web应用目录/index.html .jsp默认首页
/WEB-INFWEB应用的安全目录,用于存放配置文件
/WEB-INF/web.xmlweb.xml 是“部署描述符文件”,是该Web项目核心配置文件
/WEB-INF/lib用于存放web应用依赖的jar文件
/META-INF/MANIFEST.MF包含Web应用的版本等信息

Servlet 开发步骤

  • 创建Servlet类,继承HttpServelet
  • 重写service方法,编写程序代码
  • 配置web.xml,绑定URL
Servlet访问方法
  • http://IP地址:端口/context-path/url-mapping
  • 远程访问使用IP地址,本地访问localhost(127.0.0.1)
  • context-path成为“上下文路径”,默认为工程名
请求参数
  • 指浏览器通过请求向 Tomcat 提交的数据
  • 通常是用户输入的数据,待 Servlet 进行处理
  • 参数名1=值1&参数名2=值1&参数名n
  • Servlet 接收请求参数
    • request.getParameter():接收单个参数
    • request.getParameterValues():接收多个同名参数
Get 与 Post 请求方法

只是传输方式不同,数据内容是相同的:

  • Get:将数据通过在 URL 附加数据显性向服务器发送数据
    http://localhost:8080/FirstServlet/sample?name=zhangsan,加?区分url与参数

  • Post:将数据存放在请求体中隐性向服务器发送数据
    http://localhost:8080/FirstServlet/sample

service是请求处理的核心方法,无论是get或者是post都会被service()方法处理

Get与Post处理方式

  • 所有请求:service()方法
  • Get请求:doGet()方法
  • Post请求:doPost()方法

Get与Post应用场景

  • Get:不包含敏感信息的查询功能
  • Post:安全性较高的功能、服务器的“写”操作,如,用户登录、用户注册、更新公司账目

Servlet 执行原理

Servlet 生命周期

  • 装载 - web.xml
  • 创建 - 构造函数
  • 初始化 - init()
  • 提供服务 - service()
  • 销毁 - destroy()

使用注解简化配置

  • Servlet 3.x 之后引入了“注解Annotation”特性
  • 用于简化Web应用程序的配置过程
  • Servlet核心注解:@WebServlet(有且只有一个)

启动时加载 Servlet

  • web.xml使用<load-on-startup>设置启动加载
  •   <load-on-startup>0~9999</load-on-startup>
      0 的优先级最高
    
  • 启动时加载在工作中常用于系统的预处理

具体使用方法

创建新HttpServlet类,并重写init()方法。并选择以下方法中的一种进行配置:

  • 在.xml文件中配置
    <servlet>
    	<servlet-name>create</servlet-name>
    	<servlet-class>com.imooc.servlet.CreateServlet</servlet-class>
    	<load-on-startup>0</load-on-startup>
    </servlet>
    由于不需要提供服务,在此不需要绑定 URL
    
  • 使用注解
    @WebServelet(urlPatterns="/unused",loadOnStartup=2) //优先级为2
    public class AnalysisServlet extends HttpServlet{ 
    	@Override
    	public void init() throws ServletException {
    		方法体;
    	}
    }	
    

JSP 入门


Servlet 的缺点

  • 静态 HTML 与动态 Java 代码混合在一起,难以维护
  • Servlet 利用 out.println() 语句输出,开发效率低下
  • Eclipse 很难在开发过程中发现错误,调试困难

JSP 简介

Java Server Page,Java服务器页面:是J2EE 的功能模块,由 Web 服务器执行。作用是降低动态网页开发难度

JSP 特点

  • 使用简单,短时间学习便可上手使用
  • 可将 Java 代码与 HTML 分离,降低开发难度
  • 本质是 Servlet

JSP 运行要求

  • 可正常运行的 Tomcat
  • 所有 JSP 页面扩展名必须是 .jsp
  • JSP 页面应放在 Web 应用程序目录下
    在这里插入图片描述

JSP 基本语法

按功能分为以下四种:

  • JSP代码块
  • JSP生命构造块
  • JSP输出指令
  • JSP处理指令
JSP 代码块
  • 用于在JSP中嵌入Java代码
  • 语法:<% Java代码 %>
    <% System.out.println("Hello World!"); %>
    
JSP 声明构造块
  • 用于声明变量或方法
  • 语法:<%! 声明语句 %>
    <%! public int add(int a, int b){return a+b}; %>
    
JSP 输出指令
  • 用于在JSP页面中显示Java代码执行结果
  • 语法:<%= Java代码 %>
    <%= "<b>" + name "</b>" %>
    
JSP 处理指令
  • 用于提供JSP执行过程中的辅助信息
  • 语法:<%@ JSP指令 %>
    <%@ page import="java.util" %>
    
  • 常用处理指令:
    • <%@ page %>:定义当前JSP页面全局设置
    • <%@ include %>:将其他JSP页面与当前JSP页面合并
    • <%@ taglib %>:引入JSP标签库
JSP中注释的区别
  • <%-- 注释 --%>:JSP注释
  • //、/*...*/:用于注释 <% %> Java代码,被注释代码不执行
  • <!-- html -->:HTML 注释,被注释的语句不会被浏览器解释

Servlet 与 JSP 进阶


Java Web 核心特性

HTTP 请求与响应

  • HTTP请求的结构:包含三部分:请求行、请求头、请求体。(巧用请求头可开发多端应用)
  • HTTP响应的结构:包含三部分:响应行、响应头、响应体

HTTP 常见状态码

状态码错误描述
200服务器处理成功
301、302请求重定向
400无效的请求
401未经过授权
403服务器拒绝访问
404无法找到文件
500内部服务器错误
503服务器超负载或正在停机维护,无法处理请求
ContentType的作用

决定浏览器采用何种方式对响应体进行处理

MIME类型描述
text/plain纯文本
text/htmlHTML文档
text/xmlXML文档
application/x-msdownload需要下载的资源
image/jpeg
image/gif
image/…
图片资源
请求转发与重定向

多个 Servlet (JSP) 之间跳转有两种方式:

  • request.getRequestDispatcher().forward()请求转发。服务器跳转,只会产生一次请求
  • response.sendRedirect()响应重定向。浏览器端跳转,会产生两次请求。
设置请求自定义属性

请求允许创建自定义属性

  • 设置请求属性:request.setAttribute(属性值,属性名)
  • 获取请求属性:Object attr = request.getAttribute(属性名)

浏览器 Cookie

  • 是浏览器保存在本地的文本内容
  • 常用于保存登录状态、用户资料等小文本
  • 具有时效性,Cookie内容会伴随请求发送给Tomcat

Session 用户会话

  • 用于保存与“浏览器窗口”对应的数据
  • 其数据存储在 Tomcat 服务器的内存中,具有时效性
  • 通过浏览器的 Cookie 的 SessionId 值提取用户数据
Session 常用方法
  • request.getSession():获取Session对象
  • get/set/removeAttribute():获取/设置/删除Session属性
  • setMaxInactiveInterval:设置Session超时时间
Session 的原理

在这里插入图片描述

Servlet 核心对象

ServletContext

Servlet上下文对象,是Web应用全局对象。

  • 一个Web应用只会创建一个ServletContext对象
  • ServletContext随着Web应用启动而自动创建

Java Web 三大作用域对象

  • HttpServletRequest:请求对象
  • HttpSession:用户会话对象
  • ServletContext:web应用全局对象

Web应用的中文乱码由来

Tomcat默认使用字符集ISO-8859-1,属于西欧字符集。解决乱码的核心思路是将ISO-8859-1转化为UTF-8。Servlet中请求与响应都需要设置UTF-8字符集。

web.xml 常用配置

  • 修改web应用默认首页
  • Servlet 通配符映射及初始化参数
  • 设置404、500等状态码默认页面

JSP 九大内置对象

内置对象描述名称
request请求对象HttpServletRequest
response响应对象HttpServletResponse
session用户会话HttpSession
application应用全局对象ServletContext
out输出对象PrintWriter
page当前页面对象this
pageContext页面上下文对象PageContext
config应用配置对象ServletConfig
exception应用异常对象Throwable

Tomcat常用配置

  • 修改Web应用端口号
  • 修改ContextPath上下文路径
  • 设置应用自动重载

Java Web打包与发布

  • 采用 war 包进行发布
  • 发布路径为 {TOMCAT_HOME}/webapps
  • Eclipse 支持 war 包导出

JSTL 与 EL 表达式


EL的表达式

Expression Language,表达式语言:用于简化JSP的输出。

基本语法

${表达式}

<h1>学生姓名: ${student.name}</h1>

作用域对象

EL表达式内置四种作用域对象。

忽略书写作用域对象时,EL则按作用域从小到大依次尝试获取。

作用域对象描述
pageScope从当前页面取值
requestScope从当前请求中获取属性值
sessionScope从当前会话中获取属性值
applicationScope从当前应用中获取全局属性值

EL表达式输出

${title}
${requestScope.student.name}
${emp.salary + 300}
${1 <= 3 && 2 > 4}

输出参数值:EL内置param对象来简化参数的输出。语法${param.参数名}

JSTL标签库

JSP Standard Tag Library,JSP 标准标签库:用于简化JSP开发,提高代码的可读性和可维护性。

JSTL 由 SUN(Oracle) 定义规范,由Apache Tomcat 团队实现。

JSTL标签库种类

按功能可分为5类

类别库名
核心标签库core
格式化输出标签库fmt
SQL操作标签库sql
XML操作标签库xml
函数标签库functions

JSTL核心库

下载:http://tomcat.apache.org
JSTL v1.2.5 组件介绍:

作用域对象描述
taglibs-standard-spec-1.2.5.jar标签库定义包(必须)
taglibs-standard-impl-1.2.5.jar标签库实现包(必须)

安装:

  • 将Jar文件复制到工程的WEB-INF/lib目录(推荐)
  • 将Jar文件复制到Tomcat安装目录的lib目录

引用:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JSTL核心标签库在taglibs-standard_impl.jar由META-INF/c.tld定义

判断标签

  • <c:if>:单分支判断
  • <c:choose><c:when><c:otherwise>:多分支判断

遍历集合
<c:forEach>:用于遍历集合中的每一个对象

<c:forEach var="p" items="${persons}" varStatus="idx">
  第${idx.index + 1}位 <br>
  姓名:${p.name}  性别:${p.sex}  年龄:${p.age}
</c:forEach>

fmt 格式化标签库

URL:http://java.sun.com/jsp/jstl/fmt

  • 格式化日期标签
<fmt:formatDate value = "" pattern = ""/>
  • 格式化数字标签
<fmt:formatNumber value = "" pattern = ""/>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值