XML与Servlet

XML

XML

xml用来?

编写配置文件
数据传输
加入有一个手机APP客户端,是一个网上商城的软件,打开软件需要显示商品列表。那么这个商品列表的数据就可以使用xml来传输。

xml语法

大小写敏感
有开始标记必须有结束标记(标记是成套的)
标记可以是单标记,但必须自己闭合
标记可以包含标记(可以嵌套,嵌套成对嵌套)
标记可以有自己的属性(属性值必须加引号)
标记里面可以有内容
必须有根标记,也叫做根元素。(根元素是其他元素的父元素)

xml文档声明

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

必须放在第一行

标记命名

区分大小写
不能使用空格和冒号
不建议以XML xml Xml 等跟xml相关名字

xml中特殊符号的表示

XML详情语法规则

注释

对XML的约束 DTD,Schema

平时编写xml文件的时候,是没有固定规则的,标记名,属性名,属性值我们可以按照我们的需求随意来开发。
但是当我们使用别人的框架的时候,一般需要提供一个配置文档,来配置我们使用这个框架的时候的一些属性。这个时候,这个配置文档就需要按照框架的要求来编写。框架的要求就是对xml文档的约束。我们可以通过DTD和Schema文档来编写对文档的约束。

定义了约束之后,可以防止我们写错文档
比如某个配置文件,按照相同的约束来书写,更容易让别人阅读和别的程序读取。

什么是DTD

DTD用来约束xml文档,规定xml文档中元素的名称,子元素的名称和顺序,元素的属性。
一般来说我们很少编写自己的DTD文档约束,我们一般会遵循框架提供的DTD约束文档来编写配置文件。

当我们编写的xml不符合DTD约束规则的时候,会报错,方便我们找错。

怎么引入DTD约束

DTD详情

1:内部引入 2:外部引入(本地) 3:外部引入(网络)
示例:Struts框架的配置文档的首行

<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
schema约束(比DTD牛逼,替代DTD)

schema约束文档本身也是一个xml文档,后缀为xsd
语法更加容易阅读,更加友好
功能更加强大,类型更加完善
里面有命名空间

同样,我们也不需要写schema约束文档,我们只需要直接使用框架提供给我们的约束文档即可。

schema文档的使用

schema文档详情

xml解析方式

DOM方式

DOM文档对象模型(树形结构)
DOM方式解析,就是把xml文档加载到内存形成树形结构,可以进行增删改的操作。

xml里面的dom
html里面的dom
差不多,都是用来解析标签的,解析成一个树,并得到一个document对象。

我们可以使用dom4j来进行dom方式的解析。
dom4j是一个开源是xml解析软件包。

解析的时候需要做的事情
1,解析根元素
2,解析有哪些子元素
3,解析一个元素又哪些属性
4,得到元素的文本内容
5,修改、添加、删除某个元素节点
6,修改、添加、删除某个属性

dom4j解析xml 代码

DOM4j用法

jsp

简单来说JSP = html + Java代码
在一个正常的网页上,加入java代码之后,就成为了一个jsp页面。

jsp用来开发动态页面

什么是静态页面,什么是动态页面!
某网址首页,登录后用户名的显示。
静态页面上的内容(文字、图片)是不改变的。Web前端工程师开发出来后的页面就是一个静态页面。我们后端人员需要把静态页面变成动态页面。

tomact是干什么的

Eclipse编写代码—>.java—>jdk---->.class—>jre运行
Eclipse编写代码—>.jsp/servlet–>tomcat运行
客户端访问tomcat

项目结构

源码
web内容(html,jsp,图片等资源)
web-inf:配置文件和java程序
web.xml
classes
lib

修改字体大小

window - prefer - general - appearance - colors and fonts

编码格式

默认的编码
ISO-8859-1
乱码问题以及怎么解决
utf-8

在jsp页面上写Java代码

<%
%>
这个东西可以多次出现
实现一个显示当前登录的用户名

jsp内容输出表达式
<%= %>

jsp中java代码可以和页面html代码组合使用

成员变量和局部变量

一个jsp对应一个java类,运行的时候,一个jsp会创建一个对应的java对象。
<%! %> jsp定义表达式

注释

<%-- --%>
不起任何实际作用
还可以注释 <% %>
在java代码中依然可以使用java支持的注释

在jsp中引入java类

<%@page import=“java.util.Random”%>
<%@page import=“java.util.Random,java.text.*”%>

http协议和jsp内置对象

何为协议以及http协议

协议:当我们跟别人合作的时候,需要是先定义好双方要做的事情,利益怎么分配等事情。免得在合作的时候出现分歧。

http协议规定了我们在发起http请求的时候,这个请求的数据包里面都包含了什么样的数据以及数据按照什么样的先后顺序存放在数据包里面。

http请求和http响应

转载:Http请求和Http响应详细解析

何为jsp的内置对象

不需要声明,不需要创建,就可以直接使用的对象,就是内置对象。
九大内置对象。

session会话

session request 生命周期
session对象什么时候会被销毁
关闭浏览器
到达有效时间(长时间不操作网站)

application

web容器的生命周期
网站启动起来,创建一个applition,当网站关闭后,application被销毁。
一个web应用只有一个application对象。

Servlet

何为Servlet

如果一个jsp页面单纯的只是处理逻辑,不做页面显示用的话,这个时候可以让这个请求交给Servlet来处理。

jsp页面本质上也是Servlet

Servlet创建

Servlet是一个类,继承自javax.servlet.http.HttpServlet

Servlet两种配置方式

1,xml配置文件
2,注解的方式@WebServlet

先详解web.xml

配置方式

<servlet>
		<servlet-name>x</servlet-name>
		<servlet-class>xx</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name></servlet-name>
		<url-pattern></url-pattern>
	</servlet-mapping>

得到当前项目名

String basePath = "/"+request.getServletContext().getContextPath();
可以在servlet中使用  response.getWriter().append 给客户端响应来添加页面标签代码

Servlet生命周期

第一次被请求的时候会调用init
每一次被请求会调用service方法
终止调用destroy

ServletContext(Servlet环境,就是jsp的内置对象之一)

整个工程可以认为是一个ServletContext对象(我们在jsp页面获取到的application)
可以认为ServletContext管理着生成的所有的Servlet
(ServletContext里面都可以存放东西,在其他任意地方都可以取)
怎么获取?
jsp里面:application内置
servlet里面:this.getServlet.Context()

ServletConfig

一个Servlet有一些配置信息,一个Servlet对应的配置信息对应一个ServletConfig对象。
怎么获取?
this.getServletConfig();

转发和重定向

转发通过request
重定向通过response

转发

里面只有一个请求(可以通过request来传递数据)
浏览器地址不会发生改变

request.getRequestDispatcher("/xxx.jsp").forward(request,response);

重定向

里面有两个请求(通过url传递数据)
通过application来传递数据,不这么做!!!
地址会发生改变

response.sendRedirect("/project_name/xxx.jsp");

通过response

转发

里面只有一个请求(可以通过request来传递数据)
浏览器地址不会发生改变

request.getRequestDispatcher("/xxx.jsp").forward(request,response);

重定向

里面有两个请求(通过url传递数据)
通过application来传递数据,不这么做!!!
地址会发生改变

response.sendRedirect("/project_name/xxx.jsp");

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值