JavaWeb第八讲

目录

八、Ajax

1、Ajax简介

1.1同步、异步

1.2 Ajax介绍

1.3 Ajax语法

案例:

八、Ajax

1、Ajax简介

1.1同步、异步

同步:同步请求,客户端发出请求,等待服务器端返回结果,接着进行下一次的请求。如果有一个请求阻塞,那后面的请求将全部阻塞,能通过HTML和js发送

异步:异步请求,客户端发出请求,无需等待服务器端返回结果,接着进行下一次的请求。能通过js发送请求,主要使用在在线地图,商城等等。

1.2 Ajax介绍

marker language 标记语言,标签语言

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术, 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。 无需重新加载整个网页的情况下, 对网页的某部分进行更新。 (局部刷新)

1.3 Ajax语法

//Ajax形式语法
$.post(url,[data],[callback],[type])
    
//Ajax的get请求语法*************************
$.get("url",{},function(data){},"")
//1. url  代表的是我们向后台发出的请求  servlet的路径
//2.{} :浏览器向后台传递键值对结构的数据 {key可以加引号也可以不加:value-值}--例{"name":username}
//3.function(data){}:data代表的是后台传递过来的数据,data是自定义的变量,名字可以随便写,但不要使用关键字
//4.”“ 代表后台传递过来的数据我们用什么样的形式去接收:xml, html, script, json, text, _default。
​
//ajax发出的post请求*************************
    //只需要将get改为post即可
$.post("url",{},function(data){},"")
​
//Ajax原生语句*******************
    $.ajax({
        url:"userServlet?method=queryAll",
        type:"get",//不写就默认是get请求
        data:{}//对应的是get或post中的第二个参数,我们向后台传递的数据
        success:function(d){
            //后台执行成功执行的回调函数,d是传递回来的值
        }
        error:function(msg){
            //后台执行失败执行的回调函数,一般是500异常,服务器错误
        }     
    })  
​
//如果需要将表单进行异步操作的话,可以对表单进行序列化的操作
[data]部分的参数是: $("#form的id").serialize()
​
//字符串传输
    //1.如果后台传递给前台的是一个字符串的话,直接传输
    //2.如果传递的是一个集合或是数组,那么就需要将这个集合转化为json字符串(引入第三方工具fastjson)
    //注:fastjson漏洞很多,不建议使用,建议使用hutool  

案例:

后端代码

BaseDao代码

dao层接口及实现类:

public interface IUserDao {
    int addU(User user);
    //查询所有用户的方法
    List<Map<String, Object>> queryA();
    //根据名字查询用户
    List<Map<String, Object>> queryN(String name1);
}
​
public class UserDaoImpl extends BaseDao implements IUserDao {
    @Override
    public int addU(User user) {
        String sql = "insert into t_user(username,password,salt,sex) values(?,?,?,?)";
        return addOrUpdate(sql,user.getUsername(),user.getPassword(),user.getSalt(),user.getSex());
    }
​
    @Override
    public List<Map<String, Object>> queryA() {
        String sql = "select * from t_user";
        return query(sql);
    }
​
    @Override
    public List<Map<String, Object>> queryN(String name1) {
        String sql = "select * from  t_user where username=?";
        return query(sql,name1);
    }
}
​

实体类:

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
    private String salt;
    private String sex;
}

服务接口及实现类:

public interface IUserService {
    boolean addUser(Map<String, String[]> parameterMap);
    
    List<Map<String, Object>> queryAll();
    
    boolean queryByName(String name1);
}
​
public class UserServiceImpl implements IUserService {
    @Override
    public boolean addUser(Map<String, String[]> parameterMap) {
        User user  = new User();
        try {
            BeanUtils.populate(user,parameterMap);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
        }
        String salt = UUID.randomUUID().toString();
        String md5Password = MD5Util.MD5EncodeUtf8(user.getPassword(), salt);
        user.setPassword(md5Password);
        user.setSalt(salt);
        System.out.println(user);
        IUserDao iUserDao = new UserDaoImpl();
        int i = iUserDao.addU(user);
        if (i>0){
            return true;
        }else{
            return false;
        }
    }
​
    @Override
    public List<Map<String, Object>> queryAll() {
        IUserDao iUserDao = new UserDaoImpl();
        List<Map<String,Object>> allU = iUserDao.queryA();
        return allU;
    }
​
​
    @Override
    public boolean queryByName(String name1) {
        IUserDao iUserDao = new UserDaoImpl();
        List<Map<String,Object>> usermap = iUserDao.queryN(name1);
        System.out.println(usermap);
        if (usermap.size()>0){
            return true;
        }else {
            return false;
        }
    }
}
 

字符编码过滤器:

@WebFilter(filterName = "encode", urlPatterns={"/*"})
public class EncodeFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
​
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
      // 处理
        // HttpServletRequest
        HttpServletRequest request =(HttpServletRequest)servletRequest;
        HttpServletResponse response =(HttpServletResponse)servletResponse;
        response.setCharacterEncoding("utf-8");
        // 请求 设置字符编码格式
        request.setCharacterEncoding("utf-8");
        // filterchain  过滤器链   如果有下一个过滤器  就走下一个过滤器   如果没有就直接访问servlet
        filterChain.doFilter(servletRequest,servletResponse);
​
    }
    @Override
    public void destroy() {
    }
}

servlet:

@WebServlet(name = "UserServlet", value = "/userServlet")
public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getParameter("method");
        //当没有请求,但是输入了用户名时,利用失焦事件判定是否该名称已存在
        if (method==null){
            checkUser(req,resp);
        }else{
            switch (method){
                case "add":
                    addUser(req,resp);
                    break;
                case "query":
                    queryAll(req,resp);
                    break;
            }
        }
​
    }
​
    //查询所有的用户数据方法
    private void queryAll(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        PrintWriter writer = resp.getWriter();
        IUserService userService = new UserServiceImpl();
        List<Map<String, Object>> mapList = userService.queryAll();
        //将数组转化为JSON字符串的形式,以便于前端接收到数组形式的数据
        String s = JSON.toJSONString(mapList);
        writer.print(s);
        writer.flush();
        writer.close();
    }
​
    //添加用户的方法
    private void addUser(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        PrintWriter writer = resp.getWriter();
        //获取页面表单中的所有元素
        Map<String, String[]> parameterMap = req.getParameterMap();
        IUserService iUserService = new UserServiceImpl();
        //将数据添加到数据库中,并返回添加的结果,是否添加成功,以便浏览器根据结果判断接下来的操作
        boolean b = iUserService.addUser(parameterMap);
        writer.print(b);
        writer.flush();
        writer.close();
    }
​
    //根据用户名查询数据库用户
    private void checkUser(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        PrintWriter writer = resp.getWriter();
        //获取页面中name为name1,
        String name1 = req.getParameter("name1");
        IUserService iUserService = new UserServiceImpl();
        boolean queryStatus = iUserService.queryByName(name1);
        //设置一个要打印的字符串初始值,如果能查询到,就设置为0(表示不能被添加)
        String msg = "";
        if (queryStatus){
            msg="0";
        }else {
            msg="1";
        }
        writer.print(msg);
        writer.flush();
        writer.close();
    }
}

前端代码:Ajax语言

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>登录</title>
      <style>
          #msg{
              color: hotpink;
          }
      </style>
  </head>
  <body>
      <form id="myform"  method="post" onsubmit="return check()">
          用户名:<input type="text" name="username" id="username"><span id="msg"></span><br>
          密  码:<input type="password" name="password"><br>
          性  别:<input type="radio" name="sex" value="男">男
                 <input type="radio" name="sex" value="女">女<br>
          <input type="button" onclick="addUser()" value="提交" >
      </form>
        <table border="1" cellspacing="0">
            <thead>
                <tr>
                    <th>id</th>
                    <th>username</th>
                    <th>sex</th>
                </tr>
            </thead>
        <%--将tbody给个id,为了后面将内容填充到表格的tbody中--%>
            <tbody id="tb">
​
            </tbody>
        </table>
<%-- 在web下创建一个static包,在static下面建立js、jquery、image包,将jquery的api放到jquery中     --%>
<%--引入jQuery中的包,使用jquery方法--%>
  <script type="text/javascript" src="static/jquery-3.4.1.js"></script>
    <script>
        //设置一个能否提交的初始状态
        var status = false;
        //初始化函数;在这里面的函数在页面加载时,就加载
        $(function (){
            checkUserName();
            queryAll();
        })
        function queryAll(){
            $.get("userServlet?method=query",
                {},function (d){
                    //控制台输出取到的d值为多少
                    // console.log(JSON.stringify(d));
                    var trs = "";
                    for (let i = 0; i < d.length; i++) {
                        var id = d[i].id;
                        var username = d[i].username;
                        var sex = d[i].sex;
                        trs+="<tr><td>"+id+"</td><td>"+username+"</td><td>"+sex+"</td></tr>";
                    }
                    //将tr放到table中:tb是tbody的id
                    $("#tb").html(trs);
                //最后设置以json字符串形式接收
                },"json")
        }
​
        function addUser(){
            //当数据库中没有该用户名时才能够提交
            if (status==true){
                $.get("userServlet?method=add",
                    $("#myform").serialize(),
                    function (d){
                        queryAll();
                    })
            }
        }
​
        function checkUserName(){
            $("#username").on("blur",function(){
                //获取到id为username的输入框中的值,命名为name
                var name = $("#username").val();
                $.get("userServlet",
                    //页面传到后台的数据,将name传到后台
                    {"name1":name},
                    //d是后台传递过来的数据
                function (d){
                    //如果后台传送过来的数据是0,就代表用户名已经存在,那就将用户名后的span中显示该用户名已存在
                    if(d=="0"){
                        $("#msg").html("该用户名已存在");
                        status=false;
                    }else{
                        $("#msg").html("该用户名还未存在");
                        //将提交状态设置为可以提交
                        status=true;
                    }
                })
            })
        }
        //根据用户名是否存在来判断提交状态,前提是当前提交表单的类型是submit
        function check(){
            if(status=="true"){
                return true;
            }else{
                return false
            }
        }
    </script>
  </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值