servlet+ajax实现json数据交互

旧城等待, 2021-11-01 15:10 493阅读 0赞

需要插件 Jquery、jar包:json-lib-2.2.3-jdk15.jar及其他jar包如下:

1012652-20190721153727747-1296919082.png

完成结果:【这种写法只能用数据库中id=1的第一条数据登录,是什么原因呢?还在实验中】

1012652-20190721153906146-310044426.png 1012652-20190721153942568-1711547447.png

具体代码:

1、前台js+html代码

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>登录</title>
  8. <!--引入js-->
  9. <script src="./jquery-3.3.1.js"></script>
  10. <script type="text/javascript">
  11. function login(){
  12. var uname = $("#uname").val();
  13. var pwd = $("#pwd").val();
  14. alert(uname);
  15. $.ajax({
  16. type : "post",
  17. async : false, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
  18. url : "UserServlet", //请求发送到UserServlet处
  19. data : {
  20. "uname":uname,"pwd":pwd},
  21. dataType : "json", //返回数据形式为json
  22. success : function(result) {
  23. //请求成功时执行该函数内容,result即为服务器返回的json对象
  24. for(var i=0;i<result.length;i++){
  25. alert(result[i].id+result[i].uname+result[i].nickname+result[i].pwd);
  26. //后期将获得的数据加入html
  27. addLabel(result[i].id,result[i].uname,result[i].nickname,result[i].pwd)
  28. }
  29. //隐藏加载动画略
  30. },
  31. error : function(errorMsg) {
  32. //请求失败时执行该函数
  33. alert("请求数据失败!");
  34. myChart.hideLoading();
  35. }
  36. });
  37. }
  38. //实现添加元素的函数
  39. function addLabel(id,uname,nickname,pwd){
  40. $("thead").append("<tr>")
  41. $("thead").append("<td>"+id+"</td>");
  42. $("thead").append("<td>"+uname+"</td>");
  43. $("thead").append("<td>"+nickname+"</td>");
  44. $("thead").append("<td>"+pwd+"</td></tr>");
  45. }
  46. </script>
  47. <style type="text/css">
  48. *{
  49. margin:0 auto;
  50. padding:0;
  51. }
  52. #container{
  53. width:600px;
  54. height:500px;
  55. border:1px solid red;
  56. border-radius:10%;
  57. }
  58. /**将行内元素设置为块元素,并分行控制**/
  59. #cover_uname{
  60. margin-top:200px;
  61. width:300px;
  62. height:50px;
  63. display:block;
  64. }
  65. #cover_pwd{
  66. width:300px;
  67. height:50px;
  68. display:block;
  69. }
  70. #cover_login{
  71. width:60px;
  72. height:50px;
  73. display:block;
  74. }
  75. </style>
  76. </head>
  77. <body>
  78. <div id="container">
  79. <span id="cover_uname">账户:<input type="text" id="uname"/></span>
  80. <span id="cover_pwd">密码:<input type="text" id="pwd"/></span>
  81. <span id="cover_login"><button onclick="login()">登录</button></span>
  82. </div>
  83. <div id="content">
  84. <table border="1" style="border-collapse:collapse;border:1px solid red;">
  85. <thead><tr><td colspan="4" align="center">信息</td></tr></thead>
  86. </table>
  87. </div>
  88. </body>
  89. </html>

2、servlet代码:

  1. package gc.servlet;
  2. import gc.dao.UserDao;
  3. import gc.json.ToJson;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. /**
  11. * @author macbook
  12. * @see 用户登录控制/增删改查控制
  13. */
  14. public class UserServlet extends HttpServlet {
  15. private static final long serialVersionUID = 1L;
  16. public UserServlet() {
  17. super();
  18. }
  19. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  20. response.setContentType("application/json; charset=utf-8");
  21. response.setHeader("cache-control", "no-cache");
  22. PrintWriter out = response.getWriter();
  23. ToJson json = new ToJson();
  24. UserDao dao = new UserDao();
  25. //根据状态,进行判断
  26. String uname = request.getParameter("uname");
  27. String pwd = request.getParameter("pwd");
  28. System.out.println(uname+pwd);
  29. //login登录
  30. String loginStatus = dao.login(uname, uname);
  31. if(loginStatus.equals("fail")){
  32. //调转到登录失败页面
  33. response.sendError(404);
  34. }else {
  35. //说明获取到昵称,返回昵称和用户信息
  36. out.print(json.getAUserJson(uname));
  37. System.out.println(json.getAUserJson(uname));
  38. }
  39. //reg注册
  40. //del删除
  41. //update修改
  42. //select查询
  43. out.flush();
  44. out.close();
  45. }
  46. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  47. doGet(request, response);
  48. }
  49. }

3、其他队数据库操作的类和转化为json数据的类:

数据库信息的类:

  1. package gc.util;
  2. public class MySqlDBInfor {
  3. public static String driverName = "com.mysql.jdbc.Driver";
  4. public static String url = "jdbc:mysql://127.0.0.1:3306/gc?useUnicode=true&characterEncoding=UTF-8";
  5. public static String user = "root";
  6. public static String pwd = "123456";
  7. }

连接数据库的类:

  1. package gc.util;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7. public class ConnectDB {
  8. static Connection connection = null;//1.
  9. //数据库连接
  10. public static Connection getConnectDB(){
  11. try {
  12. Class.forName(MySqlDBInfor.driverName);//2.
  13. connection = DriverManager.getConnection(MySqlDBInfor.url,MySqlDBInfor.user,MySqlDBInfor.pwd);//3.
  14. return connection;
  15. } catch (Exception e) {
  16. System.out.println(e.getMessage());
  17. }
  18. return connection;
  19. }
  20. //数据库连接关闭
  21. public static void closeDB(){
  22. try {
  23. getConnectDB().close();
  24. } catch (SQLException e) {
  25. // TODO Auto-generated catch block
  26. e.printStackTrace();
  27. }
  28. }
  29. /**
  30. * @see 用于向数据库插入数据
  31. * @param sql
  32. * @return
  33. */
  34. public static int updateData(String sql){
  35. try {
  36. Statement statement = getConnectDB().createStatement();
  37. int a = statement.executeUpdate(sql);
  38. if(a>0)return 1;
  39. } catch (SQLException e) {
  40. // TODO Auto-generated catch block
  41. e.printStackTrace();
  42. }
  43. return 0;
  44. }
  45. /**
  46. * @see 查询数据
  47. * @param sql
  48. * @return
  49. */
  50. public static ResultSet queryData(String sql){
  51. Statement statement;
  52. try {
  53. statement = getConnectDB().createStatement();
  54. ResultSet set = statement.executeQuery(sql);
  55. return set;
  56. } catch (SQLException e) {
  57. // TODO Auto-generated catch block
  58. e.printStackTrace();//出现异常就直接返回null
  59. return null;
  60. }
  61. }
  62. public static boolean insertData(String sql){
  63. try {
  64. Statement statement = getConnectDB().createStatement();
  65. if(statement.executeUpdate(sql)>0)return true;
  66. } catch (SQLException e) {
  67. // TODO Auto-generated catch block
  68. e.printStackTrace();
  69. }
  70. return false;
  71. }
  72. public static void main(String[] args) throws SQLException {
  73. String sql = "select *from user;";
  74. ResultSet set = ConnectDB.queryData(sql);
  75. while (set.next()) {
  76. System.out.println(set.getString("uname"));
  77. }
  78. }
  79. }

操作类:

  1. package gc.dao;
  2. import gc.table.User;
  3. import gc.util.ConnectDB;
  4. import java.sql.Connection;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. public class UserDao {
  10. Connection connection = ConnectDB.getConnectDB();
  11. User user;
  12. //查询账户
  13. public List<User> selectUser(String sql){
  14. PreparedStatement statement;
  15. List<User> list = new ArrayList<User>();
  16. ResultSet set;
  17. try {
  18. statement = connection.prepareStatement(sql);
  19. set = statement.executeQuery();
  20. while (set.next()) {
  21. user = new User();
  22. user.setId(set.getString("id"));
  23. user.setUname(set.getString("uname"));
  24. user.setPwd(set.getString("pwd"));
  25. user.setNickname(set.getString("nickname"));
  26. list.add(user);
  27. }
  28. } catch (Exception e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. }
  32. return list;
  33. }
  34. //插入账户
  35. //删除账户
  36. //修改账户
  37. //以上是基本操作,下面是servlet调用时的一些特例操作
  38. //登录,密码账号争取,账号正确,密码不正确【由于不设置验证码,故必须二者均要正确才行,避免撞库】
  39. public String login(String uname,String pwd){
  40. String sql = "select *from user;";
  41. List<User> users = selectUser(sql);
  42. for (int i = 0; i < users.size();) {
  43. User user = users.get(i);
  44. if (user.getUname().equals(uname)&&user.getPwd().equals(pwd)) {
  45. return user.getNickname();
  46. }else {
  47. return "fail";
  48. }
  49. }
  50. return "fail";
  51. }
  52. //测试
  53. public static void main(String[] args) {
  54. UserDao dao = new UserDao();
  55. String sql = "select *from user;";
  56. List<User> list = dao.selectUser(sql);
  57. for (int i = 0; i < list.size(); i++) {
  58. User user = list.get(i);
  59. System.out.println(user.getUname());
  60. }
  61. //测试json化的数据,已在ToJson类内进行测试使用时调用即可
  62. }
  63. }

将数据转化为json的类:

  1. package gc.json;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import net.sf.json.JSONArray;
  9. import net.sf.json.JSONObject;
  10. import gc.dao.UserDao;
  11. import gc.table.User;
  12. import gc.util.ConnectDB;
  13. //将所有表的查询到的结果转化为json数据的类
  14. public class ToJson {
  15. //首先对表中某些字段的值进行统计,然后再交给本类
  16. public void json(String countType,int countNum){
  17. }
  18. public void json(){
  19. }
  20. /**
  21. * 本类用于将json数据直接交给html的测试
  22. */
  23. public List<FakeForms> getJsonTest(){
  24. //1、获取数据库数据,并进行统计
  25. //2、对数据进行json转化
  26. //3、实现基带板类型统计,然后将之数据化
  27. //4、x表示板卡类型,y表示统计
  28. String sql = "select count(if(basebandBoard='BPN2',basebandBoard,null)) BPN2,count(if(basebandBoard='CCE1',basebandBoard,null)) CCE1,count(if(basebandBoard='BPP1',basebandBoard,null)) BPP1,count(if(basebandBoard='FA4',basebandBoard,null)) FA4,count(if(basebandBoard='FA4A',basebandBoard,null)) FA4A,count(if(basebandBoard='FA6',basebandBoard,null)) FA6,count(if(basebandBoard='PM10',basebandBoard,null)) PM10,count(if(basebandBoard='PM10B',basebandBoard,null)) PM10B,count(if(basebandBoard='SA0',basebandBoard,null)) SA0 from four;";
  29. Connection connection = ConnectDB.getConnectDB();
  30. List<FakeForms> fours = new ArrayList<>();
  31. try {
  32. PreparedStatement statement = connection.prepareStatement(sql);
  33. ResultSet set = statement.executeQuery();
  34. while (set.next()) {
  35. FakeForms fakeForms = new FakeForms();
  36. fakeForms.setBPN2(set.getString("BPN2"));
  37. fakeForms.setBPP1(set.getString("BPP1"));
  38. fakeForms.setCCE1(set.getString("CCE1"));
  39. fakeForms.setFA4(set.getString("FA4"));
  40. fakeForms.setFA4A(set.getString("FA4A"));
  41. fakeForms.setFA6(set.getString("FA6"));
  42. fakeForms.setPM10(set.getString("PM10"));
  43. fakeForms.setPM10B("PM10B");
  44. fakeForms.setSA0(set.getString("SA0"));
  45. fours.add(fakeForms);
  46. }
  47. } catch (SQLException e) {
  48. // TODO Auto-generated catch block
  49. e.printStackTrace();
  50. return null;
  51. }
  52. return fours;
  53. }
  54. //获取用户json数据
  55. public JSONArray getUserJson(){
  56. UserDao dao2 = new UserDao();
  57. String sql = "select *from user;";
  58. List<User> list = dao2.selectUser(sql);
  59. JSONArray jsonArray = new JSONArray();
  60. for (int i = 0; i < list.size(); i++) {
  61. User user = list.get(i);
  62. //数据json化
  63. JSONObject jsonObject = JSONObject.fromObject(user);
  64. jsonArray.add(jsonObject);
  65. }
  66. //测试
  67. //System.out.println(jsonArray);
  68. return jsonArray;
  69. }
  70. //获取单个用户json数据
  71. public JSONArray getAUserJson(String uname){
  72. UserDao dao2 = new UserDao();
  73. String sql = "select *from user where uname='"+uname+"';";
  74. List<User> list = dao2.selectUser(sql);
  75. JSONArray jsonArray = new JSONArray();
  76. for (int i = 0; i < list.size(); i++) {
  77. User user = list.get(i);
  78. //数据json化
  79. JSONObject jsonObject = JSONObject.fromObject(user);
  80. jsonArray.add(jsonObject);
  81. }
  82. //测试
  83. //System.out.println(jsonArray);
  84. return jsonArray;
  85. }
  86. //测试
  87. public static void main(String[] args) {
  88. ToJson dao = new ToJson();
  89. JSONArray array = new JSONArray();
  90. List<FakeForms> fours = dao.getJsonTest();
  91. for (int i = 0; i < fours.size(); i++) {
  92. FakeForms four = fours.get(i);
  93. //json化
  94. JSONObject jsonObject = JSONObject.fromObject(four);
  95. array.add(jsonObject);
  96. System.out.println(four.getBPN2());
  97. System.out.println(array.toString());
  98. }
  99. //下面是将查询出的结果进行json格式化
  100. //下面是对User的数据json化
  101. System.out.println(dao.getUserJson());
  102. System.out.println(dao.getAUserJson("cisco"));
  103. }
  104. }

映射表:

  1. package gc.table;
  2. /** 登录系统的账户表 **/
  3. public class User {
  4. private String id;
  5. private String uname;
  6. private String pwd;
  7. private String nickname;//昵称
  8. /**
  9. * @return the id
  10. */
  11. public String getId() {
  12. return id;
  13. }
  14. /**
  15. * @param id the id to set
  16. */
  17. public void setId(String id) {
  18. this.id = id;
  19. }
  20. /**
  21. * @return the uname
  22. */
  23. public String getUname() {
  24. return uname;
  25. }
  26. /**
  27. * @param uname the uname to set
  28. */
  29. public void setUname(String uname) {
  30. this.uname = uname;
  31. }
  32. /**
  33. * @return the pwd
  34. */
  35. public String getPwd() {
  36. return pwd;
  37. }
  38. /**
  39. * @param pwd the pwd to set
  40. */
  41. public void setPwd(String pwd) {
  42. this.pwd = pwd;
  43. }
  44. /**
  45. * @return the nickname
  46. */
  47. public String getNickname() {
  48. return nickname;
  49. }
  50. /**
  51. * @param nickname the nickname to set
  52. */
  53. public void setNickname(String nickname) {
  54. this.nickname = nickname;
  55. }
  56. }

本篇文章主要用于记录json数据转化,注释中提到的功能多没实现,这里主要是记录JSON数据转化及前后交互,实现的过程。

基本思路:

前台发送json数据给servlet,同时请求servlet给予json数据。不考虑后台处理流程,就是这样的交互,双向交互的过程。那么具体细节呢?

首先html发送json数据请求,并请求json数据,此时servlet接收数据后,交由dao类/ToJson类进行处理,根据需要选择。而ToJson则会调用Dao类,实现代码重用,同时快速转化数据为json。即普通的数据请求,如增删改,使用dao即可,牵涉到json则交由Tojson处理。当数据到了dao这里,dao又去调用数据库连接对象进行操作。

按数据流向,我给他按【个人理解的数据分层】:

html/js ajax请求层

servlet 数据接收层/发送

dao/ToJson/table映射类 数据处理/转化层

ConnectionDB 数据持久层

转载于:https://www.cnblogs.com/ciscolee/p/11221357.html

发表评论

表情:
评论列表 (有 0 条评论,493人围观)

还没有评论,来说两句吧...

相关阅读