(一):小程序与服务器的链接

news/2024/7/6 22:29:46/文章来源:https://www.cnblogs.com/spearcoder/p/18284073

  原文写于18年5月,因不再想继续使用C站,现将主要文件迁移至博客园。文中涉及技术部分已相对过时,但依旧对初始web的小朋友具有一定参考价值,权且玩乐。

环境

  IDE:myeclipse,服务器容器Tomcat,服务端主要用servlet。

创建servlet

  小程序与服务器链接(前端和后端的交互)的基本流程:小程序向服务器发送带参或不带参的请求,其后服务器对请求作出反应,并将处理结果返回,最后小程序接受并显示。

  首先我们需要知道,服务器端依靠servlet处理请求,即小程序需要向servlet发送请求,如何去创建一个servlet呢?file->new->servlet:

  填写Name,创建的方法点选doget和doput就好,这两种方法分别是处理get和put方法请求的。简单情况下我们不区别对待,所以,完全可以doput函数里只写this.doGet();(让put方法去调用get)。(请求的方式有很多种,get和put是最基本的两种,一般put请求会添加数据,而get则用于查询数据)

  建好servlet前一定要写好jsp mapping url,也就是图中第三行内容,这就是客户端发送请求时需要的url(可以理解成地址,我们打开浏览器输入www.xxxxxx.com,地址栏里这个链接就是url【Uniform Resource Locator】,统一资源定位符)。建好servlet后就可以通过项目里webroot文件夹web—inf里的web.xml查看创建情况:


  url没问题就可以。打开sevlet,把一些没必要的东西删掉简单些,像这样:

import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class textServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");//这里是设置一下编码格式System.out.println("收到!");
}public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {this.doGet(request, response);}
}

可以看到这个servlet的功能就是收到请求后,在控制台打出“收到!”

部署服务器

  IDE不同,按钮位置可能也不相同,可以去搜下~

1.

选择好你的项目工程,选择tomcat服务器,点“ok”(不是tomcat的需要先把服务容器配好,一般搜索下就能找到详细的配置过程,windows - performance里面,选中容器后出现Successful deployed算是没问题,不然你可能需要重新配置下服务器了。)

  启动tomcat服务器,启动成功后控制台显示信息:

  ok,到这里服务器就算布置完了。接下来我们来谈一下什么是客户端,又怎样与服务器建立链接。

向服务器发送请求

  其实我们经常使用的浏览器就算一种客户端,通常说的网址,可简单理解成要发送到服务器上的某个地址,也就是我们刚刚设置的url。

  我们的服务请求的处理已经编写完毕(servlet),而且url也已经设置好(web.xml),tomcat也处于打开状态(也就是处在可以接受请求的状态)。现在,我们以浏览器为客户端,向刚才我们写的服务端的servlet发送请求,这时候就要用到我们设置的url了。

  图例分别是域名:端口/项目名称/servlet的url,因为我们的服务器是本地的,所以域名是localhost,至于8080是tomcat的端口(不同的服务器容器端口不同),这里不做过多解释,需要的大家去查一下,可以查到。Amess是项目的名称,text就是我们设置的url还记得吗?


  (补充内容:在你的DOS窗口下输入ipconfig,就可以看到你的局域网IP地址,上面的localhost就可以换成那个IP。例如https://www.cnblogs.com/,这个链接里面的www.cnblogs.com就是域名,本质是IP地址,简单理解就是种替换。当我们购买了服务器后,我们只能通过IP去请求它,IP地址就直接公之于众了,出于保护,我们可以再买个域名,然后把域名和IP绑定,之后我们就可以通过域名来访问。我们都知道百度的域名www.baidu.com,但谁知道它的IP地址是啥呢?也没人在乎呀。所以,上面的localhost理解成自己本机的域名也没有什么问题。)

  ok,当我们敲击回车后,浏览器(客户端)就向我们编写的servlet发送了请求,但网页却什么也不显示。这是当然,因为我们对请求的处理就是在服务端控制台输出个“收到”,而如果想在浏览器上显示信息,就是服务器向客户端发送信息了。(记得把浏览器理解成客户端)我们再切换到后台:

  可以看到,服务器打出了“收到”,客户端向服务器发送请求没问题。那么,服务器怎样向浏览器(也就是客户端)发东西呢?

向客户端返回数据

我们需要通过response输出想要的内容,不要忘记close,只有关闭了输出流,才能将内容输出。(像许多编程语言中,打开文件后进行编写,close后才能实现保存,如果忘记close直接退出了程序,那写的东西就白写了)现在我们更新网页,看看效果。

  现在,大家对客户端向服务器发请求,及服务器向客户端返回数据,都有了基本的了解。你现在可以去冲杯咖啡或者刷下手机,再回来我们就进入主题:小程序和后台服务器的链接

建立链接

  来具体说,小程序(客户端)怎样去与服务器建立连接。

  简单事例,我们只写一个按钮,绑定点击事件click,在js里边来处理事件,向服务器发送请求。(前端语言是种标签语言,不是这篇文章的重点,我们不详谈。如果是零基础,可以先去粗略学习下html+css+js。)js编写click函数功能:

  其实很简单,我们需要调用微信提供的一个API,request,用它向服务器发送请求。开发者工具有具体介绍,大家可以去查看,之后就是设置参数,url和浏览器一样,依旧是服务器servlet的地址,data内是你要向服务器发送的数据。如图,我们发送了一个数据叫做username,他的值是一个字符串“haha”。(header是请求头信息,不作为主要讲述的内容,感兴趣的可以去查下。)success函数就是成功请求服务器,服务器返回后进行的处理,这里我们让他输出res的data内容,res参数(当然名字你可以自定义)是服务器返回的信息,他的data就是后台返回的数据。我们用console.log函数输出下,这个语句当成print就行(学会类比)。这时重新编译后,点击按钮就可以了。注意,小程序编译时会对协议进行检查,不允许向本地的服务器发送请求的,所以之前要设置下调试模式。

  在开发者工具中右上角的详情里,选择不校验http。(新版本开发者工具,具体位置在哪里去查一下)接下来我们来看服务器端的编写:

  首先我们要获得客户端给我们的username,这时我们要调用request的getParameter函数获取,参数就是数据的名字。如图,我们的变量name就得到了客户端发来的username的值,也就是"hhh"。

  之后,我们向客户端返回数据,依旧需要response来返回,记得close。如果你发送的数据过多,一个缓冲流不够用,可以用flush函数,先传送一批,再传送下一批。大家有兴趣自己查询,这里我们返回了“man”字符串,那么客户端的success函数的res.data就应该得到“man”。万事俱备,差你一鼠标。点击按钮吧。看看效果。

服务器得到username:“haha”(其他的输出是项目里的其他的测试内容,大家自行忽略)

  客户端获得服务器data:“man”:

  现在我们的小程序和服务器就建起了简单的链接,至于传什么数据,又做什么处理,就是你的问题了。

后记

  如今我们写web更多的会借助框架,java有spring或spring boot,python有Django和Flask等等,原理都是相同的。更多的是了解框架的哪一部分代替文中servlet的功能,逻辑又该如何编写。

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

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

相关文章

可视化数据看板/数字孪生大屏到底有没有实际价值?详解数据可视化的实用价值

数据驾驶舱/数据看板/可视化大屏的实际价值,取决于使用者的实际需求。华而不实?华就是实! 关于可视化大屏最广泛的争议,便是对其“华而不实”的批评,认为可视化大屏缺乏技术含量,只是一钟比较高级的“装饰品”,更是一种典型的“面子工程”。这种偏见乍一看似乎有其道理,…

osg使用整理(12):SSAO屏幕空间环境光遮蔽

一、基础概念 1、SSAO:通过将褶皱、孔洞和非常靠近墙面变暗的方法,近似模拟间接光照。SSAO称为屏幕空间环境光遮蔽 ,使用屏幕空间场景的深度而不是真实的几何体数据来确定遮蔽量,速度快效果好。2、实现原理:根据物体表面法线方向生成一个半球随机深度采样,主要看物体周围…

比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象?

本文主要分析了大学生电子计算机类比赛中“卷”“祖传老项目”“找关系”的现象,结合自身实践经验,给出了相应的解决方案。比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象? 正文 目前现状 对于大部分的比赛小白来说,对当前比赛的现…

2024.7.4 鲜花

今日推歌 natural Will you hold the line. 只有你还没有放弃。 When every one of them is giving up or giving in, tell me. 当其他所有人都停止了尝试,被挫折磨尽了希望。 In this house of mine,Nothing ever comes without a consequence or cost, tell me. 我所在之处,…

【python+selenium的web自动化】—— 控制浏览器

前言: 需本教程以Edge做测试,且谷歌、火狐等浏览器的逻辑都一样需要使用 selenium 模块操作 Edge 浏览器。 一、先通过pip install 模块 把selenium模块安装了,可以加一个中国源提升速度。pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple二、需要下载Edg…

Python自动化之控制浏览器

前言: 需本教程以Edge做测试,且谷歌、火狐等浏览器的逻辑都一样需要使用 selenium 模块操作 Edge 浏览器。 一、先通过pip install 模块 把selenium模块安装了,可以加一个中国源提升速度。pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple二、需要下载Edg…

设计模式-设计原则与设计模式总结

设计原则,是设计模式的基础。在实际开发中,并不是一定要求所有代码都遵循设计原则,我们需要综合考虑人力、时间、成本、质量,不是可以追求完美,要在设当的场景遵循合适的设计原则,体现的是一种平衡取舍,帮助我们设计出更加优雅的代码结构。 设计模式(Design Pattern)是前…

mirai Bot初始化配置

RT其实本来我的bot已经因为自己手贱登陆qq nt直接报废了,但是论坛里有佬提供了新的协议库,那这不赶紧复活bot都对不起这个新的协议库。 本文写于2024年7月4日19:20:21,可能随着时间久远而无法实现功能。由于存在下载障碍,所以这里也搞了个存档,本帖中的相关标星*资源无法下…

量化曲线的平滑程度

思路 1. 对原始数据一阶求导,得到一阶导数数组。 2. 对一阶导数数组求标准差。导数的标准差提供了导数值的波动性,标准差越小,曲线越平滑。 平滑曲线import numpy as np import matplotlib.pyplot as plt from matplotlib import font_manager fname="/usr/local/pytho…

Android常见错误

错误1 A problem occurred configuring root project ����ʶ��. > Could not resolve all files for configuration :classpath.> Could not resolve com.android.tools.build:gradle:8.4.0.Required by:project : > com.android.application:com.android.appli…

MyBatis中的Where标签:提升你的SQL查询效率

哈喽,大家好,我是木头左!理解MyBatis的Where标签 MyBatis是一款优秀的持久层框架,它提供了许多强大的标签来帮助编写更优雅、高效的SQL语句。其中,<where>标签是使用频率极高的一个,它能够自动处理查询条件,使得的SQL语句更加简洁和高效。在这篇文章中,将深入探讨…

Java中的JSON神器,如何轻松玩转复杂数据结构

哈喽,大家好,我是木头左!一、揭秘JSON世界的基石 在Java的世界中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于文本,易于阅读和编写,同时也易于机器解析和生成。JSON在日常开发中的应用非常广泛,无论是前后端的数据交互,还是配置文件的读取,…

《Python 第三方模块包安装指南》

在 Python 编程中,第三方模块包极大地丰富了其功能,让我们能够更高效地完成各种任务。下面将为您详细介绍如何安装 Python 的第三方模块包。 一、使用 pip 命令安装 pip 是 Python 的包管理工具,大多数情况下,我们可以通过以下命令来安装第三方模块包:pip install 模块包名…

巴图自动化Modbus转PN网关模块连智能仪表与PLC通讯

通过巴图自动化Modbus转Profinet协议网关模块,实现PLC对仪表设备的远程监控和数据传输,提高生产效率和运行稳定性。巴图自动化Modbus转Profinet协议转换BT-MDPN100网关模块的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus 转 Profinet协议网关模块集成了M…

一文搞懂到底什么是 AQS

日常开发中,我们经常使用锁或者其他同步器来控制并发,那么它们的基础框架是什么呢?如何实现的同步功能呢?本文将详细用白话讲解构建锁和同步器的基础框架--AQS,并根据源码分析其原理。前言 日常开发中,我们经常使用锁或者其他同步器来控制并发,那么它们的基础框架是什么…

flutter状态管理 provider使用

provider是flutter官方推荐的状态管理插件,是基于InheritedWidget实现的。 下面我们来讲一个provider的使用方法。 1.在pubspec.yaml文件中添加 provider: ^6.1.2 开发文档:https://pub-web.flutter-io.cn/packages/provider 可以查看使用方法和最新版本号。 添加完成后…

企业数字化转型:顶层规划方法

随着数字化时代的到来,发生了以数字化、智能化为典型特征的新一轮科技革命,各行各业利用互联网、大数据、云计算、人工智能、区块链技术对传统产业进行全方位、全链条改造,实施“上云用数赋智”行动,全面推进各行业数字化转型。数字经济的大门已然开启,数字经济顶层战略规…

Nuxt3 的生命周期和钩子函数(十)

摘要:本文详细介绍了Nuxt3框架中的五个webpack钩子函数:webpack:configResolved用于在webpack配置解析后读取和修改配置;webpack:compile在编译开始前调用,可修改编译选项;webpack:compiled在编译完成后调用,可处理编译结果;webpack:change在开发模式下文件变化时触发,…

Jenkins汉化

1、Jenkins版本:版本2.426.3) Manage Jenkins->选择Plugins->切换到Availabled plugin->搜索local,然后选中安装,如下图所示 2、安装完成后重启Jenkins,汉化完成。如下图所示 像个小学生一样努力学习

模拟集成电路设计系列博客——9.1 比较器

模拟集成电路设计 9.1 比较器 比较器可能是继放大器之后第二常用的电路元件,比较器用于判断一个信号是否大于或小于零,或者比较一个信号是否大于另一个。如我们之前的章节所见,比较器在ADC中非常常用。在其他的应用中也经常出现比较器,例如数据传输,开关电源稳压器等等。 …