栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Ajax&Json

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Ajax&Json

AJAX&JSON

资源:https://download.csdn.net/download/weixin_51297617/29227509

一. AJAX的概述 1.1 什么是ajax

​ 异步Javascript和XML (Asynchronous Javascript And XML)

1. 异步的访问方式
2. 使用到的技术:Javascript和XML
   1).  Javascript:ajax是js的异步请求技术
   2).  XML:用于封装服务器发送的大量的数据,因为XML无关的数据太多,而且解析比较麻烦。所以目前几乎不再使用了,使用JSON格式来代替。


    
      1
      潘金莲
      
      
烧饼店
2 武大
烧饼连锁店
1.2 同步和异步的区别
# 同步方式
	1. 浏览器与服务器是串行的操作,浏览器发起请求的时候,服务器在处理该请求的时候,浏览器只能等待。以前使用JSP开发的方式都是同步的方式。
	2. 缺点:执行效率低,用户体验差。	
#异步方式
	1. 浏览器与服务器是并行工作的
	2. 优点:执行效率高,用户体验更好。

​ AJAX使用异步的提交方式,浏览器与服务器可以并行操作,即浏览器后台发送数据给服务器。用户在前台还是可以继续工作。用户感觉不到浏览器已经将数据发送给了服务器,并且服务器也已经返回了数据。

1.3 AJAX的应用场景 1.3.1 检查用户名是否已被注册

​ 很多站点的注册页面都具备自动检测用户名是否存在的友好提示,该功能整体页面并没有刷新,但仍然可以异步与服务器端进行数据交换,查询用户的输入的用户名是否在数据库中已经存在。

1.3.2 内容自动补全

百度的搜索补全功能:

京东的搜索补全功能:

二. 原生ajax的访问流程[了解] 1.1 AJAX的执行流程

流程说明:

  1. 用户访问的时候,由Javascript后台创建一个请求对象:XMLHttpRequest对象。
  2. 请求对象创建一个回调函数,回调函数用于处理服务器返回的响应
  3. 请求对象用于发送请求给服务器
  4. 服务器接收到浏览器发过来的请求,并且对数据进行处理。
  5. 将数据以XML的格式发送回浏览器,由XMLHttpRequest请求对象的回调函数接收数据
  6. 使用HTML和CSS更新网页最新结果
1.2 XMLHttpRequest对象

​ 学习XMLHttpRequest对象有哪些事件,方法和属性

创建XMLHttpRequest对象说明
new XMLHttpRequest()构造方法直接创建对象
XMLHttpRequest对象的事件说明
on ready state change准备状态改变事件,这个事件是在以下情况激活:
1. 浏览器开始发送数据给服务器的时候
2. 浏览器数据发送完毕的时候
3. 服务器开始发送数据给浏览器的时候
4. 服务器数据发送完毕的时候
XMLHttpRequest对象的属性说明
readyState准备状态的值,当它等于4的时候,表示服务器数据接收完毕
status服务器的状态码。等于200的时候,服务器正确响应
responseText接收服务器返回的字符串数据
XMLHttpRequest对象的方法说明
open(“GET”,“URL”,true)打开服务器的连接
1. GET或POST表示请求的方式
2. URL访问服务器的地址
3. true/false 表示异步,false表示同步。
同步是指要等待服务器响应回来以后,才继续向后执行。
send()发送请求,如果是GET方法send()不需要参数。
如果是POST,send()需要传递浏览器端的数据
1.3 案例:使用原生的AJAX
package com.itheima01.ajax;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/AjaxServlet")
public class AjaxServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 接收请求
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        System.out.println(name + "," + age);
        //2. 处理业务
//        int i = 1/0;
        //3. 响应数据
//        response.setHeader("content-type","text/html;charset=utf-8");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print("hello");
    }

}



    
    Title


     

三. Ajax异步请求 axios (重要!) 3.1 axios介绍
  • 原生ajax请求的代码编写太过繁琐,我们可以使用axios这个库来简化操作!

    在后续学习的Vue(前端框架)中发送异步请求,使用的就是axios.

    需要注意的是axios不是vue的插件,它可以独立使用.

    axios(https://www.kancloud.cn/yunye/axios/234845)

  • 使用步骤
    1.引入axios核心js文件。
    2.调用axios对象的方法来发起异步请求。
    3.调用axios对象的方法来处理响应的数据。

  • axios常用方法

    #备注: then函数的参数response是一个json对象,我们重点只需要了解response.data即可
    {
        // `data` 由服务器提供的响应 (重要!)
        data: {},
    
        // `status` 来自服务器响应的 HTTP 状态码
        status: 200,
    
        // `statusText` 来自服务器响应的 HTTP 状态信息
        statusText: 'OK',
    
        // `headers` 服务器响应的头
        headers: {},
    
        // `config` 是为请求提供的配置信息
        config: {}
    }
                            
    
  • 代码实现

    • html代码
    
    
    
        
        Title
    
    
             

    • java代码
    package com.itheima01.ajax;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/AjaxServlet")
    public class AjaxServlet extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1. 接收请求
            String name = request.getParameter("name");
            String age = request.getParameter("age");
            System.out.println(name + "," + age);
            //2. 处理业务
    //        int i = 1/0;
            //3. 响应数据
    //        response.setHeader("content-type","text/html;charset=utf-8");
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().print("hello");
        }
    
    }
    
3.2 检查用户名是否已被注册
#需求: 
	   a. 有一个注册的表单, 有注册用户名和密码,一个提交按钮
	   b. 用户名输完之后,检测这个用户名是否可用
	   c. 就算服务器没有立即响应, 用户还能继续在表单上操作 -> 异步
#分析:
	1. 用户名输入框注册一个失去焦点事件(onblur)
	2. 向服务器发送 异步 请求
	3. 服务器响应之后, 提示信息 局部更新到页面上
	   



    
    Title


        


package com.itheima01.ajax;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/CheckServlet")
public class CheckServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        1). 获取请求参数
        // post中文乱码
        request.setCharacterEncoding("utf-8");
        String username = request.getParameter("username");

        //2). 查询数据库 (伪数据)
        if("jack".equalsIgnoreCase(username)){
            //用户名已存在,不可用
            response.getWriter().print("false");
        }else{
            //用户名不存在,可用
            response.getWriter().print("true");
        }
    }

}
四. JSON 4.1 JSON概述

Javascript对象表示形式(Javascript Object Notation : js对象简谱)

json是一种js对象文本表示形式

json是目前 前后端数据交互的主要格式之一

* java对象表示形式
		User user = new User();
			user.setUsername("后羿");
			user.setAge(23);
			user.setSex("男");
			...
			
		Product product = new Product();
			product.setName("小米10");
			product.setDesc("1亿像素的手机小王子");
			
* javascript对象表示形式
		let user ={"username":"后羿","age":23,"sex":"男"}
		let product = {"name":"小米10","desc":"1亿像素的手机小王子"}

json可以取代XML笨重的数据结构,和xml相比:更小、更快,更易解析

json、xml作用:作为数据的载体,在网络中传输

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Pj3Q9B9-1633616549498)(assets/1590628812135.png)]

4.2 JSON基础语法
#json的语法主要有两种:
        1. 对象 { }
        2. 数组 [ ]
        
1. 对象类型
		{name:value,name:value}
		
2. 数组类型
		[
            {name:value,name:value}, 
            {name:value,name:value},
            {name:value,name:value}
		]
		
3. 复杂对象
		{
            name:value,
            wives:[{name:value},{},{}],
            son:{name:value}
		}
#注意: 
	1. 其中name必须是string类型
	2. value必须是以下数据类型之一:
		字符串
		数字
		对象(JSON 对象)
		数组
		布尔
		Null
	3. JSON 中的字符串必须用双引号包围。(单引号不行!)	



    
    Title







五. Fastjson 5.1 fastjson引入

需求

​ 在服务器端有如下User对象需要响应给浏览器.

​ 为了方便浏览器解析, 这就要求服务端在响应之前,需要将转成符合Json格式的字符串.

package com.itheima02.json;

public class User {
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + ''' +
                ", password='" + password + ''' +
                '}';
    }
    //TODO: 自己采用字符串拼接的方式输出。
    public String toJson() {
        return "{"username":""+username+"","password":"+password+"}";
    }
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

​ 通过拼接字符串的形式,将java对象转换成json格式字符串无疑是非常麻烦的,在开发中我们一般使用转换工具来达到实现.

​ 所谓的转换工具是通过java封装好的一些jar工具包,可以直接将java对象或集合转换成json格式的字符串。

常见的json转换工具

其实这些工具使用起来都差不多, 目前我们学习使用的是Fastjson

5.2 fastjson 常用 API

fastjson 作用:

  1. 将java对象(PO)转成json字符串
  2. 将json字符串 转成 java对象(VO)

常用API

fastjson API 入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 

public static final  T parseObject(String text, Class clazz); // 把JSON文本解析成指定类型JavaBean 
public static final  List parseArray(String text, Class clazz); //把JSON文本解析成JavaBean集合 


5.3 fastjson 使用实例 5.3.1 导包
  
        
            com.alibaba
            fastjson
            1.2.47
        
5.3.2 实体类
package com.itheima02.json;

public class User implements Serializable{
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + ''' +
                ", password='" + password + ''' +
                '}';
    }
  
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

package com.itheima02.json;

import java.util.ArrayList;
import java.util.List;

public class UserGroup implements Serializable{
    private String name;
    private List users = new ArrayList();

    public UserGroup() {
    }

    public UserGroup(String name, List users) {
        this.name = name;
        this.users = users;
    }

    @Override
    public String toString() {
        return "UserGroup{" +
                "name='" + name + ''' +
                ", users=" + users +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List getUsers() {
        return users;
    }

    public void setUsers(List users) {
        this.users = users;
    }
}

5.3.3 测试
package com.itheima.test;

import com.alibaba.fastjson.JSON;
import com.itheima02.json.User;
import com.itheima02.json.UserGroup;
import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class FastjsonTest {

    private User user; // 对应 json对象
    private List userList; // 对应 json 数组
    private UserGroup userGroup; // 对应 json 复杂

    private String userJsonString; // json对象字符串 -> User
    private String userListJsonString; // json数组字符串 -> List
    private String userGroupJsonString; // json复杂字符串 -> UserGroup


    @Before
    public void init() {
        user = new User("张三", "123");

        userList = new ArrayList();
        userList.add(new User("刘备", "123"));
        userList.add(new User("关羽", "456"));
        userList.add(new User("张飞", "789"));

        userGroup = new UserGroup();
        userGroup = new UserGroup("userGroups", userList);

        userJsonString = "{'password':'123','username':'张三三'}";
        userListJsonString = "[{'password':'123','username':'刘备'},{'password':'456','username':'关羽'},{'password':'789','username':'张飞'}]";
        userGroupJsonString = "{'name':'userGroups','users':[{'password':'123','username':'刘备'},{'password':'456','username':'关羽'},{'password':'789','username':'张飞'}]}";
    }

    //1. Java对象 -> JSON字符串
    @Test
    public void method01(){
            //核心类: com.alibaba.fastjson.JSON
            //public static final String toJSonString(Object object); // 将JavaBean序列化为JSON文本

        String jsonObj = JSON.toJSONString(user);
        System.out.println(jsonObj);


        String jsonArray = JSON.toJSONString(userList);
        System.out.println(jsonArray);

        String jsonComplex = JSON.toJSONString(userGroup);
        System.out.println(jsonComplex);

    }

    // 2. JSON字符串 -> java对象
    @Test
    public void method02(){
        
        User user = JSON.parseObject(userJsonString, User.class);
        System.out.println(user);

        List users = JSON.parseArray(userListJsonString, User.class);
        System.out.println(users);

        UserGroup group = JSON.parseObject(userGroupJsonString, UserGroup.class);
        System.out.println(group);
    }
}

六. axios和Fastjson综合 6.1 请求参数和响应数据都是普通字符串



    
    Title


         


package com.itheima03.union.pojo.po;

import java.io.Serializable;


public class Contact implements Serializable {
    private Integer id;
    private String name;
    private boolean married;

    public Contact() {
    }

    public Contact(Integer id, String name, boolean married) {
        this.id = id;
        this.name = name;
        this.married = married;
    }

    @Override
    public String toString() {
        return "Contact{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", married=" + married +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isMarried() {
        return married;
    }

    public void setMarried(boolean married) {
        this.married = married;
    }
}

package com.itheima03.union;

import com.itheima03.union.pojo.po.Contact;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;

@WebServlet("/Union01Servlet")
public class Union01Servlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 接收请求
        request.setCharacterEncoding("utf-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        System.out.println(username + "," + password);
        //2. 业务处理 (数据库: 伪数据)
        Contact zs = new Contact(1, "张三", true);
        Contact ls = new Contact(2, "李四", false);

        ArrayList list = new ArrayList<>();
        list.add(zs);
        list.add(ls);
        //3. 响应数据

        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print(list.toString());
    }

}
6.2 响应数据改成json格式

响应结果的封装

package com.itheima03.union.pojo.entity;

import java.io.Serializable;

public class Result implements Serializable {
    private boolean flag;//执行结果,true为执行成功 false为执行失败
    private String message;//返回结果信息
    private Object result;//返回数据(如果是查询操作则设置,如果是增删改则不设置)

    public Result() {
    }
    //失败,或者成功的增删改
    public Result(boolean flag, String message){
        this.flag = flag;
        this.message = message;
    }
    //成功的查询
    public Result(boolean flag, String message, Object result) {
        this.flag = flag;
        this.message = message;
        this.result = result;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getResult() {
        return result;
    }

    public void setResult(Object result) {
        this.result = result;
    }
}




    
    Title


         


package com.itheima03.union;

import com.alibaba.fastjson.JSON;
import com.itheima03.union.pojo.entity.Result;
import com.itheima03.union.pojo.po.Contact;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;

@WebServlet("/Union02Servlet")
public class Union02Servlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //1. 接收请求
            request.setCharacterEncoding("utf-8");
            String username = request.getParameter("username");
            String password = request.getParameter("password");

            System.out.println(username + "," + password);
            //2. 业务处理 (数据库: 伪数据)
            Contact zs = new Contact(1, "张三", true);
            Contact ls = new Contact(2, "李四", false);

            ArrayList list = new ArrayList<>();
            list.add(zs);
            list.add(ls);

//            int i = 1/0; // 模拟服务器异常

            //3. 响应数据 TODO(普通字符串 -> json格式的字符串)


            //ContentType响应头指定的是响应体的数据类型 (MIME)
//        response.setContentType("text/html;charset=utf-8");
            response.setContentType("application/json;charset=utf-8");

            //代码1: java对象 -> json ,然后用响应体输出
//        String json = JSON.toJSonString(list);
//        response.getWriter().print(json);

            //代码2: java对象 -> json ,然后用响应体输出
//            JSON.writeJSonString(response.getWriter(),list);

            //代码3: 考虑响应结果的的封装
            JSON.writeJSONString(response.getWriter(),new Result(true,"查询成功",list));

        } catch (Exception e) { // 修改Exception,用来捕获算术异常
            e.printStackTrace(); // 异常信息打印控制台给程序员自己看
            response.setContentType("application/json;charset=utf-8");

            JSON.writeJSONString(response.getWriter(),new Result(false,"查询失败,请检查你家庭网络"));
        }
    }

}
6.3 请求参数改成json格式



    
    Title


         


package com.itheima03.union.pojo.vo;

import java.io.Serializable;

public class User implements Serializable {

    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + ''' +
                ", password='" + password + ''' +
                '}';
    }

    public String toJson() {
        return "{"username":""+username+"","password":"+password+"}";
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

package com.itheima03.union;

import com.alibaba.fastjson.JSON;
import com.itheima02.json.User;
import com.itheima03.union.entity.Result;
import com.itheima03.union.pojo.po.Contact;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;

@WebServlet("/Union03Servlet")
public class Union03Servlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //1. 接收请求
            User user = JSON.parseObject(request.getInputStream(), User.class);

            System.out.println(user);

            //2. 业务处理 (数据库: 伪数据)
            Contact zs = new Contact(1, "张三", true);
            Contact ls = new Contact(2, "李四", false);

            ArrayList list = new ArrayList<>();
            list.add(zs);
            list.add(ls);

//            int i = 1/0; // 模拟服务器异常

            //3. 响应数据 TODO(普通字符串 -> json格式的字符串)
            response.setContentType("application/json;charset=utf-8");
            JSON.writeJSONString(response.getWriter(),new Result(true,"查询成功",list));

        } catch (Exception e) {
            e.printStackTrace();
            response.setContentType("application/json;charset=utf-8");
            JSON.writeJSONString(response.getWriter(),new Result(false,"查询失败,请检查你家庭网络"));
        }
    }

}
6.4 抽取baseController
package cn.itcast.base;

import cn.itcast.entity.Result;
import cn.itcast.pojo.User;
import com.alibaba.fastjson.JSON;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class baseController {

    
    public static  T parseJson2Object(HttpServletRequest request, Class tClazz) throws IOException {
        return JSON.parseObject(request.getInputStream(), tClazz);
    }

    
    public static void printResult(HttpServletResponse response, Result result) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        JSON.writeJSONString(response.getWriter(), result);
    }

}
七.综合案例 自动补全项目搭建

需求

在输入框输入关键字,下拉框中异步显示与该关键字相关的用户名称

分析

  1. 查询以输入的关键字开头的用户
  2. 文本框使用keyup事件,得到文本框中的值,去掉前后空格。如果文本框的内容为空则不提交给服务器。
  3. 查询成功的回调函数中如果返回的用户数大于0才进行div的拼接,拼接以后显示在div中。
  4. 否则要隐藏div。
  5. 给大div中的子div绑定鼠标点击事件,点击某个名字则将div的文本内容显示在文本框中,并隐藏div

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-42cxc11P-1633616549507)(assets/1565427178364.png)]

效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uioSWFGA-1633616549511)(assets/1553220989638.png)]

导入数据库脚本

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL,
  `password` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `user` VALUES (1, '张三', '123');
INSERT INTO `user` VALUES (2, '李四', '123');
INSERT INTO `user` VALUES (3, '王五', '123');
INSERT INTO `user` VALUES (4, '赵六', '123');
INSERT INTO `user` VALUES (5, '田七', '123');
INSERT INTO `user` VALUES (6, '孙八', '123');
INSERT INTO `user` VALUES (7, '张三丰', '123');
INSERT INTO `user` VALUES (8, '张无忌', '123');
INSERT INTO `user` VALUES (9, '李寻欢', '123');
INSERT INTO `user` VALUES (10, '王维', '123');
INSERT INTO `user` VALUES (11, '李白', '123');
INSERT INTO `user` VALUES (12, '杜甫', '123');
INSERT INTO `user` VALUES (13, '李贺', '123');
INSERT INTO `user` VALUES (14, '李逵', '123');
INSERT INTO `user` VALUES (15, '宋江', '123');
INSERT INTO `user` VALUES (16, '王英', '123');
INSERT INTO `user` VALUES (17, '鲁智深', '123');
INSERT INTO `user` VALUES (18, '武松', '123');
INSERT INTO `user` VALUES (19, '张薇', '123');
INSERT INTO `user` VALUES (20, '张浩', '123');
INSERT INTO `user` VALUES (21, '刘小轩', '123');
INSERT INTO `user` VALUES (22, '刘浩宇', '123');
INSERT INTO `user` VALUES (23, '刘六', '123');

编写实体类

package com.itheima.pojo.po;

import java.io.Serializable;

public class User implements Serializable {

    private Integer id;
    private String name;
    private String password;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", password='" + password + ''' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

代码




    
    自动完成
    



传智播客


package com.itheima.web;

import com.alibaba.fastjson.JSON;
import com.itheima.entity.Result;
import com.itheima.pojo.po.User;
import com.itheima.service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/AutoServlet")
public class AutoServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 获取请求
        request.setCharacterEncoding("utf-8");
        String keyword = request.getParameter("keyword");

        //2. 业务处理
        UserService service = new UserService();
        List list = service.findUserByKd(keyword);

        //3. 响应数据
        response.setContentType("application/json;charset=utf-8");
        JSON.writeJSONString(response.getWriter(),new Result(true,"查询成功",list));

    }

}
package com.itheima.service;

import com.itheima.dao.UserDao;
import com.itheima.pojo.po.User;
import com.itheima.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UserService {

    public List findUserByKd(String keyword) {
        SqlSession session = SqlSessionUtil.getSession();

        UserDao mapper = session.getMapper(UserDao.class);
        List list = mapper.findUserByKd(keyword);
        session.close();
        return list;
    }
}

package com.itheima.dao;

import com.itheima.pojo.po.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface UserDao {
    @Select("select * from user where name like concat(#{keyword},'%')")
    List findUserByKd(String keyword);
}

package com.itheima.entity;

import java.io.Serializable;


public class Result implements Serializable {
    private boolean flag;//执行结果,true为执行成功 false为执行失败
    private String message;//返回结果信息
    private Object result;//返回数据(如果是查询操作则设置,如果是增删改则不设置)

    public Result() {
    }
    //失败,或者成功的增删改
    public Result(boolean flag, String message){
        this.flag = flag;
        this.message = message;
    }
    //成功的查询
    public Result(boolean flag, String message, Object result) {
        this.flag = flag;
        this.message = message;
        this.result = result;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getResult() {
        return result;
    }

    public void setResult(Object result) {
        this.result = result;
    }
}

总结:
1.web项目,前端是tomcat,后端servelet,是同域状态。
2.如果前端使用tomcat,后端使用springboot,那就要解决跨域问题。
3.前端如果使用vue(import)项目,后端使用springboot,就需要路由解决跨域问题,但这个状态下vue需要install编译;如果使用vue(script),就不需要编译,直接当静态文件访问,也是需要解决跨域路由问题。
4.注意跨域问题,前后端分离的基本,前端一个url,后端url跨域。
5.前端一般两种方式发送数据给后端(并返回数据),一种就是全域名url(可以直接发送),一种就是省略三要素的相对域名(uri)(拼接三要素),这个就需要封装文件,一个就是配置文件,一个就是路由文件。
6.后端也是可以用配置实现跨域,但有很多弊端,所以不用,这是就衍生出前端的跨域解决方案,所以现在基本上都是前端解决跨域问题。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301678.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号