Servlet高级讲解及使用

Servlet高级

一、ServletConfig

获取servlet的初始化配置信息,如字符编码,servlet名字等等。

获取的方法:String value = getInitParameter(“参数的名字”);

Enumeration names = getInitParameterNames(“参数的名字”);

注意: 对对servletConfig获取的初始化参数,只是单个servlet的初始化参数。

对于初始化参数的配置方法:

  • 配置位置: web.xml对应的servlet标签下:
    Servlet高级讲解及使用_第1张图片

  • servlet获取初始化参数的方法实例:
    Servlet高级讲解及使用_第2张图片

二、ServletContext

获取的是整个servlet公用的初始化配置信息,且在整个项目中ServletContext对象只有一个,称为服务器对象。

参数的配置
Servlet高级讲解及使用_第3张图片
获取初始化参数的方法:
Servlet高级讲解及使用_第4张图片

三、作用域对象

作用域对象是指有作用域域范围的对象我们就称之为作用域对象。作用域对象主要用于携带数据,作用域对象携带的数据可以在一定范围内被使用(有效)。
servlet中常用的两个作用域对象是HttpServletRquest和servletContext
作用域对象常用方法:

  • 将数据存放到作用域: 作用域对象.setAttribute(String name,Object value);
  • 取出数据: Object ob = 作用域对象.getAttribute(String name);
  • 移除作用域中的数据: 作用域对象。removeAttribute(String name);
    HttpServletRequest作用域的作用范围:在一次请求行内有效,即可以获取作用域中存放的数据。
  • 实例:
    Servlet高级讲解及使用_第5张图片
    • 实例2:
      Servlet高级讲解及使用_第6张图片
      ServletContext作用域对象作用域范围:服务器的整个生命周期内有效(范围很大)
  • 实例:
    Servlet高级讲解及使用_第7张图片
    • 实例:
      Servlet高级讲解及使用_第8张图片

四、转发与重定向

请求转发和重定向是servlet中实现页面跳转的两种主要的方式。
请求转发和重定向的方法:

  • 请求转发:request.getRequestDispatcher(“请求转发跳转的地址”).forward(req, resp);
  • 重定向: response.sendRedirect(“重定向的值”);

(一)转发与重定向原理

  • 请求转发的原理:
    Servlet高级讲解及使用_第9张图片
  • 重定向的实现原理:
    Servlet高级讲解及使用_第10张图片

(二)转发与重定向区别

  • 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高级讲解及使用_第11张图片
    注意: 对于一个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文件的方法:
    • 第一步:
      Servlet高级讲解及使用_第12张图片
    • 第二步: 也可以直接点击finish
      Servlet高级讲解及使用_第13张图片
    • 创建好的xml文件
      Servlet高级讲解及使用_第14张图片
      • 创建好的文件:
        Servlet高级讲解及使用_第15张图片
    • DOM4J解析XMl:
      • 步骤1:导入DOM4j的jar文件
      • 步骤2:创建方法,读取xml文件
        在这里插入图片描述
      • 步骤3: 创建xml核心解析器SAXReader对象
        Servlet高级讲解及使用_第16张图片
      • 步骤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
            Servlet高级讲解及使用_第17张图片
            • 实例2:
              Servlet高级讲解及使用_第18张图片
        • 获取属性节点:
        • 实例:
          Servlet高级讲解及使用_第19张图片

你可能感兴趣的:(servlet,java,xml)