Servlet实现简单的前后端交互

首先前后端交互是啥呢?

在我的理解中大概是这样的:

简单的讲就是数据的交换

接下来我们来看看应该要怎么实现这个简单的交互:

1、首先我们前端先不写静态页面,直接在url上将请求的参数放上去
2、后端要做的首先就是连接数据库,如果数据库不连,那么就是两个憨憨在傻笑
3、接受前端请求的参数,将请求的参数进行数据库查询
4、后端将结果返回给前端,就完成了一个交互

数据库:


数据库语句如下:

建表:
DROP TABLE IF EXISTS `stus`;
CREATE TABLE `stus`  (`id` int(0) NOT NULL AUTO_INCREMENT,`loginName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`loginPwd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;插入数据:
INSERT INTO `stus` VALUES (1, '123', '123');
INSERT INTO `stus` VALUES (2, '小明', '111');
INSERT INTO `stus` VALUES (3, 'xs', '111');

前端的url请求:

注意多个参数间用&&连接
这里的8080是我的端口号,name=123和passwd=123是前后端定义的请求参数,毕竟前后端没有心有灵犀一点通,告诉后端,前端需要的是查询该用户名和密码是否存在。

Servlet实现前后端交互,是需要在idea里面配置Tomat的
我现在突然明白为啥以前看别人程序也没报错就是跑不了,Servlet不写主函数,主函数在tomcat内,没有在idea配置Tomcat,一切都是季!


想配置的friend,请看这篇文章
[https://blog.csdn.net/weixin_50569789/article/details/119817928]

万事俱备现在开始写后端:

连接数据库

连接数据库用的是JDBC是需要导入jar包的
进入官网下载地址:
https://dev.mysql.com/downloads/connector/j/

 static {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}

这里需要注意一下数据库我用的是MySQL8版本的,所以是com.mysql.cj.jdbc.Driver,如果你是5版本的那么就是com.mysql.jdbc.Driver。
我们写 Class.forName(“com.mysql.cj.jdbc.Driver”)的目的,大家大抵都知道就是加载数据库的驱动,那么为什么要写这句话呢?

我个人的理解是我们通过jdbc连接数据库,例如我们想用一个类的某个方法,那么就要实例化new一个对象来调用方法或者属性。可是jdbc只是一个空的接口,还是new一个么,这个时候需要用具体的方法来加载实例化它。

    private static final String url = "jdbc:mysql://localhost:3306/vote?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";private static final String userName = "root";private static final String passwd = "root";Connection conn = DriverManager.getConnection(url, userName, passwd);

这里的是数据库连接对象,比如说你要连接的数据库是哪一个,数据库的密码和用户名等信息

useSSL:MySQL在高版本需要指明是否进行SSL连接(useSSL的作用是保障Internet数据传输安全利用数据加密)

serverTimezone:这是时区时间,UTC代表的是全球统一的一个时间,在具体项目的时候要根据自己的时区设置时间,如在中国serverTimezone=Asia/Shanghai。其他的参数大家有兴趣自行查看。

后端如何拿到前端的请求呢?

在Servlet中get方法的request就是前端的请求,这个请求是一个整体,你需要通过具体的方法和参数拿到你想要的参数。

 String pa = req.getParameter("name");String pa1 = req.getParameter("passwd");

拿到前端的参数,放到数据库进行查询

PreparedStatement ps = conn.prepareStatement("select * from stus where loginName =? and loginPwd =?;")
ps.setString(1, pa);
ps.setString(2, pa1);

这里推荐大家使用prepareStatement,好处是能够防止sql注入,当然是因为预编译的,对于批量处理可以提高一定效率。

返回前端请求的参数

PreparedStatement ps = conn.prepareStatement("select * from stus where loginName =? and loginPwd =?;")
ResultSet rs = ps.executeQuery();
while (rs.next()) {resp.getWriter().println("id:" + rs.getInt("id"));resp.getWriter().println("loginName:" + rs.getString("loginName"));resp.getWriter().println("loginPwd:" + rs.getString("loginPwd"));}

在这里大家可以看到,PreparedStatement预编译通过自己写的SQL语句再调用executeQuery()方法,返回一个查询的结果集。


还有这里的resp是相应的请求回复,我们要将查询的结果返回前端,需要用resq的getWriter()方法

最后去看看前端的数据拿到了没有

最后总结一个容易遇到的问题:


看到出现Java.lang.String的时候,我猜测应该是有冲突,这个时候可以鼠标放在String上同时按住ctrl,去看看是不是引用到自己想要的东西

比如我这里是有一个String自己建的类,当时是拿来测试的结果忘记删了,这里大家可以注意的一个点就是类名尽可能不要使用特殊的字符,很容易引起冲突导致程序报错

最后呢,贴上源代码,有兴趣的friends可以尝试一下哦

package com.example.demo.day1204;import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;/*** @Author:Yun* @Date:2021/12/23/15:20* @Description:**/
@WebServlet(name = "testHelloWorld", urlPatterns = "/hello")
public class HelloWord extends HttpServlet {private static final java.lang.String url = "jdbc:mysql://localhost:3306/vote?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";private static final java.lang.String userName = "root";private static final java.lang.String passwd = "root";static {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)  {resp.setHeader("Content-Type", "application/json;charset=UTF-8");String pa = req.getParameter("name");String pa1 = req.getParameter("passwd");try (Connection conn = DriverManager.getConnection(url, userName, passwd);PreparedStatement ps = conn.prepareStatement("select * from stus where loginName =? and loginPwd =?;")){ps.setString(1, pa);ps.setString(2, pa1);ResultSet rs = ps.executeQuery();while (rs.next()) {resp.getWriter().println("id:" + rs.getInt("id"));resp.getWriter().println("loginName:" + rs.getString("loginName"));resp.getWriter().println("loginPwd:" + rs.getString("loginPwd"));}rs.close();} catch (Exception e) {e.printStackTrace();}}
}

如有疑问,请留言讨论。

Servlet实现简单的前后端交互相关推荐

  1. 简单的前后端交互的案例

    简单的前后端交互的案例--在表单页面输入信息,该信息存入数据库 首先封装自己的数据库 //封装数据库 //导入mysql模块 const mysql = require ('mysql2');//创建 ...

  2. python前后端交互_Django基础之简单的前后端交互

    Python Python开发 Python语言 Django基础之简单的前后端交互 学习Django有一段时间了,最近刚好写了一个小项目,用到了前后端交互,刚开始写前后端交互确实很让人头晕目眩呢,下 ...

  3. PHP简单的前后端交互

    前后端交互 前端是以 get方式传输, 后端以 $_GET 接收 前端是以 post方式传输, 后端以 $_POST 接收 前端不确定是以 什么方式传输, 后端以 $_REQUEST 接收 get传输 ...

  4. (一)使用form表单的name属性简单实现前后端交互

    实现效果: 点击提交后: 前端页面源码: <!DOCTYPE html> <html lang="en"

  5. (二)使用Ajax简单实现前后端交互

    实现效果: 点击提交后: 前端页面源码: <!DOCTYPE html> <html lang="en">

  6. Mysql+Echarts+Python+Flask实现前后端交互及数据可视化

    前言 社区版Pycharm实现python+flask+echarts+Mysql实现简单的前后端交互. 新手入门,记录经验,欢迎交流. 一.首先检测Flask框架是否成功? 首先,在你的项目下中安装 ...

  7. java中常用前后端交互框架,整合Spring-SpringMVC-MyBatis实现简单前后端交互

    整合Spring-SpringMVC-MyBatis实现简单前后端交互 (1)环境要求 IDEA MySQL Tomcat Maven (2)数据库环境 id name pwd 1 Hunter 12 ...

  8. 取其精华,去其糟粕——前后端交互的计算器——servlet、html、JavaScript、Tomcat

    前后端交互的计算器 继上一篇配置Servlet,如果没配置好,可看我上一篇文章. 当然,还必须要有Tomcat,没有可去官网自行下载.(Tomcat做的就是将本地资源可以上传至前端进行访问).注意:T ...

  9. 必学习的前后端交互框架ajax

    ajax显然是最重要的框架 无论是c#,java,web程序通通能够解决前后端问题. 现在越来越多的人能够开发,为什么? 框架已经改变了程序员,现在基本是个程序员都可以在一个星期内写一个web程序. ...

最新文章

  1. python什么时候用框架_python爬虫-什么时候选择selenium框架框架?
  2. java 模块分离部署_GitHub - yangjiu/Mis: 模块接口服务,如何在一个模块内维护其对外暴露的接口(包括打包发布),而不是把接口和接口实现分离到两个不同的模块?...
  3. ElasticSearch学习笔记-02集群相关操作_cat参数
  4. 系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab
  5. [ASP.NET AJAX]类似.NET框架的JavaScript扩展
  6. python代码200行左右_200行Python代码实现2048
  7. oracel 数据库问题 ORA-12547 ORA-12571
  8. 二维数组最大值首尾相连
  9. 西南科技大学计算机专业宿舍条件怎么样,西南科技大学宿舍条件,宿舍环境图片(10篇)...
  10. 实验7 BindService模拟通信
  11. 幸福来得快,去的也快。
  12. 虚幻四中怎么保持导入模型坐标_「虚幻引擎5」为何让开发者们拍手叫好?它到底厉害在哪?...
  13. Hbuilder问题记录
  14. 【递归练习】阿克曼函数
  15. java 经纬度度分秒转度_用java实现经纬度坐标度分秒与度批量转换
  16. 一个月的java工作总结
  17. 通达信交易接口api_全市场股票量化交易
  18. 关于金仓数据库的java连接问题
  19. 简单的言语介绍一下什么是程序员
  20. 完美生成年度节假日表,Kettle还能这么玩!

热门文章

  1. 企业即时通讯软件哪个比较好用?
  2. AGV机器人是如何工作的
  3. Python流程控制结构
  4. 【软件】 UltraCompare(文件比较工具)中文版破解
  5. 服务器粘贴不能用,重启rdpclip.exe
  6. 5G NR系列文章-逻辑天线端口与物理天线端口
  7. Panels 使用教程
  8. 走入职场的第一步,就是学会不做情绪的奴隶
  9. pku 2752 取名的小猫 (kmp)
  10. mysql常用缓存技术_Mysql缓存技术