Servlet实现简单的前后端交互
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实现简单的前后端交互相关推荐
- 简单的前后端交互的案例
简单的前后端交互的案例--在表单页面输入信息,该信息存入数据库 首先封装自己的数据库 //封装数据库 //导入mysql模块 const mysql = require ('mysql2');//创建 ...
- python前后端交互_Django基础之简单的前后端交互
Python Python开发 Python语言 Django基础之简单的前后端交互 学习Django有一段时间了,最近刚好写了一个小项目,用到了前后端交互,刚开始写前后端交互确实很让人头晕目眩呢,下 ...
- PHP简单的前后端交互
前后端交互 前端是以 get方式传输, 后端以 $_GET 接收 前端是以 post方式传输, 后端以 $_POST 接收 前端不确定是以 什么方式传输, 后端以 $_REQUEST 接收 get传输 ...
- (一)使用form表单的name属性简单实现前后端交互
实现效果: 点击提交后: 前端页面源码: <!DOCTYPE html> <html lang="en"
- (二)使用Ajax简单实现前后端交互
实现效果: 点击提交后: 前端页面源码: <!DOCTYPE html> <html lang="en">
- Mysql+Echarts+Python+Flask实现前后端交互及数据可视化
前言 社区版Pycharm实现python+flask+echarts+Mysql实现简单的前后端交互. 新手入门,记录经验,欢迎交流. 一.首先检测Flask框架是否成功? 首先,在你的项目下中安装 ...
- java中常用前后端交互框架,整合Spring-SpringMVC-MyBatis实现简单前后端交互
整合Spring-SpringMVC-MyBatis实现简单前后端交互 (1)环境要求 IDEA MySQL Tomcat Maven (2)数据库环境 id name pwd 1 Hunter 12 ...
- 取其精华,去其糟粕——前后端交互的计算器——servlet、html、JavaScript、Tomcat
前后端交互的计算器 继上一篇配置Servlet,如果没配置好,可看我上一篇文章. 当然,还必须要有Tomcat,没有可去官网自行下载.(Tomcat做的就是将本地资源可以上传至前端进行访问).注意:T ...
- 必学习的前后端交互框架ajax
ajax显然是最重要的框架 无论是c#,java,web程序通通能够解决前后端问题. 现在越来越多的人能够开发,为什么? 框架已经改变了程序员,现在基本是个程序员都可以在一个星期内写一个web程序. ...
最新文章
- python什么时候用框架_python爬虫-什么时候选择selenium框架框架?
- java 模块分离部署_GitHub - yangjiu/Mis: 模块接口服务,如何在一个模块内维护其对外暴露的接口(包括打包发布),而不是把接口和接口实现分离到两个不同的模块?...
- ElasticSearch学习笔记-02集群相关操作_cat参数
- 系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab
- [ASP.NET AJAX]类似.NET框架的JavaScript扩展
- python代码200行左右_200行Python代码实现2048
- oracel 数据库问题 ORA-12547 ORA-12571
- 二维数组最大值首尾相连
- 西南科技大学计算机专业宿舍条件怎么样,西南科技大学宿舍条件,宿舍环境图片(10篇)...
- 实验7 BindService模拟通信
- 幸福来得快,去的也快。
- 虚幻四中怎么保持导入模型坐标_「虚幻引擎5」为何让开发者们拍手叫好?它到底厉害在哪?...
- Hbuilder问题记录
- 【递归练习】阿克曼函数
- java 经纬度度分秒转度_用java实现经纬度坐标度分秒与度批量转换
- 一个月的java工作总结
- 通达信交易接口api_全市场股票量化交易
- 关于金仓数据库的java连接问题
- 简单的言语介绍一下什么是程序员
- 完美生成年度节假日表,Kettle还能这么玩!