Servlet高级
一、ServletConfig
获取servlet的初始化配置信息,如字符编码,servlet名字等等。
获取的方法:String value = getInitParameter(“参数的名字”);
Enumeration names = getInitParameterNames(“参数的名字”);
注意: 对对servletConfig获取的初始化参数,只是单个servlet的初始化参数。
对于初始化参数的配置方法:
-
配置位置: web.xml对应的servlet标签下:
-
servlet获取初始化参数的方法实例:
二、ServletContext
获取的是整个servlet公用的初始化配置信息,且在整个项目中ServletContext对象只有一个,称为服务器对象。
参数的配置
获取初始化参数的方法:
三、作用域对象
作用域对象是指有作用域域范围的对象我们就称之为作用域对象。作用域对象主要用于携带数据,作用域对象携带的数据可以在一定范围内被使用(有效)。
servlet中常用的两个作用域对象是HttpServletRquest和servletContext
作用域对象常用方法:
- 将数据存放到作用域: 作用域对象.setAttribute(String name,Object value);
- 取出数据: Object ob = 作用域对象.getAttribute(String name);
- 移除作用域中的数据: 作用域对象。removeAttribute(String name);
HttpServletRequest作用域的作用范围:在一次请求行内有效,即可以获取作用域中存放的数据。 - 实例:
- 实例2:
ServletContext作用域对象作用域范围:服务器的整个生命周期内有效(范围很大)
- 实例2:
- 实例:
- 实例:
- 实例:
四、转发与重定向
请求转发和重定向是servlet中实现页面跳转的两种主要的方式。
请求转发和重定向的方法:
- 请求转发:request.getRequestDispatcher(“请求转发跳转的地址”).forward(req, resp);
- 重定向: response.sendRedirect(“重定向的值”);
(一)转发与重定向原理
- 请求转发的原理:
- 重定向的实现原理:
(二)转发与重定向区别
- 1、请求转发是服务器行为,从服务器内部发起,而重定向是客户端行为,从客户端发起。
- 2、请求转发的地址栏不会发生变化,重定向会发生改变
- 3、请求转发不可以跨服器访问,但是重定向可以。
- 4、请求转发的效率高,而重定向效率低
- 5、请求转发的方式是: request.getRequestDispatcher(“BServlet”).forward(req, resp);
重定向通过: response.sendRedirect(“重定向地址”); - 注意:WEB_INF是javaweb项目的安全目录,只能通过服务器内部进行访问,如通过请求转发的法式访问。
五、Servlet3.0注解模式
注解是java1.5之后提供的可以加在包、类、方法、参数等上的注解,当给对应的位置加上注解之后,可以通过反射等方式赋予注解特定的功能。
对于servlet只有3.0的版本之后才支持注解。
使用注解和方式来创建Servlet:
- 注解的配置:
注意: 对于一个servlet如果使用的注解方式进行了配置,就不能再使用web.xml进行配置,否则会两个配置会冲突。
六、XML
(一)XML简介:可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
主要作用是: 主要用于在internet网络进行数据的传输。
特点: xml是用于用户自定义标签的。格式非常规范,比较利于阅读。
(二)XML书写与规范
-
XML和HTML的不同
- 1、XML是严格区分大小写。html不区分大小写
- 2、XML标签基本都是成对存在,而html中有单标签和双标签。
- 3、XML的根标签只能有一个,而HTML可以有多个跟标签。
- 4、XML的所有标签都是自定义的,而HTML标签都是预定义。
- 5、XML的属性样式自定义的,而HTML属性是预定定义的,赋予特定的含义。
- 6、XML标签样式子父级关系的,需要正确嵌套。
- 7、XML是数据传输,而HTML用于数据的呈现。
(三)XML解析
- 常用的XMl解析工具
- DOM : dom在解析XML是将整个xml读取到内存中,然后在进行解析的,容易造成内存溢出。
- SAX: 解析工具在解析是一行一行进行解析的,解决了内存溢出的问题,但是效率低下。
- JDOM:在SAX和DOM的基础之上,完全使用实现类来编写的XML解析工具,工具效率和安全性都有所加强,整个工具较小,但是不利于扩展。
- DOM4j: DOM4j是在JDOM的基础之上,通过先定义对应的接口,然后在接口标准之上来创建的XML解析工具,更有利于扩展和后期维护,是目前最流行的XMl解析工具,在很多流行框架在被使用。
- XPath:结合和XML和ECMCScript语言的特点,将xml文件解析为结构树,通过节点的方式直接可以搜索xml指定的标签,通过标签名或者是属性,使得xml解析更加简单,是建立DOM4J基础之上的。
- 定义XML文件的方法:
- 第一步:
- 第二步: 也可以直接点击finish
- 创建好的xml文件
- 创建好的文件:
- 创建好的文件:
- DOM4J解析XMl:
- 步骤1:导入DOM4j的jar文件
- 步骤2:创建方法,读取xml文件
- 步骤3: 创建xml核心解析器SAXReader对象
- 步骤4: 解析xml
- 第一步:
package com.ujiuye.xml;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
public class DOM4JDemo {
@Test
public void readXml() throws DocumentException {
//将xml文件读取进来
InputStream in = DOM4JDemo.class.getClassLoader().getResourceAsStream("book.xml");
//DOM4j解析xml的核心对象
SAXReader sax = new SAXReader();
//将xml文件解析为一个Document对象
Document doc = sax.read(in);
//获取xml的根节点
Element root = doc.getRootElement();
String name = root.getName(); //获取xml根节点的名字
System.out.println("根节点的名字: " + name);
String value = root.getStringValue(); //获取标签下的所有内容,包含子标签中的内容
System.out.println("获取标签下的所有内容 : " + value);
}
//获取xml子节点的内容和属性
@Test
public void readXmlSon() throws DocumentException {
//将xml文件读取进来
InputStream in = DOM4JDemo.class.getClassLoader().getResourceAsStream("book.xml");
//DOM4j解析xml的核心对象
SAXReader sax = new SAXReader();
//将xml文件解析为一个Document对象
Document doc = sax.read(in);
//获取xml的根节点
Element root = doc.getRootElement();
List<Element> elements = root.elements(); //返回根节点下所有子节点的集合
for (Element element : elements) {
//获取属性对象,根据属性的名字
Attribute attr = element.attribute("id");
//根据属性对象获取属性的名字
String attName = attr.getName();
//获取属性的值
String value = attr.getValue();
System.out.println(attName + " : " + value);
}
}
//获取xml标签中的文本
@Test
public void readXmlText() throws DocumentException {
Document doc = readXML();
//获取xml的根节点
Element root = doc.getRootElement();
List<Element> elements = root.elements(); //返回根节点下所有子节点的集合
for (Element element : elements) {
List<Element> elements2 = element.elements();
for (Element element2 : elements2) {
//根据名称获取单个属性
Attribute attribute = element2.attribute("nick_name");
//返回当前标签所有属性对象
List<Attribute> attributes = element2.attributes();
for (Attribute att : attributes) {
String na = att.getName();
String va = att.getValue();
System.out.println("属性遍历:" + na + " : " + va );
}
//获取当前标签中的文本
String text = element2.getText();
System.out.println("标签中的文本内容: " + text);
//获取标签中所有的内容包含后代的内容
String stringValue = element2.getStringValue();
String nam = element2.getName();
System.out.println(nam + " : " + stringValue);
}
System.out.println("==================================================================");
}
}
//在代码中提取方法: alt+ shift + M
private Document readXML() throws DocumentException {
//将xml文件读取进来
InputStream in = DOM4JDemo.class.getClassLoader().getResourceAsStream("book.xml");
//DOM4j解析xml的核心对象
SAXReader sax = new SAXReader();
//将xml文件解析为一个Document对象
Document doc = sax.read(in);
return doc;
}
}
- XPath
- 步骤
- 1、导入DOM4J的jar和xpath的jar包
- 2、读取xml文件
- 3、创建xml的核心解析器来解析xml
- 4.通过Docuemnt对象来解析xml文件
- 获取标签节点:
- 实例1
- 实例2:
- 实例2:
- 实例1
- 获取属性节点:
- 实例:
- 获取标签节点:
- 步骤