zoukankan      html  css  js  c++  java
  • 自学JavaWeb_ Servlet高级&XML

    Servlet高级&XML

    一、ServletConfig

    在运行 Servlet 程序时,可能需要一些辅助信息.例如文件使用的编码、使用 Servlet 程序的共享信息等这些信息可以在 web.xml 文件中使用一个或多个 <init-param> 元素进行配置。当 Tomcat 初始化一个 Servlet 时,会将该 Servlet 的配置信息封装到 ServletConfig 对象中,此时可以通过调用 initServletConfig config)方法将 ServletConfig 对象传递给 Servlet

     

    案例:

    1. web.xml文件中配置初始化参数信息

     

    1. servlet中获取初始化参数信息

    如何获取?

    获取参数的两个方法:

    l config.getInitParameter(name)根据名称获取值

    l config.getInitParameterNames();获取所有的初始化参数名称, 根据名称获取值

     

    结论: 配置的初始化参数信息 对应 servlet是 一对一的关系

    可以在其他方法中获取servletconfig对象: getServletConfig();  或者  this.getServletConfig();

    二、ServletContext

    Tomcat 启动时,Tomcat 会为每个 Web 应用创建一个唯一的 ServletContext 对象代表当前的 Web 应用,该对象封装了当前 Web 应用的所有信息。可以利用该对象获取整个Web 应用程序的初始化信息、读取资源文件等它与Servlet是一对多的关系,其内部封装的信息可以被同一web应用内的所有Servlet共享

    案例:获取web应用程序的初始化信息

     

    获取全局初始化参数信息

    获取参数的两个方法:

    l config.getInitParameter(name)根据名称获取值

    l config.getInitParameterNames();获取所有的初始化参数名称, 根据名称获取值

     

    结论: 配置全局的初始化参数信息 对应 servlet是 一对多的关系

    可以在其他方法中获取servletContext对象: req.getServletContext();

    总结:

    tomcat启动的时候, 不止创建了request对象和response对象,还创建了servletConfigservletContext对象

    ServletConfig: 在服务器启动之后进行实例化, 封装了初始化参数信息, 对应servlet是一对一的关系;

    servletContext: 在服务器启动之后进行实例化, 封装了全局初始化参数信息, 对应servlet是一对多的关系;还是一个作用域对象, 作用域范围是针对整个web应用(web项目);

    三、作用域对象

    什么是作用域对象?

    有作用域的对象就称之为作用域对象, 限定了数据的访问范围

    Servlet中提供了两个作用域对象:

    Request域对象: 作用域范围是在一次请求和一次响应中有效(周期短), 一次响应结束, request对象消失

    servletContext域对象: 作用域范围应用于整个web项目(最大的作用域对象), 数据时可以进行共享;

    作用域对象有三个方法:

    setAttribute(String name, String value)向域对象中存储数据

    getAttribute(String name)从域对象中取出数据

    removeAttribute(String name)从域对象中移除数据

    案例:

    1. Request作用对象

     

    1. servletContext域对象

     

    四、转发与重定向

    (一)转发与重定向原理

    资源跳转方式:

    1. 请求转发
    2. 重定向

    页面跳转方式:

    请求转发:

    request.getRequestDispatcher("跳转到地址").forward(request, response);

    重定向:

    response.sendRedirect("跳转的地址");

     

    请求转发的原理:

    请求转发是在服务器端完成的, 是对客户端的同一个请求之间进行传递, 里面的数据时可以进行共享的;

     

    重定向原理:

    重定向在客户端完成, 重定向时, 服务端会返回一个302(重定向)的状态码, 里边还包含了location的跳转地址; 由浏览器端获取后, 自动发送下一个请求;

     

    (二)转发与重定向区别(高频面试题)

    区别:

    1. 发生位置不同, 转发是在服务器内容完成, 而重定向在客户端完成
    2. 转发的地址不会发生改变, 而重定向地址栏会发生改变
    3. 转发是一次请求一次响应, 而重定向至少两次请求两次响应
    4. 页面跳转方式不同

    请求转发:request.getRequestDispatcher("跳转到地址").forward(request, response);

    重定向:response.sendRedirect("跳转的地址");

    1. 转发的速度要比重定向的速度快
    2. 转发对request作用域对象是可以共享的, 而重定向不能共享
    3. 转发的路径只能是服务器内部地址, 而重定向可以是任意地址

    五、Servlet3.0注解模式

    Java 注解(Annotation)又称 Java 标注,是 JDK1.5 引入的新特性。其主要作用是简化复杂的编码工作。Java 语言中的类、方法、变量、参数和包等都可以被标注,被标注的元素就具有了一些特定的功能。

     

    注意:

    配置了3.0注解形式, 不能再配置web.xml文件

    六、XML

    (一)XML简介

     

    主要作用:

    存储数据和传输数据   作为配置文件

    Xmlhtml有什么区别:

    1. XML是可扩展标记语言, 其标签可自定义, html是超文本标记语言, 其标签不能自定义, 都是预定义好的;
    2. 两种语言的设计目的不同, XML是用来存储和传输数据的,更关注的是内容, html是用来制作网页的, 更关注外观;

    (二)XML书写规范

     

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

    <school location="五方桥" area="1000">

    <myClass id="810班级">

    <student>

    <sid>1001</sid>

    <sname>果哥</sname>

    <sage>18</sage>

    <addr>岛国1</addr>

    </student>

    <student>

    <sid>1002</sid>

    <sname>苍老湿</sname>

    <sage>20</sage>

    <addr>岛国2</addr>

    </student>

    </myClass>

    <myClass id="831班级">

    <student>

    <sid>1001</sid>

    <sname>宝强</sname>

    <sage>20</sage>

    <addr>邢台</addr>

    </student>

    <student>

    <sid>1002</sid>

    <sname>孙红雷</sname>

    <sage>22</sage>

    <addr>哈尔滨</addr>

    </student>

    </myClass>

    </school>

     

    XML文件的声明:

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

    1. <?开头, ?>结尾, 必须放置在第一行不能出现空格;
    2. version="1.0" 代表当前xml文件的版本
    3. encoding="UTF-8" 代表的是文件的编码

    XML文件的编写规范:

    1. 标签有且只能有一对
    2. 标签严格按照大小写区分
    3. 标签必须成对出现
    4. 标签名不能以数字开头, 并且不能有空格, 但是可以以下划线开头;
    5. 标签要正确嵌套

    (三)XML解析

    Java自带的解析方式有两种:

    Dom解析和sax解析

    Dom解析: 将整个文档加载到内存中, 再一行一行解析

    特点: 优点对文档的CRUD操作比较方便, 缺点:占用内存,内存溢出

    SAX解析: 为了解决内存溢出的问题, 没加载一行解析一行

    特点: 占用内存少, 解析速度快, 缺点: 适合文档的读取, 对文档的CRUD操作就不适合;

    基于以上两种解析的不完美, 第三方公司整合两者优点, 于是有了叫jDOM的技术(解析方式);jDOM解析使用具体方式不是使用的接口, 简化API, 但是灵活性也有一些限制; 又有一些大佬进行再次优化,于是有了DOM4J这个技术;目前DOM4j是框架中最常用的解析方式;

    1、dom4j解析

    使用步骤:

    步骤一:下载并导入jar

     

    步骤二:解析过程

    (1)创建SAXReader解析器

    (2)读取XML文件获取文档对象

    (3)获取XML文件的根节点

    (4)获取子节集合并循环读取

     

    DOM4J必须使用核心类SaxReader加载xml文档获得Document,通过Document对象获得文档的根元素,然后就可以操作了。

    常用API如下:

    SaxReader对象

    read(…) 加载执行xml文档

    Document对象

    getRootElement() 获得根元素

    Element对象

    elements(…) 获得指定名称的所有子元素。

    element(…) 获得指定名称第一个子元素。

    getName() 获得当前元素的元素名

    attributeValue(…) 获得指定属性名的属性值

    elementText(…) 获得指定名称子元素的文本值

    getText() 获得当前元素的文本内容

     

    2、Xpath解析

    Xpath是基于dom4j的一个开源免费的工具,它是XML的路径语言,使用路径表达式来操作XML文档,更加便捷灵活

    使用时需要导入支持路径的jar包以及dom4jjar包,是对dom4j的进一步完善,使得定位更加方便。

    dom4j为xpath提供了两个方法来获取指定路径下的节点对象:     

    selectNodesxpath语法):复数,适用于多个标签的操作

          selectSingleNodexpath语法):单标签操作

     

    使用的基本步骤:

    1、下载并导包

     

     

    2、解析过程

    步骤一:创建解析xml的核心解析器对象:SAXReader  reader  = new SAXReader();

     

    步骤二:将我们要操作的xml文件加载到内存 返回document对象

    Document document = reader.read(“xml文件路径”);

     

    步骤三:document 操作selectNodes或者selectSingleNode这两个方法。

     

    案例1/的用法,表示从根目录进行一层一层选择

     //的用法, 表示多级目录

     

     

    案例2*表示任何元素节点,案例中查找student节点下的所有子节点

     

     

    案例3[]中可以指定谓词表达式进一步选取元素

    [count]表示第几个元素,而不是下标

    [last()]表示最后一个元素

    [position()<3]表示顺序号小于3的元素

     

    七、完善项目功能-添加

    创建学生表

    CREATE TABLE student(

    sid INT PRIMARY KEY AUTO_INCREMENT,-- 学号

    sname VARCHAR(40) NOT NULL,-- 姓名

    sgender CHAR(2) NOT NULL,-- 性别

    shobby VARCHAR(50),-- 爱好

    sdegree VARCHAR(40),-- 学历

    smark VARCHAR(100) -- 个人简介

    );

    SELECT * FROM student;

    INSERT INTO student(sname,sgender,shobby,sdegree,smark)

    VALUES('张三','','唱歌','本科','我喜欢雪');

    页面insert.html准备:

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>Insert title here</title>

    </head>

    <body>

    <form action="" method="post">

    <h2>添加新学员</h2>

    <p>姓名:<input name="sname" type="text"/></p>

    <p>性别:

    <input name="sgender" type="radio" value="" checked="checked"/>

    <input name="sgender" type="radio" value=""/>

    </p>

    <p>爱好:

    <input name="shobby" type="checkbox" value="唱歌"/>唱歌

    <input name="shobby" type="checkbox" value="爬山"/>爬山

    <input name="shobby" type="checkbox" value="游泳"/>游泳

    <input name="shobby" type="checkbox" value="篮球"/>篮球

    </p>

    <p>学历:

    <select name="sdegree">

    <option value="博士">博士</option>

    <option value="硕士">硕士</option>

    <option value="本科">本科</option>

    <option value="专科">专科</option>

    </select>

    </p>

    <p>

    个人介绍:<br/>

    <textarea name="smark" rows="4" cols="40"></textarea>

    </p>

    <p><input name="sub" type="submit" value="添加"/>

    <input name="ret" type="reset" value="重置"/></p>

    </form>

    </body>

    </html>

  • 相关阅读:
    C# WinForm开发系列 文章索引
    C#程序集版本控制文件属性祥解(转)
    大型网站调试工具之一(php性能优化分析工具XDebug)
    Web Control 开发系列(二) 深入解析Page的PostBack过程和IPostBackDataHandler
    ASP.NET服务器控件开发(3)事件和回传数据的处理
    理解Session State模式+ASP.NET SESSION丢失FAQ [翻译]
    什么是publickeytoken及publickeytoken的作用
    C#取得页面URL信息
    ASP.NET服务器控件开发(2)继承WebControl类
    [网络收集]ASP.NET 网站路径
  • 原文地址:https://www.cnblogs.com/masterhxh/p/13706758.html
Copyright © 2011-2022 走看看