• JavaWeb核心之Servlet


    概念

    XML:可扩展标记语言

    HTML:超文本标记语言

    两者的区别:

    1、语法结构类似,单语法要求不同

    • HTML不区分大小写,XML严格区分大小写
    • 在HTML中,有时不严格,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束标记。在XML中,是严格的树状结构,绝对不能省略掉结束标记。
    • 在XML文档中,空白部分不会被解析器自动删除;但是html是过滤掉空格的。

    2、标记不同:

    • HTML的标记都是预编译的;而XML标签是免费的、自定义的、可扩展的。

    3、作用区别:

    •  XML 不是HTML的替代品,xml和html是两种不同用途的语言。 XML 不是要替换 HTML;实际上XML 可以视作对 HTML 的补充。
    • HTML是用来显示数据的;XML 是用来描述数据、存放数据的,所以可以作为持久化的介质

    注意:

    1.文档声明必须为<?xml开头,以?>结束;

    2.文档声明必须从文档的0行0列位置开始

    3. CDATA

    • CDATA段中出现的“<”、“>’,、“””、“‘”、“&”,都无需使用转义字符。这可以提高xml文档的可读性。
    • CDATA段中不能包含“]]>”,即CDATA段的结束定界符。
    <![CDATA[
    任意内容
    ]]>

    约束

    为了限定XML内容,我们需要使用xml约束(DTDschema),

    规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

    DTD约束

    约束实现方法:

    步骤1:创建web.xml文档,并将“web-app_ 2_ 3.dtd"拷贝相同目录下。

    步骤2:DTD文档开始处,拷贝需要的“文档声明”

     

    将文档声明复制到xml文件下

    步骤3:完成xml内容编写

    文档声明

    1、内部DTD,在XML文档内部嵌入DTD,只对当前XML有效。

    2、外部DTD——本地DTDDTD文档在本地系统上,公司内部自己项目使用。

     

    3、外部DTD——公共DTDDTD文档在网络上,一般都有框架提供。

     

    Schema约束

     Schema是新的XML文档约束;要比DTD强大很多,是DTD替代者;功能更强大,数据类型更完善

    实现方法:

    步骤1:创建web.xml,并将"web-app_2_5.xsd"拷贝到同级目录

    步骤2:xsd文档中拷贝需要的“命名空间”

     

    步骤3:完成xml内容编写

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://www.example.org/web-app_2_5" 
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
                version="2.5">
        <servlet>
            <servlet-name></servlet-name>
            <servlet-class></servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name></servlet-name>
            <url-pattern></url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file></welcome-file>
            <welcome-file></welcome-file>
        </welcome-file-list>
    </web-app>

    解析(常用dom4j

    xml是用来储存信息的,需要通过解析,来获得存储的信息

    开发中比较常见的解析方式有三种,如下

    1、DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。 

      a) 优点:元素与元素之间保留结构关系,故可以进行增删改查操作。

      b) 缺点:XML文档过大,可能出现内存溢出显现。 

    2、SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件 驱动的方式进行具体解析,每执行一行,都将触发对应的事件。(了解) 

      a) 优点:处理速度快,可以处理大文件

      b) 缺点:只能读,逐行后将释放资源。

    3. PULL:  Android内置的XML解析方式,类似SAX(了解) 

    如果需要使用dom4j,必须导入jar包。 

    Servlet概念

    Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。

    Servlet接口中的方法

    1)init(ServletConfig config)

    何时执行:servlet对象创建的时候执行一次

    ServletConfig : 代表的是该servlet对象的配置信息

    2)serviceServletRequest request,ServletResponse response

    何时执行:每次请求都会执行一次

    ServletRequest :代表请求 认为ServletRequest 内部封装的是 http请求的信息 

    ServletResponse :代表响应 认为要封装的是响应的信息

    3)destroy()

    何时执行:servlet销毁的时候执行一次

     但在实际开发中,我们不会直接去实现Servlet接口,因为那样需要覆盖的方法太多, 我们一般创建类继承HttpServlet

    HttpServlet类的方法

    1)init()

    主要用来初始化变量的

    2)doGet(HttpServletRequest request,HttpServletResponse response)

    请求方式为get方法时,调用此方法,每次请求,调用一次

    3)doPost(HttpServletRequest request,HttpServletResponse response)

    请求方式为post方法时,调用此方法,每次请求,调用一次

    4)destroy()

    问题:对XXXServlet进行了10次访问后销毁,则init()destory()service()doGet()doPost() 一共执行力多少次?request对象创建几个?response创建几个?

    init()执行一次,destory()执行一次,service(),doGet(),doPost()各执行10次,request对象和response对象各创建10次!

    Servlet在XML的配置

     如图,当要访问QuickStratServlet时,urld地址需访问<url-pattern>定义的quickStratServlet,再寻找到<servlet-mapping>中的<servlet-name>

    再寻找<servlet>中的<servlet-name>,两个<servlet-name>必须一致,再找到<servlet-class>,找到QuickStratServlet地址

    其中url-pattern的配置方式:

    1)完全匹配 访问的资源与配置的资源完全相同才能访问到

    2)目录匹配 格式:/虚拟的目录../* *代表任意

    3)扩展名匹配 格式:*.扩展名

    注意:第二种与第三种不要混用 /aaa/bbb/*.abcd(错误的) 

    可以将url-pattern配置一个/,代表该servlet是缺省的servlet

    当你访问资源地址所有的servlet都不匹配时 , 缺省的servlet负责处理,

    跳转<welcom-file-list>设置的欢迎页面,可设置多个,当第一个找不到时,向下寻找。 

    ServletContext对象

    ServletContext是一个域对象,一个web应用只有一个ServletContext对象,web应用启动时创建,web应用卸载时销毁

    ServletContext域对象的作用范围:整个web应用(所有的web资源都可以随意向 servletcontext域中存取数据,数据可以共享)

     获得ServletContext对象

    1)ServletContext servletContext = config.getServletContext();
    2)ServletContext servletContext = this.getServletContext();

    当继承HttpServlet时,可直接获取

    ServletContext servletcontext =getServletContext();

     ServletContext对象的作用:

     1、web.xml中配置初始化参数(了解)

    通过context对象获得参数

     

    2、获得web应用中任何资源的绝对路径

    //写一个相对地址,得到一个绝对的path
    String path = context.getRealPath(相对于该web应用的相对地址);

    3、域对象的通用的方法:

    //添加object,自定义name,如果name重复,覆盖之前的值
    setAtrribute(String name,Object obj);
    getAttribute(String name);//根据name,获取object
    removeAttribute(String name);//根据name,删除object

    练习代码:Servlet02 获取 Servlet01 中的内容

    public class Servlet01 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取ServletContext对象
            ServletContext servletcontext =getServletContext();
                    //给context对象,添加属性
            servletcontext.setAttribute("name", "张三");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
    public class Servlet02 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取ServletContext对象
            ServletContext servletcontext =getServletContext();
            //从域中取值
            String name=(String)servletcontext.getAttribute("name");
            System.out.println(name);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
  • 相关阅读:
    【Spring】每个程序员都使用Spring(四)——Aop+自定义注解做日志拦截
    倪光南:保护科技人员知识产权是提升企业创新的关键(柳传志,杨元庆没有投入资金和技术,却占了大量股份,在全世界都非常少见)
    凡是能导到线上的都已经尝试过了,现在转化用户成本非常高,到了强者恒强的时代
    MIPS 指令集将在近期开源,RISC-V 阵营慌吗?
    QmlWinExtras
    用css解决Unigui在IE系列浏览器中字体变小的问题(设置UniServeModule的customcss属性)
    uni-app
    .net core consul grpc--系统服务RPC实现通信(一)
    系统间通信——RPC架构设计
    程序是由数据结构属于静态的部分和算法的调用为动态部分构成
  • 原文地址:https://www.cnblogs.com/dk2557/p/9598235.html
Copyright © 2020-2023  润新知