ajax-axios sends a get request or sends a post request with request body parameters

/* axios v0.21.1 | (c) 2020 by Matt Zabriskie */
!function(e,t){"object"==typeof exports & amp; & amp;"object"==typeof module?module.exports=t():"function"==typeof define & amp; & amp; define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r]. call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0) }([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new i(e) ,n=s(i.prototype.request,t);return o.extend(n,i.prototype,t),o.extend(n,t),n}var o=n(2),s=n (3),i=n(4),a=n(22),u=n(10),c=r(u);c.Axios=i,c.create=function(e){return r( a(c.defaults,e))},c.Cancel=n(23),c.CancelToken=n(24),c.isCancel=n(9),c.all=function(e){return Promise. all(e)},c.spread=n(25),c.isAxiosError=n(26),e.exports=c,e.exports.default=c},function(e,t,n){"use strict";function r(e){return"[object Array]"===R.call(e)}function o(e){return"undefined"==typeof e}function s(e){return null! ==e & amp; & amp;!o(e) & amp; & amp;null!==e.constructor & amp; & amp;!o(e.constructor) & amp; & amp;"function"= =typeof e.constructor.isBuffer & amp; & amp;e.constructor.isBuffer(e)}function i(e){return"[object ArrayBuffer]"===R.call(e)}function a(e) {return"undefined"!=typeof FormData & amp; & amp;e instanceof FormData}function u(e){var t;return t="undefined"!=typeof ArrayBuffer & amp; & amp;ArrayBuffer.isView?ArrayBuffer. isView(e):e & amp; & amp;e.buffer & amp; & amp;e.buffer instanceof ArrayBuffer}function c(e){return"string"==typeof e}function f(e){return" number"==typeof e}function p(e){return null!==e & amp; & amp;"object"==typeof e}function d(e){if("[object Object]"!== R.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function l(e){return "[object Date]" ===R.call(e)}function h(e){return"[object File]"===R.call(e)}function m(e){return"[object Blob]"===R .call(e)}function y(e){return"[object Function]"===R.call(e)}function g(e){return p(e) & amp; & amp;y(e. pipe)}function v(e){return "undefined"!=typeof URLSearchParams & amp; & amp;e instanceof URLSearchParams}function x(e){return e.replace(/^\s*/,"").replace (/\s*$/,"")}function w(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product & amp; & amp;"NativeScript"!==navigator .product & amp; & amp;"NS"!==navigator.product) & amp; & amp;("undefined"!=typeof window & amp; & amp;"undefined"!=typeof document)}function b( e,t){if(null!==e & amp; & amp;"undefined"!=typeof e)if("object"!=typeof e & amp; & amp;(e=[e]),r (e))for(var n=0,o=e.length;n<o;n + + )t.call(null,e[n],n,e);else for(var s in e)Object .prototype.hasOwnProperty.call(e,s) & amp; & amp;t.call(null,e[s],s,e)}function E(){function e(e,n){d(t[ n]) & amp; & amp;d(e)?t[n]=E(t[n],e):d(e)?t[n]=E({},e):r(e )?t[n]=e.slice():t[n]=e}for(var t={},n=0,o=arguments.length;n<o;n + + )b(arguments[ n],e);return t}function j(e,t,n){return b(t,function(t,r){n & amp; & amp;"function"==typeof t?e[r] =S(t,n):e[r]=t}),e}function C(e){return 65279===e.charCodeAt(0) & amp; & amp;(e=e.slice(1 )),e}var S=n(3),R=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:i,isBuffer:s,isFormData:a,isArrayBufferView:u,isString:c, isNumber:f,isObject:p,isPlainObject:d,isUndefined:o,isDate:l,isFile:h,isBlob:m,isFunction:y,isStream:g,isURLSearchParams:v,isStandardBrowserEnv:w,forEach:b,merge: E,extend:j,trim:x,stripBOM:C}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r + + )n[r]=arguments[r];return e.apply(t,n)}}},function(e,t, n){"use strict";function r(e){this.defaults=e,this.interceptors={request:new i,response:new i}}var o=n(2),s=n(5) ,i=n(6),a=n(7),u=n(22);r.prototype.request=function(e){"string"==typeof e?(e=arguments[1]|| {},e.url=arguments[0]):e=e||{},e=u(this.defaults,e),e.method?e.method=e.method.toLowerCase():this. defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=[a,void 0],n=Promise.resolve(e);for(this.interceptors .request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected) });t.length;)n=n.then(t.shift(),t.shift());return n},r.prototype.getUri=function(e){return e=u(this.defaults ,e),s(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},o.forEach(["delete","get","head"," options"],function(e){r.prototype[e]=function(t,n){return this.request(u(n||{},{method:e,url:t,data:(n| |{}).data}))}}),o.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r ){return this.request(u(r||{},{method:e,url:t,data:n}))}}),e.exports=r},function(e,t,n){ "use strict";function r(e){return encodeURIComponent(e).replace(/:/gi,":").replace(/$/g,"$").replace(/,/gi,", ").replace(/ /g," + ").replace(/[/gi,"[").replace(/]/gi,"]")}var o=n(2);e.exports= function(e,t,n){if(!t)return e;var s;if(n)s=n(t);else if(o.isURLSearchParams(t))s=t.toString();else {var i=[];o.forEach(t,function(e,t){null!==e & amp; & amp;"undefined"!=typeof e & amp; & amp;(o.isArray(e )?t + ="[]":e=[e],o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e) & amp ; & amp;(e=JSON.stringify(e)),i.push(r(t) + "=" + r(e))}))}),s=i.join(" & amp;" )}if(s){var a=e.indexOf("#");a!==-1 & amp; & amp;(e=e.slice(0,a)),e + =(e. indexOf("?")===-1?"?":" & amp;") + s}return e}},function(e,t,n){"use strict";function r(){this .handlers=[]}var o=n(2);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length -1},r.prototype.eject=function(e){this.handlers[e] & &(this.handlers[e]=null)},r.prototype.forEach=function(e){ o.forEach(this.handlers,function(t){null!==t & amp; & amp;e(t)})},e.exports=r},function(e,t,n){"use strict";function r(e){e.cancelToken & amp; & amp;e.cancelToken.throwIfRequested()}var o=n(2),s=n(8),i=n(9),a= n(10);e.exports=function(e){r(e),e.headers=e.headers||{},e.data=s(e.data,e.headers,e.transformRequest), e.headers=o.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),o.forEach(["delete","get"," head","post","put","patch","common"],function(t){delete e.headers[t]});var t=e.adapter||a.adapter;return t( e).then(function(t){return r(e),t.data=s(t.data,t.headers,e.transformResponse),t},function(t){return i(t)|| (r(e),t & amp; & amp;t.response & amp; & amp;(t.response.data=s(t.response.data,t.response.headers,e.transformResponse))), Promise.reject(t)})}},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t,n){return r.forEach (n,function(n){e=n(e,t)}),e}},function(e,t){"use strict";e.exports=function(e){return!(!e| |!e.__CANCEL__)}},function(e,t,n){"use strict";function r(e,t){!s.isUndefined(e) & amp; & amp;s.isUndefined(e[ "Content-Type"]) & amp; & amp;(e["Content-Type"]=t)}function o(){var e;return "undefined"!=typeof XMLHttpRequest?e=n(12): "undefined"!=typeof process & amp; & amp;"[object process]"===Object.prototype.toString.call(process) & amp; & amp;(e=n(12)),e}var s=n(2),i=n(11),a={"Content-Type":"application/x-www-form-urlencoded"},u={adapter:o(),transformRequest:[function( e,t){return i(t,"Accept"),i(t,"Content-Type"),s.isFormData(e)||s.isArrayBuffer(e)||s.isBuffer(e)|| s.isStream(e)||s.isFile(e)||s.isBlob(e)?e:s.isArrayBufferView(e)?e.buffer:s.isURLSearchParams(e)?(r(t,"application /x-www-form-urlencoded;charset=utf-8"),e.toString()):s.isObject(e)?(r(t,"application/json;charset=utf-8"),JSON .stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}] ,timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200 & amp; & amp ;e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},s.forEach(["delete","get","head"] ,function(e){u.headers[e]={}}),s.forEach(["post","put","patch"],function(e){u.headers[e]=s. merge(a)}),e.exports=u},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach (e,function(n,r){r!==t & amp; & amp;r.toUpperCase()===t.toUpperCase() & amp; & amp;(e[t]=n,delete e [r])})}},function(e,t,n){"use strict";var r=n(2),o=n(13),s=n(16),i=n(5 ),a=n(17),u=n(20),c=n(21),f=n(14);e.exports=function(e){return new Promise(function(t,n){ var p=e.data,d=e.headers;r.isFormData(p) & amp; & amp;delete d["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var h =e.auth.username||"",m=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";d.Authorization="Basic " + btoa(h + ":" + m)}var y=a(e.baseURL,e.url);if(l.open(e.method.toUpperCase(),i(y,e.params,e.paramsSerializer),!0),l. timeout=e.timeout,l.onreadystatechange=function(){if(l & amp; & amp;4===l.readyState & amp; & amp;(0!==l.status||l.responseURL & amp; & amp;0===l.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in l?u(l.getAllResponseHeaders()):null,s=e.responseType & amp ; & amp;"text"!==e.responseType?l.response:l.responseText,i={data:s,status:l.status,statusText:l.statusText,headers:r,config:e,request :l};o(t,n,i),l=null}},l.onabort=function(){l & amp; & amp;(n(f("Request aborted",e,"ECONNABORTED", l)),l=null)},l.onerror=function(){n(f("Network Error",e,null,l)),l=null},l.ontimeout=function(){var t ="timeout of " + e.timeout + "ms exceeded";e.timeoutErrorMessage & amp; & amp;(t=e.timeoutErrorMessage),n(f(t,e,"ECONNABORTED",l)),l= null},r.isStandardBrowserEnv()){var g=(e.withCredentials||c(y)) & amp; & amp;e.xsrfCookieName?s.read(e.xsrfCookieName):void 0;g & amp; & amp;(d[e.xsrfHeaderName]=g)}if("setRequestHeader"in l & amp; & amp;r.forEach(d,function(e,t){"undefined"==typeof p & amp; & amp;"content-type"===t.toLowerCase()?delete d[t]:l.setRequestHeader(t,e)}),r.isUndefined(e.withCredentials)||(l.withCredentials=! !e.withCredentials),e.responseType)try{l.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress & amp; & amp;l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress & amp; & amp;l.upload & amp; & amp;l.upload.addEventListener("progress ",e.onUploadProgress),e.cancelToken & amp; & amp;e.cancelToken.promise.then(function(e){l & amp; & amp;(l.abort(),n(e),l= null)}),p||(p=null),l.send(p)})}},function(e,t,n){"use strict";var r=n(14);e.exports =function(e,t,n){var o=n.config.validateStatus;n.status & amp; & amp;o & amp; & amp;!o(n.status)?t(r("Request failed with status code " + n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var r=n(15 );e.exports=function(e,t,n,o,s){var i=new Error(e);return r(i,t,n,o,s)}},function(e,t) {"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n & amp; & amp;(e.code=n),e.request=r ,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName: this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){" use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,s,i){var a=[] ;a.push(e + "=" + encodeURIComponent(t)),r.isNumber(n) & amp; & amp;a.push("expires=" + new Date(n).toGMTString()),r .isString(o) & amp; & amp;a.push("path=" + o),r.isString(s) & amp; & amp;a.push("domain=" + s),i== =!0 & amp; & amp;a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp ("(^|;\s*)(" + e + ")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e) {this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove: function(){}}}()},function(e,t,n){"use strict";var r=n(18),o=n(19);e.exports=function(e,t) {return e & amp; & amp;!r(t)?o(e,t):t}},function(e,t){"use strict";e.exports=function(e){return/^ ([a-z][a-z\d\ + \-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function (e,t){return t?e.replace(/\/ + $/,"") + "/" + t.replace(/^\/ + /,""):e}},function(e ,t,n){"use strict";var r=n(2),o=["age","authorization","content-length","content-type","etag","expires", "from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer", "retry-after","user-agent"];e.exports=function(e){var t,n,s,i={};return e?(r.forEach(e.split("\
" ),function(e){if(s=e.indexOf(":"),t=r.trim(e.substr(0,s)).toLowerCase(),n=r.trim(e.substr( s + 1)),t){if(i[t] & amp; & amp;o.indexOf(t)>=0)return;"set-cookie"===t?i[t]=(i [t]?i[t]:[]).concat([n]):i[t]=i[t]?i[t] + ", " + n:n}}),i):i }},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e; return n & amp; & amp;(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol ?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"", hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt( 0)?o.pathname:"/" + o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t =e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol & amp; & amp;o. host===t.host}}():function(){return function(){return!0}}()},function(e,t,n){"use strict";var r=n(2 );e.exports=function(e,t){function n(e,t){return r.isPlainObject(e) & amp; & amp;r.isPlainObject(t)?r.merge(e,t): r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function o(o){r.isUndefined(t[o])?r. isUndefined(e[o])||(s[o]=n(void 0,e[o])):s[o]=n(e[o],t[o])}t=t|| {};var s={},i=["url","method","data"],a=["headers","auth","proxy","params"],u=["baseURL ","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress", "decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],c=["validateStatus"];r .forEach(i,function(e){r.isUndefined(t[e])||(s[e]=n(void 0,t[e]))}),r.forEach(a,o), r.forEach(u,function(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(s[o]=n(void 0,e[o])): s[o]=n(void 0,t[o])}),r.forEach(c,function(r){r in t?s[r]=n(e[r],t[r]) :r in e & amp; & amp;(s[r]=n(void 0,e[r]))});var f=i.concat(a).concat(u).concat(c), p=Object.keys(e).concat(Object.keys(t)).filter(function(e){return f.indexOf(e)===-1});return r.forEach(p,o) ,s}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return "Cancel" + (this.message?" : " + this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if( "function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e( function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if (this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}}, e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e ,t){"use strict";e.exports=function(e){return"object"==typeof e & amp; & amp;e.isAxiosError===!0}}])});
//# sourceMappingURL=axios.min.map

1. Send a get request

package com.csdn.servlet;
import jakarta.servlet.GenericServlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;
//Demo Ajax
@WebServlet("/h09")
public class AjaxServlet extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        String uname = servletRequest.getParameter("uname");
        uname = uname.toUpperCase();
        PrintWriter out = servletResponse.getWriter();
        out.println(uname);
        out.flush();
    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax02</title>
    <script src="script/axios.min.js"></script>
    <script>
        //let xmlHttpRequest;
        function sendAjax01() {

            let uname = document.getElementById("uname").value;
            axios({
                method: "Get",
                url: "h09",
                params: { //params: request parameters
                    uname: uname
                }
            }).then(function (response) {
                let msg = response.data;
                document.getElementById("uname2").innerText = msg;
            });
/*
            xmlHttpRequest = new XMLHttpRequest();
            xmlHttpRequest.open("Get","h09?uname=" + uname,true);//Get: Request method h09: Request destination true: Asynchronous request
            //onreadystatechange: Call sendAjax01CB when the state changes
            //The status values are 0-4, 5 in total, we are interested in 4
            //0 means xmlHttpRequest has not been created
            //1 means start sending the request
            //2 indicates that the sending request is completed
            //3 indicates starting to receive responses
            //4 indicates that the response was received successfully and the client successfully parsed the response returned by the server.
            xmlHttpRequest.onreadystatechange = sendAjax01CB; //CB:call back callback function
            //send request
            xmlHttpRequest.send();
        }
        function sendAjax01CB() {
            if (xmlHttpRequest.readyState == 4 & amp; & amp; xmlHttpRequest.status == 200) {
                //Get response text
                let msg = xmlHttpRequest.responseText;
                document.getElementById("uname2").innerText = msg;
            }
*/
        }
    </script>
</head>
<body>
        uname:<input type="text" id="uname"/>
        <input type="button" value="Asynchronous request occurred" onclick="sendAjax01()"><br/>
        The content returned by the server: <span id="uname2"> & amp;nbsp</span>
</body>
</html>

2. Send post request

package com.csdn.servlet;
import com.google.gson.Gson;
import jakarta.servlet.GenericServlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
//Demo Ajax
@WebServlet("/h10")
public class PostAxiosAjaxServlet extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

        BufferedReader br = servletRequest.getReader();
        StringBuilder stringBuilder = new StringBuilder();
        String str = null;
        if ((str= br.readLine())!=null) {
            stringBuilder.append(str);
        }
        str = stringBuilder.toString();
        System.out.println(str);

        Gson gson = new Gson();
        //Known json string, get Java object
        Person person = gson.fromJson(str, Person.class);

/*
        String uname = servletRequest.getParameter("uname");
        uname = uname.toUpperCase();
        String address = servletRequest.getParameter("address");
        address = address.toUpperCase();
*/

        PrintWriter out = servletResponse.getWriter();
        out.println(person);
        out.flush();
    }
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Person{
    private String uname;
    private String address;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax03</title>
    <script src="script/axios.min.js"></script>
    <script>
        //let xmlHttpRequest;
        function sendAjax01() {

            let uname = document.getElementById("uname").value;
            let address = document.getElementById("address").value;
            axios({
                method: "POST",
                url: "h10",
                data: { //data: request body parameters. The request body parameters sent must be post requests.
                    uname: uname,
                    address:address
                }
            }).then(function (response) {
                let msg = response.data;
                document.getElementById("uname2").innerText = msg;
            });
/*
            xmlHttpRequest = new XMLHttpRequest();
            xmlHttpRequest.open("Get","h09?uname=" + uname,true);//Get: Request method h09: Request destination true: Asynchronous request
            //onreadystatechange: Call sendAjax01CB when the state changes
            //The status values are 0-4, 5 in total, we are interested in 4
            //0 means xmlHttpRequest has not been created
            //1 means start sending the request
            //2 indicates that the sending request is completed
            //3 indicates starting to receive responses
            //4 indicates that the response was received successfully and the client successfully parsed the response returned by the server.
            xmlHttpRequest.onreadystatechange = sendAjax01CB; //CB:call back callback function
            //send request
            xmlHttpRequest.send();
        }
        function sendAjax01CB() {
            if (xmlHttpRequest.readyState == 4 & amp; & amp; xmlHttpRequest.status == 200) {
                //Get response text
                let msg = xmlHttpRequest.responseText;
                document.getElementById("uname2").innerText = msg;
            }
*/
        }
    </script>
</head>
<body>
        uname:<input type="text" id="uname"/><br/>
        address:<input type="text" id="address"><br/>
        <input type="button" value="Asynchronous request occurred" onclick="sendAjax01()"><br/>
        The content returned by the server: <span id="uname2"> & amp;nbsp</span>
</body>
</html>