AJAX(Asynchronous JavaScript And XML 异步的JavaScript和XML)


上期说要新添一个需要:新增一个批改明码的接口,前端再减少一个批改明码的页面,申请和返回都应用JSON,要求复用数据库连贯,合并读取html文件。

1、新增一个批改明码的接口

UserMapper接口局部:

package com.example.mapper;import com.example.pojo.User;import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper {    User selectAll(@Param("userName")String username, @Param("passWord")String password);    int update(User user);}

增加UserMapper的xml文件:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.mapper.UserMapper">    <select id="selectAll" resultType="User">        select userName as username ,passWord as password from user where username = #{userName} and password=#{passWord};    </select>    <update id="update">        update user set password = #{passWord} where username = #{userName};    </update></mapper>

2、在前端新增一个批改明码的页面

创立一个ajax-demo2.html

<!DOCTYPE html><html><h1>批改明码</h1>    <head>    </head>    <body>        <form id="form2" action="http://localhost:8080/addUser3"  method="post" accept-charset="UTF-8" onsubmit="return false">            <p>批改明码</p>            <input type="text" name="userName" placeholder="用户名">            <input type="text" name="passWord"  placeholder="明码"/>            <input type="submit"  value="提交" onclick="asd()"/>        </form>    </body></html>

要实现从ajax-demo.html页面跳转到ajax-demo2.html上的性能,就得在ajax-demo.html上减少一个批改明码按钮并实现跳转。
ajax-demo.html:

<!DOCTYPE html><html><head></head><body><form id="form1" action="##"  method="post" accept-charset="UTF-8" onsubmit="return false">    <p>校验</p>    <input type="text" name="userName" id="txtUserName" placeholder="用户名"/>    <input type="text" name="passWord" id="txtPassWord" placeholder="明码"/>    <input type="submit"  value="提交" onclick="fun()"/></form><button onclick="tz()">批改明码</button><script>    function tz(){        //将这个点击事件的URL指向/hello2        window.location.href="http://localhost:8080/hello2";    }    function fun(){        const back = new XMLHttpRequest();        let name = {"userName":form1.userName.value,"passWord":form1.passWord.value}        let userName = JSON.stringify(name);        back.onload = function(){            //判断true 、false            if(this.responseText == "true"){                //明码账号正确                alert("明码账号正确");            }else{                //明码账号谬误                 alert("明码账号谬误");            }        }        alert(userName);        back.open("POST","http://localhost:8080/addUser2");        back.setRequestHeader("Content-type","application/json;charset=UTF-8");//能够发送json格局字符串        back.send(userName);    }</script></body></html>

在DemoApplication局部,让hello2读取ajax-demo2.html文件。

package com.example;@SpringBootApplication@RestControllerpublic class DemoApplication {    String flag = null;    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }    /*    * 实现账号密码校验的性能    * */    @RequestMapping("/addUser2")    public People addUser2( HttpServletRequest request, HttpServletResponse response) throws IOException {        ServletInputStream is = request.getInputStream();        BufferedReader br = new BufferedReader(new InputStreamReader(is));        String line=null;        String result="";        while((line=br.readLine())!=null){            System.out.println(line);             result  =result + "\n" +line;        }        System.out.println(result);        //提取JSON中的值        ObjectMapper mapper = new ObjectMapper();        People people = mapper.readValue(result,People.class);        //登入        String userName = people.userName;        String passWord = people.passWord;        //查询数据库        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        //2.获取SqlSession对象        SqlSession sqlSession = sqlSessionFactory.openSession();        //3.获取Mapper接口的代理对象        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //4.执行办法        User users =userMapper.selectAll(userName, passWord);        System.out.println(users);        //开释资源        sqlSession.close();        System.out.println(result);        //数据库数据与userName、passWord做比拟        boolean flag = false;        if (users != null) {            flag = true;        } else {            flag = false;        }        //返回一个Boolean        response.getWriter().write("" + flag);        return null;    }    /*    * 读取ajax-demo2.html    * */    @GetMapping("/hello1")    public String hello1() {        String str ;        String htmlStr="";        try {            BufferedReader in = new BufferedReader(new FileReader("src/webapp/ajax-demo.html"));            while ((str = in.readLine()) != null) {                System.out.println(str);                htmlStr  =htmlStr + "\n" +str;            }            System.out.print(htmlStr);        } catch (IOException e) {            System.out.print("谬误");        }        return htmlStr;    }    @GetMapping("/hello2")    public String hello2() {        String str ;        String htmlStr="";        try {            BufferedReader in = new BufferedReader(new FileReader("src/webapp/ajax-demo2.html"));            while ((str = in.readLine()) != null) {                System.out.println(str);                htmlStr  =htmlStr + "\n" +str;            }            System.out.print(htmlStr);        } catch (IOException e) {            System.out.print("谬误");        }        return htmlStr;    }}

测试一下:

3、申请和返回都应用JSON

ajax-demo2.html通过单击事件执行asd(),将浏览器的数据提交到服务端(/addUser3)。并增加返回性能返回到校验界面。
ajax-demo2.html局部

<!DOCTYPE html><html><h1>批改明码</h1>    <head>    </head>    <body>        <form id="form2" action="http://localhost:8080/addUser3"  method="post" accept-charset="UTF-8" onsubmit="return false">            <p>批改明码</p>            <input type="text" name="userName" placeholder="用户名">            <input type="text" name="passWord"  placeholder="明码"/>            <input type="submit"  value="提交" onclick="asd()"/>        </form>        <button onclick="tz()" >返回</button>        <script>        function tz(){            window.location.href="http://localhost:8080/hello1";        }        function asd(){            const back = new XMLHttpRequest();            let name = {"userName":form2.userName.value,"passWord":form2.passWord.value};            let userName = JSON.stringify(name);            back.onload = function(){                //判断true 、false                if(this.responseText == "true"){                    //明码重置胜利                    alert("明码重置胜利");                }else{                    //没有相干的账号                     alert("没有相干的账号");                }            }            alert(userName);            back.open("POST","http://localhost:8080/addUser3");            back.setRequestHeader("Content-type","application/json;charset=UTF-8");//能够发送json格局字符串            back.send(userName);        }        </script>    </body></html>

DemoApplication局部:
增加addUser3 实现批改明码的性能

package com.example;@SpringBootApplication@RestControllerpublic class DemoApplication {    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }    /*    * 实现账号密码校验的性能    * */    @RequestMapping("/addUser2")    public People addUser2( HttpServletRequest request, HttpServletResponse response) throws IOException {        ServletInputStream is = request.getInputStream();        BufferedReader br = new BufferedReader(new InputStreamReader(is));        String line=null;        String result="";        while((line=br.readLine())!=null){            System.out.println(line);             result  =result + "\n" +line;        }        System.out.println(result);        //提取JSON中的值        ObjectMapper mapper = new ObjectMapper();        People people = mapper.readValue(result,People.class);        //登入        String userName = people.userName;        String passWord = people.passWord;        //查询数据库        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        //2.获取SqlSession对象        SqlSession sqlSession = sqlSessionFactory.openSession();        //3.获取Mapper接口的代理对象        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //4.执行办法        User users =userMapper.selectAll(userName, passWord);        System.out.println(users);        //开释资源        sqlSession.close();        System.out.println(result);        //数据库数据与userName、passWord做比拟        boolean flag = false;        if (users != null) {            flag = true;        } else {            flag = false;        }        //返回一个Boolean        response.getWriter().write("" + flag);        return null;    }    /*    * 读取ajax-demo2.html    * */    @GetMapping("/hello1")    public String hello1() {        String str ;        String htmlStr="";        try {            BufferedReader in = new BufferedReader(new FileReader("src/webapp/ajax-demo.html"));            while ((str = in.readLine()) != null) {                System.out.println(str);                htmlStr  =htmlStr + "\n" +str;            }            System.out.print(htmlStr);        } catch (IOException e) {            System.out.print("谬误");        }        return htmlStr;    }    @GetMapping("/hello2")    public String hello2() {        String str ;        String htmlStr="";        try {            BufferedReader in = new BufferedReader(new FileReader("src/webapp/ajax-demo2.html"));            while ((str = in.readLine()) != null) {                System.out.println(str);                htmlStr  =htmlStr + "\n" +str;            }            System.out.print(htmlStr);        } catch (IOException e) {            System.out.print("谬误");        }        return htmlStr;    }    /*    * 实现批改明码的性能    * */    @RequestMapping("/addUser3")    public People addUser3( HttpServletRequest request, HttpServletResponse response) throws IOException {        String contentType = request.getContentType();        ServletInputStream is = request.getInputStream();        BufferedReader br = new BufferedReader(new InputStreamReader(is));        String line=null;        String result="";        while((line=br.readLine())!=null){            System.out.println(line);             result  =result + "\n" +line;        }        System.out.println(contentType);        //提取JSON中的值        ObjectMapper mapper = new ObjectMapper();        People people = mapper.readValue(result,People.class);        String userName = people.userName;        String passWord = people.passWord;        //批改明码        User user = new User();        user.setUserName(userName);        user.setPassWord(passWord);        //查询数据库        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        //2.获取SqlSession对象        SqlSession sqlSession = sqlSessionFactory.openSession();        //3.获取Mapper接口的代理对象        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //4.执行办法        int update = userMapper.update(user);        System.out.println(update);        //提交事务        sqlSession.commit();        //开释资源        sqlSession.close();        System.out.println(result);        //判断数据库是否做出批改        boolean flag = false;        if (update !=0) {            flag = true;        } else {//update为0则没有做出批改            flag = false;        }        //返回一个Boolean        response.getWriter().write("" + flag);        return null;    }}

测试一下

后果合乎预期。
流程跑通顺了,接下来就该思考如何将两次读取文件的操作合并(hello1和hello2)。

4、合并两次读取文件的操作

为什么要合并读取文件的操作呢?别看当初的需要要读取的文件少,比拟不便。那万一当前的需要要读取几十个文件呢?我得读取一个文件就得写一次,那还得了。

那该怎么实现合并这个操作呢?
拼接字符串仿佛是一个不错的抉择。将要拼接的局部(ajax_demo.html、ajax_demo2.html)类似的中央提取进去,不一样的中央通过传参的形式返回不就行了吗?说干就干。
咱们创立一个hello3,定义一个String类型的变量a(这个变量的值通过传参的形式取得),将类似的局部用字符串写死,不一样的局部通过变量a代替("src/webapp/"+a +".html")。
DemoApplication局部:

package com.example;@SpringBootApplication@RestControllerpublic class DemoApplication {    String flag = null;    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }    @RequestMapping("/hello3")    public String hello3( HttpServletRequest request) throws IOException {        String flag = request.getParameter("flag");        String a = "";        System.out.println(flag);        if (flag == null){//只会执行一次,做为变量a没有传递回来之前的默认值。            a ="ajax-demo";        }else{            a = flag;        }        System.out.println(a);        String str ="";        String htmlStr="";        try {            BufferedReader in = new BufferedReader(new FileReader("src/webapp/"+a +".html"));            while ((str = in.readLine()) != null) {                htmlStr  =htmlStr + "\n" +str;            }        } catch (IOException e) {            System.out.print("谬误");        }        System.out.println(htmlStr);        return htmlStr;    }    /*    * 实现账号密码校验的性能    * */    @RequestMapping("/addUser2")    public People addUser2( HttpServletRequest request, HttpServletResponse response) throws IOException {        ServletInputStream is = request.getInputStream();        BufferedReader br = new BufferedReader(new InputStreamReader(is));        String line=null;        String result="";        while((line=br.readLine())!=null){            System.out.println(line);             result  =result + "\n" +line;        }        System.out.println(result);        //提取JSON中的值        ObjectMapper mapper = new ObjectMapper();        People people = mapper.readValue(result,People.class);        //登入        String userName = people.userName;        String passWord = people.passWord;        //查询数据库        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        //2.获取SqlSession对象        SqlSession sqlSession = sqlSessionFactory.openSession();        //3.获取Mapper接口的代理对象        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //4.执行办法        User users =userMapper.selectAll(userName, passWord);        System.out.println(users);        //开释资源        sqlSession.close();        System.out.println(result);        //数据库数据与userName、passWord做比拟        boolean flag = false;        if (users != null) {            flag = true;        } else {            flag = false;        }        //返回一个Boolean        response.getWriter().write("" + flag);        return null;    }    /*    * 实现批改明码的性能    * */    @RequestMapping("/addUser3")    public People addUser3( HttpServletRequest request, HttpServletResponse response) throws IOException {        String contentType = request.getContentType();        ServletInputStream is = request.getInputStream();        BufferedReader br = new BufferedReader(new InputStreamReader(is));        String line=null;        String result="";        while((line=br.readLine())!=null){            System.out.println(line);             result  =result + "\n" +line;        }        System.out.println(contentType);        //提取JSON中的值        ObjectMapper mapper = new ObjectMapper();        People people = mapper.readValue(result,People.class);        String userName = people.userName;        String passWord = people.passWord;        //批改明码        User user = new User();        user.setUserName(userName);        user.setPassWord(passWord);        //查询数据库        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        //2.获取SqlSession对象        SqlSession sqlSession = sqlSessionFactory.openSession();        //3.获取Mapper接口的代理对象        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //4.执行办法        int update = userMapper.update(user);        System.out.println(update);        //提交事务        sqlSession.commit();        //开释资源        sqlSession.close();        System.out.println(result);        //判断数据库是否做出批改        boolean flag = false;        if (update !=0) {            flag = true;        } else {//update为0则没有做出批改            flag = false;        }        //返回一个Boolean        response.getWriter().write("" + flag);        return null;    }}

html局部:
以ajax-demo.html举例:
在tz()下将ajax-demo2.html应用post申请将数据传递给/hello3.

<!DOCTYPE html><html>    <head>    </head>    <body>        <form id="form1" action="##"  method="post" accept-charset="UTF-8" onsubmit="return false">            <p>校验</p>            <input type="text" name="userName" id="txtUserName" placeholder="用户名"/>            <input type="text" name="passWord" id="txtPassWord" placeholder="明码"/>            <input type="submit"  value="提交" onclick="fun()"/>        </form>        <button onclick="tz()">批改明码</button>        <script>            function tz(){                var flag = "ajax-demo2";                const back1 = new XMLHttpRequest();                back1.open("POST","http://localhost:8080/hello3");                back1.send('flag='+flag);                window.location.href="http://localhost:8080/hello3?flag="+flag;            }            function fun(){                const back = new XMLHttpRequest();                let name = {"userName":form1.userName.value,"passWord":form1.passWord.value}                userName="+name+"&&passWord="+psd;                let userName = JSON.stringify(name);                back.onload = function(){                    //判断true 、false                    if(this.responseText == "true"){                        //明码账号正确                        alert("明码账号正确");                    }else{                        //明码账号谬误                         alert("明码账号谬误");                    }                }                alert(userName);                back.open("POST","http://localhost:8080/addUser2");                back.setRequestHeader("Content-type","application/json;charset=UTF-8");//能够发送json格局字符串                back.send(userName);            }        </script>    </body></html>

ajax-demo2.html同上。
测试一下!
在浏览器上输出http://localhost:8080/hello3;

ok,性能没有问题,接下来就是复用数据库连贯了。咱只有把加载数据库等信息放入构造函数中,而后在须要应用的时候援用这个构造函数即可。

5、复用数据库连贯

创立一个构造函数Sql

package com.example;public class Sql {    SqlSessionFactory Sql() throws IOException {        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        return sqlSessionFactory;    }}

而后将DemoApplication中配置数据库的局部一一代替:

package com.example;@SpringBootApplication@RestControllerpublic class DemoApplication {    String flag = null;    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }    @RequestMapping("/hello3")    public String hello3( HttpServletRequest request) throws IOException {        String flag = request.getParameter("flag");        String a = "";        System.out.println(flag);        if (flag == null){//只会执行一次,做为变量a没有传递回来之前的默认值。            a ="ajax-demo";        }else{            a = flag;        }        System.out.println(a);        String str ="";        String htmlStr="";        try {            BufferedReader in = new BufferedReader(new FileReader("src/webapp/"+a +".html"));            while ((str = in.readLine()) != null) {                htmlStr  =htmlStr + "\n" +str;            }        } catch (IOException e) {            System.out.print("谬误");        }        System.out.println(htmlStr);        return htmlStr;    }    /*    * 实现账号密码校验的性能    * */    @RequestMapping("/addUser2")    public People addUser2( HttpServletRequest request, HttpServletResponse response) throws IOException {        ServletInputStream is = request.getInputStream();        BufferedReader br = new BufferedReader(new InputStreamReader(is));        String line=null;        String result="";        while((line=br.readLine())!=null){            System.out.println(line);             result  =result + "\n" +line;        }        System.out.println(result);        //提取JSON中的值        ObjectMapper mapper = new ObjectMapper();        People people = mapper.readValue(result,People.class);        //登入        String userName = people.userName;        String passWord = people.passWord;        //查询数据库        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        //2.获取SqlSession对象        Sql sql = new Sql();        SqlSession sqlSession = sql.Sql().openSession();        //3.获取Mapper接口的代理对象        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //4.执行办法        User users =userMapper.selectAll(userName, passWord);        System.out.println(users);        //开释资源        sqlSession.close();        System.out.println(result);        //数据库数据与userName、passWord做比拟        boolean flag = false;        if (users != null) {            flag = true;        } else {            flag = false;        }        //返回一个Boolean        response.getWriter().write("" + flag);        return null;    }    /*    * 实现批改明码的性能    * */    @RequestMapping("/addUser3")    public People addUser3( HttpServletRequest request, HttpServletResponse response) throws IOException {        String contentType = request.getContentType();        ServletInputStream is = request.getInputStream();        BufferedReader br = new BufferedReader(new InputStreamReader(is));        String line=null;        String result="";        while((line=br.readLine())!=null){            System.out.println(line);            result  =result + "\n" +line;        }        System.out.println(contentType);        //提取JSON中的值        ObjectMapper mapper = new ObjectMapper();        People people = mapper.readValue(result,People.class);        String userName = people.userName;        String passWord = people.passWord;        //批改明码        User user = new User();        user.setUserName(userName);        user.setPassWord(passWord);        //查询数据库        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        //2.获取SqlSession对象        Sql sql = new Sql();        SqlSession sqlSession = sql.Sql().openSession();        //3.获取Mapper接口的代理对象        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //4.执行办法        int update = userMapper.update(user);        System.out.println(update);        //提交事务        sqlSession.commit();        //开释资源        sqlSession.close();        System.out.println(result);        //判断数据库是否做出批改        boolean flag = false;        if (update !=0) {            flag = true;        } else {//update为0则没有做出批改            flag = false;        }        //返回一个Boolean        response.getWriter().write("" + flag);        return null;    }}

功败垂成,能够应用 show ststus like 'Threads%'; 能够在MySQL命令行中查看数据库连贯的状况。