动态Web项目讲解+Demo

web流程演示

请求路径

请求路径明确要请求的是哪个servlet

请求方式

servlet含有两种请求方式:doGet和doPost

doGet&doPost

返回数据就是httpResponse,返回给success

参数

包含在request当中

成功

上述流程任何一步都没出问题,就会走到success当中

返回httpServletResponse给success当中

失败

只要有一步出现问题,就会走到失败当中去

get请求和post请求的区别

1. post请求用data域传参,get用url携带参数进行传参

2. 发起请求的方式不同

get:任意能写地址的地方,都能发起get请求

a标签的href属性,浏览器地址栏,img标签的src属性,jquery+ajax,都能发起get请求

post:jquery+ajax发起/form表单发起

form表单会更新全部的表单数据,jquery+ajax可以做到局部的更新

SQL

JDBC

Sun公司对底层数据库驱动的一层封装,是一种规范

流程

demo:JDBC

import java.sql.*;public class JDBCTest {static final String url = "jdbc:mysql://127.0.0.1:3306/qcby?serverTimezone=UTC";// 端口号可能会变,一般是3306static final String username = "写你自己的数据库账号,一般是root";static final String password = "写你自己的数据库密码";public static void main(String[] args) throws SQLException, ClassNotFoundException {query("select * from student");change("UPDATE student SET age = 99 where id = 1;");add("INSERT INTO student(Sname,sex,age,t_id) value(\"拜登\",\"男\",77,2);");delete("DELETE FROM student WHERE id = 12");}public static void query(String querySql) throws ClassNotFoundException, SQLException {Connection connection = initSqlConnection();Statement statement = connection.createStatement();// 5, 执行sql语句,executeQuery方法去查询,返回获取结果ResultSet resultSet = statement.executeQuery(querySql);// 6. resultSet处理数据while (resultSet.next()) {String id = resultSet.getString("id");String Sname = resultSet.getString("Sname");String sex = resultSet.getString("sex");String age = resultSet.getString("age");String t_id = resultSet.getString("t_id");System.out.println("id=" + id + ",Sname=" + Sname + ",sex=" + sex +",age=" + age + ",t_id=" + t_id);}closeJdbcResources(connection, statement, resultSet);}public static void change(String updateSql) throws SQLException, ClassNotFoundException {Connection connection = initSqlConnection();Statement statement = connection.createStatement();// 增删改都是这个executeUpdate方法int changeResult = statement.executeUpdate(updateSql);if (changeResult > 0) {System.out.println("受影响的行数:" + changeResult);} else {throw new SQLException("修改失败!");}closeJdbcResources(connection, statement, null);}public static void add(String insertSql) throws SQLException, ClassNotFoundException {Connection connection = initSqlConnection();Statement statement = connection.createStatement();int addResult = statement.executeUpdate(insertSql);if (addResult > 0) {System.out.println("受影响的行数:" + addResult);} else {throw new SQLException("新增失败!");}closeJdbcResources(connection, statement, null);}public static void delete(String deleteSql) throws SQLException, ClassNotFoundException {Connection connection = initSqlConnection();Statement statement = connection.createStatement();// 增删改都是这个executeUpdate方法int deleteResult = statement.executeUpdate(deleteSql);if (deleteResult > 0) {System.out.println("受影响的行数:" + deleteResult);} else {throw new SQLException("删除失败!");}closeJdbcResources(connection, statement, null);}private static Connection initSqlConnection() throws ClassNotFoundException, SQLException {// 1. 加载驱动(类加载)Class.forName("com.mysql.cj.jdbc.Driver");// mysql8以下要去掉中间的cj// 2. 用户信息和url// 3. 驱动管理类调用方法进行连接,创建连接对象connection,connection代表了数据库return DriverManager.getConnection(url, username, password);}private static void closeJdbcResources(Connection connection, Statement statement, ResultSet resultSet) throws SQLException {// 7. 释放资源if (resultSet != null) {resultSet.close();}statement.close();connection.close();}
}

jdbc为我们提供的接口

前后端数据交互demo

我们要实现的需求是:查询student表的全部学生数据,返回给前端;前端将json格式的数据拼接成表格(table标签)展示

1. 实体类对应的Servlet----查询数据库并转换为JSON格式返回给前端

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("/student")
public class StudentServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("get请求接收到了!");String[] queryParam = {"id", "Sname", "sex", "age", "t_id"};// 确定要拼装成JSON的字段String queryResult = MysqlUtil.getJsonBySql("select * from student", queryParam);// 查询数据库并且拼装成JSON格式System.out.println("queryResult:" + queryResult);// 给前端响应数据resp.setCharacterEncoding("utf-8");resp.setContentType("application/json;charset=UTF-8");// 这里的contentType不能是text/html; charset=UTF-8resp.getWriter().write(queryResult);// 组装响应报文给前端(主要是给js)}
}

这里注意一定要拼装成json格式的数据,否则js读不出来,不会arr视为一个数组

MysqlUtil是一个包装了原生的JDBC的工具类,原生的JDBC,demo:JDBC中讲了,读者可以向上查看

2. 创建对应的html和js(使用jquery和ajax)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<!--第一种方式:本地文件导入,可以不加defer,不加defer就需要加文档就绪函数-->
<script src="js/jQuery.js" defer></script>
<!--我们自定义的js文件得加defer-->
<script src="js/index.js" defer></script>
<body>
<div><table border=1><thead><tr><td>id</td><td>Sname</td><td>sex</td><td>age</td><td>t_id</td><td>操作</td></tr></thead><tbody><tr><td>1</td><td>张三</td><td>男</td><td>99</td><td>1</td><td><input type="button" value="修改"><input type="button" value="删除"></td></tr></tbody></table>
</div>
</body>
</html>

这里tbody里面的数据只是一个演示,实际我们应该用数据库当中查到的数据

使用jquery需要先引入jQuery.js,jquery相当于对原生js操作dom文档函数的一次封装,是一个外部包,我们需要引入才能使用

$.ajax({url: "student", // 对应StudentServlet的@WebServlet("/student")type: "get", // 对应StudentServlet重写的doGet方法
//     查全表不需要带参数success: function (value) {// 这里的value就是StudentServelet最后拼装并返回的response(resp.getWriter().write(queryResult);)console.log(value);var arr = value.data;// value是一个json格式的数据,包含code,msg,data三个变量,其中data是一个数组,我们只需要获取data即可console.log(arr);for (var i = 0; i < arr.length; i++) {// 把data当成一个数组console.log(arr[i]);// 创建html元素,并且赋值$("tbody").append("<tr>" +"<td>"+arr[i].id+"</td>" +"<td>"+arr[i].Sname+"</td>" +"<td>"+arr[i].sex+"</td>" +"<td>"+arr[i].age+"</td>" +"<td>"+arr[i].t_id+"</td>" +"<td>" +"<input type=\"button\" value=\"修改\">" +"<input type=\"button\" value=\"删除\">" +"</td>" +"</tr>")}},// 后端报错,无法返回给前端response,就会走到这里,然后在浏览器给用户警告error: function () {alert("查询全部学生失败!");}
})

3. 运行tomcat

如何在eclipse/IDEA中新建DynamicWebProject/Jarkarta EE项目,并且配置Tomcat,请读者自行搜索

我们点击右上角的运行按钮,tomcat会运行,并且自动打开默认的浏览器环境(我这里配置的是chrome)

自动弹出的应该是这样一个地址

我们可以看到,这里表格已经被成功创建了出来,数据也被显示了出来

F12查看控制台,数据也都显示出来了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/1642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+layuimini实现左侧菜单动态展示

layuimini左侧菜单动态显示 首先我们看一下layuimini的原有菜单显示格式 {"homeInfo": {"title": "首页","href": "page/welcome-2.html?t2"},"logoInfo": {"title": "LAYUI MINI","…

cv2技术原理-图像旋转原理及手动实现

cv2技术原理-图像旋转原理及手动实现 1、图像旋转opencv实现2、cv2.getRotationMatrix2D函数解释3、数学原理推导旋转矩阵M4、手动计算旋转矩阵M5、旋转矩阵M的使用6、使用旋转矩阵M手动实现旋转功能 1、图像旋转opencv实现 图像旋转在对数据集数据增强&#xff08;主要是随机…

Java语言——封装

一.封装的定义 在面向对象程式设计方法中&#xff0c;封装&#xff08;英语&#xff1a;Encapsulation&#xff09;是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。 封装可以被认为是一个保护屏障&#xff0c;防止该类的代码和数据被外部类定义的代码随机访问…

linux|将用户加入白名单

一 用root用户找到etc\sudoers文件 cd etc 二 修改etc\sudoers 文件的权限 默认是只读的 修改为可写的 chmod uw sudoers 三 打开 sudoers文件&#xff0c;在Allow root to run any commands anywhere 后面 添加一条&#xff08;把上面的一条内容复制下来 修改用户名即…

什么是程控电源?以及程控电源的工作原理与应用。

一、程控电源的简介&#xff1a; 程控电源是一种具有编程功能的电源设备&#xff0c;它可以通过外部控制来设定输出电压、电流的稳压、稳流或稳压/稳流模式&#xff0c;因此可以进行电压、电流、相位、频率、功率等参数的试验和检定。一些具体的产品特性包括微机控制、高精度、…

表达式求值(后缀表达式)(数据结构)

一、概念 算术表达式是由操作数&#xff08;运算数&#xff09;、运算符&#xff08;操作符&#xff09;、和界线符&#xff08;括号&#xff09;三部分组成&#xff0c;在计算机中进行算术表达式的计算是通过堆栈来实现的。 二后缀表达式的逻辑和实现方式&#xff08;逆波兰…

电商平台数据有哪些?如何进行电商平台数据分析?(内附模板及工具)

在电商日常的贩卖工作中会产生大量的数据&#xff0c;如果你还不知道如何利用这些宝贵的数据指导未来的销售策略、增长销售额的话&#xff0c;就和我一起看下去吧&#xff01;电商数据采集API接口包含哪些数据&#xff1f; 电商平台数据可以大致分为以下几个组成部分&#xff…

Java中的封装

package day32; ​ public class Person {private String name;private int age; ​public String getName() {return name;} ​public void setName(String name) {this.name name;} ​public int getAge() {return age;} ​public void setAge(int age) {if (age>120 || …

蚓链数字化营销系统与数字资产的关系

蚓链数字化营销系统是一种利用数字技术来实现营销目标的系统。它集成了多种数字营销工具和渠道&#xff0c;以收集、分析和利用客户数据&#xff0c;优化营销活动&#xff0c;并提高营销效果。 数字资产是一种新型的资产类别&#xff0c;它们以电子数据的形式存在&#xff0c;可…

笔试狂刷--Day3

大家好,我是LvZi,今天带来笔试狂刷--Day3 一.牛牛的快递 1.题目链接:牛牛的快递 2.分析: 简单的模拟 3.代码实现: import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner i…

计算机经典黑皮书分享

计算机经典黑皮书是一套计算机科学丛书&#xff0c;其中包含了多本计算机科学领域的经典教材 提供了全面的知识体系&#xff1a;黑皮书涵盖了计算机科学的多个领域&#xff0c;如计算机组成与设计、操作系统、数据库、人工智能等。它们深入浅出地介绍了相关领域的基本概念、原…

HTTP/HTTPS详解

HTTP/HTTPS详解 1. HTTP1.1 HTTP基础知识1.2 HTTP建立和断开连接 2. HTTPS 1. HTTP 1.1 HTTP基础知识 HTTP是互联网上应用最为广泛的一种网络协议&#xff0c;是一个客户端和服务器端请求和应答的标准&#xff08;TCP&#xff09;&#xff0c;用 于从WWW服务器传输超文本到本…

C++学习————第八天(C/C++内存管理)

目录 1、1.C/C内存分布 2、 C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3、C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 4.operator new与operator delete函数 5. new和delete的实现原理 5.1 内置类型 5.2 自定…

【QT学习】8.qt事件处理机制,事件过滤器,自定义事件

1.qt事件处理机制 事件处理&#xff1a; 当用户移动鼠标的时候 &#xff0c;创建一个 鼠标移动事件对象 然后把这个对象放到 事件队列里面去&#xff0c;事件管理器 从队列中 取出事件&#xff0c;然后 调用其对应的事件处理函数。 多态机制&#xff1a; &#x…

【xhs爬虫软件】把小红书评论comment接口封装成GUI采集工具!

用Python开发爬虫采集软件&#xff0c;可自动抓取小红书评论数据&#xff0c;并且含二级评论。 小红书的评论接口URL是&#xff1a; https://edith.xiaohongshu.com/api/sns/web/v2/comment/page 开发者模式分析过程&#xff1a; 进而封装成GUI界面软件&#xff0c;如下&…

17.基础乐理-调式、自然大调式(C大调、D大调。。。)

调式&#xff1a; 若干个音&#xff0c;按照某种规则排列起来&#xff0c;就是调式&#xff0c;调式是一个非常大&#xff0c;非常抽象的概念&#xff0c;调式这两个字是一个统称&#xff0c;当明确了 若干个音 到底有几个音&#xff0c;某种规则到底是什么规则之后&#xff0c…

【精】Devops实战学习CI/CD落地方案#CI篇#

目录 先有个大概了解 基本概念 CI/CD Devops 阿里云效 devops产品 K8s jenkins docker git maven 知行合一&#xff0c;上手操作 实操记录 安装VMware 安装并配置虚拟机 安装并配置docker docker安装 修改镜像源&#xff08;关键且易出错&#xff09; CentOS…

Spring Security 入门篇(一)-- 简介

引言 Spring Security 官方文档 https://spring.io/projects/spring-security Spring Security 中文文档 &#xff1a; https://springdoc.cn/spring-security/ Spring Cloud 中文文档 https://www.springcloud.cc/spring-security.html#overall-architecture 一、简介 1. 什…

poll实现echo服务器的并发

poll实现echo服务器的并发 代码实现 #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <stdlib.h> #include <arpa/inet.h> #include <sys/time.h> #include <unistd.h> #…

【JAVA】实现只有一个窗口弹出的底层逻辑——单身模式

目录 背景说明 代码实现 手写笔记 背景说明 有的时候&#xff0c;当你点击一个选项时会弹出来多个窗口&#xff0c;而有的时候只会弹出一个。 实际上&#xff0c;弹出多个窗口就是创建了多个相同的对象&#xff0c;而只弹出一个就是我们今天即将分享的单身模式——一个类只产生…