微信小程序练手实战:前端+后端(Java)

2023-10-30

1.  前言

现在微信小程序越来越火了,相信不少人都通过各种途径学习过微信小程序或者尝试开发,作者就是曾经由于兴趣了解开发过微信小程序,最终自己的毕业设计也是开发一个微信小程序。所以现在用这篇博客记录我之前开发的一些经验和一些心得吧。

2.  主要内容

  • springboot后端架构构建

  • 小程序项目构建

  • 小程序api调用

  • 后台resetful接口编写

  • 小程序调用后台接口

  • 免费的https申请

  • linux下部署上线

3.  微信小程序项目构建

这些基础的东西我就不过多介绍,大家在刚开始开发的时候一般都没有自己的服务器及域名,所以大家在本地编写的时候,在“详细”下的“项目设置”里面将“不校验域名安全性”勾选。

这里写图片描述

至于微信小程序的组件,即前端页面的开发希望大家耐住寂寞认真在微信开发平台上,

组件

https://developers.weixin.qq.com/miniprogram/dev/component/

api:

https://developers.weixin.qq.com/miniprogram/dev/api/

4.  后端详解

我在后端编写主要是用java,当然对其他开发语言熟悉的也可以使用其他语言开发后端。现在我就java编写后端api的讲解。主要框架springboot,开发工具myeclipse,服务器阿里云服务器。

创建一个maven项目,导入相关依赖:

pom.xml依赖

<!-- 统一版本控制 -->
<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.9.RELEASE</version>
</parent>
<dependencies>
 <!-- freemarker渲染页面 -->
 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-freemarker -->
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-freemarker</artifactId>
 </dependency>

 <!-- spring boot 核心 -->
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

 <!-- springboot整合jsp -->
 <!-- tomcat 的支持. -->
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
   <exclusion>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
   </exclusion>
  </exclusions>
 </dependency>

 <dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
 </dependency>
</dependencies>

在配置文件src/main/resources/下创建application.properties文件可以修改一些配置参数等。

#jsp支持
spring.mvc.view.suffix=.jsp
spring.mvc.view.prefix=/WEB-INF/jsp/
#this is set port
#server.port=80
server.port=443
#添加ssl证书
#ssl证书文件名
server.ssl.key-store=classpath:xxxxxxx.pfx
server.ssl.key-store-password=xxxxxxxx
server.ssl.keyStoreType=xxxxxxxx

在实际项目中可能涉及数据库,还要整合mybatis,在文章中,我仅仅做测试就不做使用数据库的测试。

首先创建springboot的入口程序:app.class下面贴上代码:

@ComponentScan(basePackages= "com.bin")//添加扫包@ComponentScan(basePackages= "")
@EnableAutoConfiguration
public class App{

 //启动springboot
 public static void main(String[] args) {
  SpringApplication.run(App.class, args);
 }
}

启动项目时直接右击run即可。

在写一个测试的controller进行微信小程序与java后端实现通信,controller代码如下:

@RestController
@SpringBootApplication
public class ControllerText {
 
 @RequestMapping("getUser")
 public Map<String, Object> getUser(){
  System.out.println("微信小程序正在调用。。。");
  Map<String, Object> map = new HashMap<String, Object>();
  List<String> list = new ArrayList<String>();
   list.add("zhangsan");
   list.add("lisi");
   list.add("wanger");
   list.add("mazi");
   map.put("list",list);
  System.out.println("微信小程序调用完成。。。");
  return map;
 }
 
 @RequestMapping("getWord")
 public Map<String, Object> getText(String word){
  Map<String, Object> map = new HashMap<String, Object>();
  String message = "我能力有限,不要为难我";
  if ("后来".equals(word)) {
   message="正在热映的后来的我们是刘若英的处女作。";
  }else if("微信小程序".equals(word)){
   message= "想获取更多微信小程序相关知识,请更多的阅读微信官方文档,还有其他更多微信开发相关的内容,学无止境。";
  }else if("西安工业大学".equals(word)){
   message="西安工业大学(Xi'an Technological University)简称”西安工大“,位于世界历史名城古都西安,是中国西北地区唯一一所以兵工为特色,以工为主,理、文、经、管、法协调发展的教学研究型大学。原中华人民共和国兵器工业部直属的七所本科院校之一(“兵工七子”),陕西省重点建设的高水平教学研究型大学、陕西省人民政府与中国兵器工业集团、国防科技工业局共建高校、教育部“卓越工程师教育培养计划”试点高校、陕西省大学生创新能力培养综合改革试点学校。国家二级保密资格单位,是一所以\"军民结合,寓军于民\"的国防科研高校。";
  }
  map.put("message", message);
  return map;
 }
 
 @RequestMapping("")
 public String getText(){
  return "hello world";
 }

}

至此简易的后端框架及测试基本完成。

说明:@RestController与@Controller注解的区别@RestController相当于两个注解,它能实现将后端得到的数据在前端页面(网页)中以json串的形式传递。而微信小程序与后台之间的数据传递就是以json报文的形式传递。所以这就是选择springboot框架开发小程序后端的主要原因之一。可以方便我们进行小程序的后端开发。

5.  小程序发起网络请求

在完成了小程序的后端开发,下面进行小程序端发起网络请求。

下面以一个简单的按钮请求数据为例:

wxml文件

<button bindtap='houduanButton1'>点击发起请求</button>
<view wx:for="{{list}}">
    姓名:{{item}}
  </view>

js文件

 /**
   * 页面的初始数据
   */
  data: {
    list: '',
    word: '',
    message:''

  },
  houduanButton1: function () {
    var that = this;
    wx.request({
      url: 'http://localhost:443/getUser',
      method: 'GET',
      header: {
        'content-type': 'application/json' // 默认值
      },
      success: function (res) {
        console.log(res.data)//打印到控制台
        var list = res.data.list;
        if (list == null) {
          var toastText = '数据获取失败';
          wx.showToast({
            title: toastText,
            icon: '',
            duration: 2000
          });
        } else {
          that.setData({
            list: list
          })
        }
      }
    })
  }

主要调用的api就是wx.request,想知道将详细的介绍大家可以去微信公众平台。

接下来以搜索类型的请求为例:

wxml文件:

 <input type="text" class="houduanTab_input" placeholder="请输入你要查询的内容" bindinput='houduanTab_input'></input>
  <button bindtap='houduanButton2'>查询</button>
  <view wx:if="{{message!=''}}">
    {{message}}
  </view>

js文件:变量的定义见上一个js文件

//获取输入框的内容
  houduanTab_input: function (e) {
    this.setData({
      word: e.detail.value
    })
  },
  // houduanButton2的网络请求
  houduanButton2: function () {
    var that = this;
    wx.request({
      url: 'http://localhost:443/getWord',
      data:{
        word: that.data.word
      },
      method: 'GET',
      header: {
        'content-type': 'application/json' // 默认值
      },
      success: function (res) {
        console.log(res.data)//打印到控制台
        var message = res.data.message;
        if (message == null) {
          var toastText = '数据获取失败';
          wx.showToast({
            title: toastText,
            icon: '',
            duration: 2000
          });
        } else {
          that.setData({
            message: message
          })
        }
      }
    })
  }

至此已经完成了简易的微信小程序端与java后端进行通信。

现在可以在启动后端项目在微信开发工具上进行测试。

演示效果:

这里写图片描述

所以至此已经完成了小程序的前后端通信。

6.  https申请

其实也不算什么申请,在购买域名之后可以申请免费的ssl证书,在前面的配置文件application.properties中有证书的配置,将证书的pfx文件直接添加到后端项目下即可。

7.  购买服务器部署后端api代码

对于springboot项目,本人建议打jar,直接在服务器上部署即可,在服务器上只需要安装对应版本的jdk即可。项目部署命令:

我购买的是阿里云的轻量级应用服务器部署的。比较划算吧。

运行命令:

 nohup java -jar helloworld.jar &

nohup的意思不挂服务,常驻的意思,除非云服务器重启,那就没法了;最后一个&表示执行命令后要生成日志文件nohup.out。

当然还可以使用java -jar helloworld.jar

源码:

链接: https://pan.baidu.com/s/1PfByFfEgqkVALcc3PRhn9w 提取码: c7yf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序练手实战:前端+后端(Java) 的相关文章

  • 清理码头 - 删除“不必要”的东西

    我习惯用Jetty http jetty codehaus org jetty 作为我的网络容器 我对我做了什么安装步骤得到原始的焦油球并且清理一些目录和文件从中 我在这里想提出的是 您通常从 Jetty 中删除什么以在生产 登台环境中使用
  • 无法解析类型为 xxx 的任何 bean;限定符:[@javax.enterprise.inject.Any()]

    我有一个 LoginProvider 接口 public interface LoginProvider boolean login String username String password 以及两种不同的实现 public clas
  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • Spring安全“记住我”cookie在第一个请求中不可用

    我无法在登录请求后检索 Spring 记住我 cookie 但它在对受保护页面的下一个请求中工作正常 谁能告诉我怎样才能立即得到它 我在登录请求中设置了记住我的 cookie 但在 Spring 重定向回原始 受保护的 url 后无法检索它
  • 在 HTTP 标头中发送 UTF-8 值会导致 Mojibake

    我想使用 servlet 发送阿拉伯语数据HTTPServletResponse给客户 我正在尝试这个 response setCharacterEncoding UTF 8 response setHeader Info arabicWo
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 具有共享依赖项的多模块项目的 Gradle 配置

    使用 gradle 制作第一个项目 所以我研究了 spring gradle hibernate 项目如何组织 gradle 文件 并开始制作自己的项目 但是 找不到错误 为什么我的配置不起作用 子项目无法解决依赖关系 所以项目树 Root
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • Java &= 运算符应用 & 或 && 吗?

    Assuming boolean a false 我想知道是否这样做 a b 相当于 a a b logical AND a is false hence b is not evaluated 或者另一方面 这意味着 a a b Bitwi
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett

随机推荐

  • 2 Swagger3 HelloWorld实现 结合SpringBoot2

    第一步 我们新建一个SpringBoot项目 加一个Spring Web依赖 加下Swagger依赖
  • [管理与领导-85]:IT基层管理者 - 核心技能 - 高效执行力 - 10 - 高效执行力的9个段位

    目录 前言 一段 准确执行 快速反应 坚决执行 态度很重要 二段 结果导向 苦劳过后 有功劳 有结果很重要 三段 有始有终 主动反馈 有始有终 即时汇报 不断改进 持续很重要 四段 结果到位 做事提前量 超越期望 提前和可预期很重要 五段
  • sun m4000 服务器文档,文档2、安装配置sun enterprise m4000主机.doc(13页)-原创力文档...

    青州码头小型机项目实施方案 Solaris 10 U7 Oracle 10g ZFS Sun Cluster 3 2 U2 文档二 安装配置SUN Enterprise M4000 主机 一 配置M4000 主机控制卡 管理控制台 1 使用
  • 芯片设计中的时钟与约束

    1 同步电路与异步电路 首先来谈谈同步电路与异步电路 那么首先就要知道什么是同步电路 什么是异步电路 对于同步时序电路 不同的文章有不同的说法 大致有下面的定义方法 对于比较严格的定义 一个电路是同步电路 需要满足一下条件 每一个电路元件是
  • phpMyAdmin配置与安装 (适用于CentOS7)

    一 LNMP或LAMP的配置 phpMyAdmin运行在该架构中 注 php fpm出厂默认使用者和拥有者为apache 所以相比较来说LAMP更适合 本例以LNMP为架构 1 nginx安装 并设置开机自启动 root cy ed03 l
  • 【React】React路由概念

    文章目录 1 路由概述 1 1 后端路由 1 2 前端路由 2 SPA 3 前端路由两种模式 3 1 hash模式 3 2 history模式 1 路由概述 路由 简单来说 路由是根据不同的url地址展示不同的内容或页面 一个路由就是一个映
  • echarts x坐标文字换行显示

    xAxis type category data axisLabel 坐标轴刻度标签的相关设置 interval 0 显示一竖条 formatter function value return value split join n 一行显示
  • 给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。

    给定一个数组nums 编写一个函数将所有0移动到数组的末尾 同时保持非零元素的相对顺序 要求 1 必须在原数组上操作 不能拷贝额外的数组 2 尽量减少操作次数 3 注意时间空间复杂度 输入 0 1 0 3 12 输出 1 3 12 0 0
  • Linux文件权限分段说明

    Linux文件权限分段说明 Linux中的文件属性权限描述一共10位长度 并分为四段 如 rwxrwx 一共十位 第一段占一位 代表文件类型 其中例子中的 代表普通文件 其余的表示还有 文件类型部分 文件 d 文件夹 l 链接文件 可以理解
  • nginx解析PHP特卡,nginx解析PHP程序报错的解决方案

    root server 2 log tail f nginx error log 2019 07 31 01 51 02 error 26151 0 52 FastCGI sent in stderr Primary script unkn
  • Springboot 文件处理导入导出

    简单记录下使用Springboot进行文件与后端交互 excel前台导出等内容 这里用到了 elelemt ui HTML vue Springboot框架 一 后台导入 HTML
  • VBS加载微软网页控件webview2(Edge-Chromium谷歌内核)

    VBS加载微软网页控件webview2 Edge Chromium谷歌内核 VBA加载Webview2浏览器内核 代替了ie的webbrowser控件 效果类似 资源 VBS加载webview2控件代替ie的webbrowser Edge
  • Oracle UTL_HTTP(收集汇总有用资料)

    From Oracle The UTL HTTP package makes Hypertext Transfer Protocol HTTP callouts from SQL and PL SQL You can use it to a
  • shell脚本中任意输入三个数,输出最大值

    Linux下用shell脚本任意输入三个数 输出最大值 bin bash read p 请输入第一个数 n1 read p 请输入第二个数 n2 read p 请输入第三个数 n3 max n1 if n2 gt max then max
  • 同态加密简介

    同态加密概述 基本概念 同态加密 Homomorphic Encryption HE 指将原始数据经过同态加密后 对密文进行特定的运算 得到的密文计算结果在进行同态解密后的得到的明文等价于原始明文数据直接进行相同计算所得到的数据结果 历史与
  • 快速加入Health Kit,一文了解审核流程

    HUAWEI Health Kit是为华为生态应用打造的基于华为帐号和用户授权的运动健康数据开放平台 在获取用户授权后 开发者可以使用Health Kit提供的开放能力获取运动健康数据 基于多种类型数据构建运动健康领域应用与服务 为用户打造
  • axios实现本地缓存

    import axios from axios 线上数据库 axios defaults baseURL XXXXXXXXXXXXX 测试数据库 axios defaults baseURL http 192 168 1 25 8080 a
  • QMap和std::map的遍历

    两种遍历方式都使用迭代器 1QMap使用Iterator key 和Iterator value 方法获取第一个或第二个元素的值 而std map使用Iterator gt first Iterator gt second 来获取第一个或第
  • 为什么把系统带宽定义为-3dB?

    原文来自公众号 工程师看海 为什么把系统带宽定义为 3dB 对于我们常说的电路带宽或系统带宽 指的是增益为 3dB时的频率点 为什么选 3dB呢 对于带宽我们可以粗暴的理解为 系统的有效频率范围小于 3dB时的频点 简单来说 比如一个系统
  • 微信小程序练手实战:前端+后端(Java)

    1 前言 现在微信小程序越来越火了 相信不少人都通过各种途径学习过微信小程序或者尝试开发 作者就是曾经由于兴趣了解开发过微信小程序 最终自己的毕业设计也是开发一个微信小程序 所以现在用这篇博客记录我之前开发的一些经验和一些心得吧 2 主要内