动态Web项目讲解+Demo

ops/2024/10/25 14:25:31/

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(使用jqueryajax

<!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.ppmy.cn/ops/8362.html

相关文章

玩转云计算:教你在Akamai Linode上构建IT架构—确定需求

时至今日&#xff0c;选择以云计算方式来运维业务&#xff0c;已经成为大部分情况下的最优选。那么如果要从零开始开发一个新应用&#xff0c;并依托云平台来设计、开发、部害和远维&#xff0c;具体该从何处下手&#xff1f;这一系列文章将介绍如何基于Akamai Linode平台实现这…

HTML重要标签梳理学习

1、HTML文件的框架 使用VS Code编码时&#xff0c;输入!选中第一个&#xff01;就可以快速生成一个HTML文件框架。 2、标签 <hr> <!--下划线--> <br> <!--换行--> <strong>加粗</strong> &…

LR查看偏移量

核心代码 手动关联 char str_temp[] ""; // 手动关联web_reg_save_param("sessionID","LB<input typehidden nameuserSession value","RB>\n","OrdALL", //后续参数要sessionID_1LAST);登录检查点 lr_start_tra…

开盘啦即将涨停接口,风向标接口,竞价,涨停接口涵盖实时接口和历史接口

最近遇到个客户的需求&#xff0c;如图所示 即将涨停的接口如下所示 然后我用代码接口验证&#xff0c;如图所示 开盘啦所有的接口&#xff0c;50多个接口&#xff0c;涵盖涨停概念&#xff0c;概念板块&#xff0c;赚钱效应&#xff0c;效应历史&#xff0c;实时大单&#xf…

基于springboot+vue+Mysql的房产销售平台

开发语言&#xff1a;Java框架&#xff1a;springcloudJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a…

vsCode 配置 用户代码

适当配置自己的代码片段 , 减少coding 时间 &#xff0c; 释放copy双手 小白值得学习 配置方法 左下脚设置 --》 用户代码片段 -- 》 输入你需要配置的文件(比如输入jsx/vue) &#xff0c;回车 编辑 -- 》 编辑示例参数 以及坑点 {"Print to console": {// &q…

【信号处理】心电信号传统R波检测定位典型方法实现(matlab)

关于 心电信号中QRS波检测是一个非常重要的步骤&#xff0c;可以用于实现重要波群的基本定位&#xff0c;在定位基础上&#xff0c;可以进一步分析心电信号的特征变化&#xff0c;从而为医疗诊断提供必要的参考。 工具 MATLAB ECG心电信号 方法实现 ECG心电信号加载 ecg …

第二章:c语言中的表达式和运算符

三、表达式和运算符 理解&#xff1a;表达式由字面值、变量、运算符组成的式子&#xff0c;通常有一个结果。算术运算符 运算符含义举例结果正号运算符aa的值-符号运算符-aa的负数值加法运算符aba和b相加-减法运算符a-ba和b相减*乘法运算符a*ba和b的乘积/除法运算符a/ba除以b%…