学了一段时间的小程序,现在记录一下

之前写了jsp和servlet之间是怎么传输数据和返回数据的,那么微信小程序和servlet是怎么进行交互的,前端怎么进入后台。
开发准备:
微信开发工具:4090
IDE: Eclipse Mars Release (4.5.0)
jdk:1.8.0_171
Tomcat:v7.0
MySQL:5.7(mysql-connector-java-5.1.26)

后台项目结构

新建com.syrinx.order包,结构如上图

1、建立连接类DBUtil

package com.syrinx.order;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DBUtil {static   private String classDriver;static   private String url;static   private String userName;static   private String passWord;static {try {ClassLoader classLoader = DBUtil.class.getClassLoader()InputStream is = classLoader.getResourceAsStream("jdbc.properties");  //通过字节输入流读取配置文件Properties props = new Properties();props.load(is); //加载配置文件//得到配置文件中的值classDriver = props.getProperty("classDriver");url = props.getProperty("url");userName = props.getProperty("userName");passWord = props.getProperty("passWord");} catch (IOException e) {e.printStackTrace();}}public static Connection getConnection() {Connection conn = null;try {Class.forName(classDriver);conn = DriverManager.getConnection(url, userName, passWord);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}
}

jdbc.propertices

#userName=root
#passWord=
classDriver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/syrinxsysorder?useUnicode=true&characterEncoding=UTF-8

2、建立user实体类

package com.syrinx.modules.video;
public class VideoBean {private int   id;private String title;private String videoUrl;private String imageUrl;private String downloadTimes;private String previewTimes;private String createTime;private String updateTime;private String headLine;private int  type_id;public int getType_id() {return type_id;}public void setType_id(int type_id) {this.type_id = type_id;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getHeadLine() {return headLine;}public void setHeadLine(String headLine) {this.headLine = headLine;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getVideoUrl() {return videoUrl;}public void setVideoUrl(String videoUrl) {this.videoUrl = videoUrl;}public String getImageUrl() {return imageUrl;}public void setImageUrl(String imageUrl) {this.imageUrl = imageUrl;}public String getDownloadTimes() {return downloadTimes;}public void setDownloadTimes(String downloadTimes) {this.downloadTimes = downloadTimes;}public String getPreviewTimes() {return previewTimes;}public void setPreviewTimes(String previewTimes) {this.previewTimes = previewTimes;}public String getCreateTime() {return createTime;}public void setCreateTime(String createTime) {this.createTime = createTime;}public String getUpdateTime() {return updateTime;}public void setUpdateTime(String updateTime) {this.updateTime = updateTime;}}

3、构造一个抽象类 userdao,声明抽象方法

public interface VideoDao {public List<VideoBean> VideoShow(int videoType,String searchContent,String videoFlag) throws Exception; public List<VideoBean> videoCaptionBar() throws Exception; //public List<VideoBean> videoSearch(String searchContent) throws Exception;
}

4、实现userdao的抽象方法,userdaoimpl

package com.syrinx.order;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;public class VideoDaoImpl implements VideoDao {DBUtil jdbc = new DBUtil();Connection conn = null;PreparedStatement ps = null;public List<VideoBean> VideoShow(int videoType, String searchContent, String videoFlag) throws Exception {// TODO Auto-generated method stubList<VideoBean> list = new ArrayList<VideoBean>();conn = jdbc.getConnection(); //在使用equals的时候,需要常量.equals(变量),如果变量.equals(“”)会报空指针异常if ("".equals(videoFlag) || videoFlag == null) {if ("".equals(searchContent) || searchContent == null) {if (videoType == 1) {String sql = "select id,video_url,cover_image, title,type_id  from material_video where show_flag='1' and video_type='1'";ps = conn.prepareStatement(sql);System.out.println(sql);} else {String sql = "select id,video_url,cover_image, title,type_id from material_video "+ " where show_flag='1' and video_type='1' and type_id =" + videoType;ps = conn.prepareStatement(sql);System.out.println(sql);}} else {String sql = "select id,video_url,cover_image, title,type_id from material_video "+ " where show_flag='1' and video_type='1' and title like '%" + searchContent + "%' ";ps = conn.prepareStatement(sql);System.out.println(sql);}}else if(videoFlag.equals("2")){//else {String sql = "select id,video_url,cover_image, title,type_id  from material_video where show_flag='1' and video_type='2'";ps = conn.prepareStatement(sql);System.out.println(sql);}ResultSet rs = ps.executeQuery();while (rs.next()) {VideoBean video = new VideoBean();video.setId(rs.getInt("id"));video.setTitle(rs.getString("title"));video.setVideoUrl(rs.getString("video_url"));video.setImageUrl(rs.getString("cover_image"));video.setType_id(rs.getInt("type_id"));list.add(video);}//list相当于集合,循环的放入,循环取出/**   VideoBean video = new VideoBean();List<OrderUser> list = (List<OrderUser>) request.getAttribute("list");for(video:list){String name=video.getName()
}**/rs.close();ps.close();conn.close();return list;}
}

4、servlet的编写

servlet是前端和后台打交道的,前端把请求发给servlet,servlet再把需求交给dao处理
首先我们看一下怎么处理前端得到数据的

package com.syrinx.modules.video;
import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.mysql.fabric.xmlrpc.base.Data;
import com.syrinx.modules.comment.CommentBean;
import com.syrinx.modules.comment.CommentDao;
import com.syrinx.modules.comment.CommentDaoImpl;/*** Servlet implementation class VideoServlet*/
@WebServlet("/VideoServlet")
public class VideoServlet extends HttpServlet {private static final long serialVersionUID = 1L;public VideoServlet() {super();// TODO Auto-generated constructor stub}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");//通过对应的方法,交给一个servlet中不同的方法进行处理String methodName = request.getParameter("method");if(methodName.equals("doVideoShow")){doShow(request, response);}else if(methodName.equals("comment")){doComment(request, response);}}protected void doShow(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String name=request.getParameter("name");  //得到前端传过来的数据//request.getParameter 得到的只能是String类型的值,所以前端需要把值转成String,如果传过来的值不是String,则得到是nullint videoType = Integer.parseInt(request.getParameter("videoType"));//转化成intString searchContent = request.getParameter("searchContent");VideoDao od = new VideoDaoImpl();List<VideoBean> list = new ArrayList<VideoBean>();List<VideoBean> captionBar = new ArrayList<VideoBean>();try {list = od.VideoShow(videoType, searchContent,videoFlag);captionBar = od.videoCaptionBar();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}Writer out = response.getWriter();if (list != null && list.size() > 0) {
//          Map<String, Object> result = new HashMap<String, Object>();
//          result.put("video", list);
//          result.put("msg", "1111111111111111111111111111111111111");
//          result.put("captionBar", captionBar);
//          String jsonStr = new Gson().toJson(result);  //转成josn字符串(分两种,一种是对象型,一种是数组型)  可用的/**map是key-value的键值对,value可以是对象,集合,int
josn字符串--------------{"msg":"1111111111111111111111111111111111111","captionBar":[{"headLine":"全部","id":1,"type_id":0},{"headLine":"你问我答","id":2,"type_id":0},{"headLine":"经销商分享","id":5,"type_id":0},{"headLine":"销售知识","id":6,"type_id":0},{"headLine":"产品知识","id":7,"type_id":0},{"headLine":"其他","id":8,"type_id":0}],"video":[{"id":1,"imageUrl":"https://m.isyrinx.cn/images/materialImg/videoCoverImg/1.jpg","title":"酵素养生1—食物与消化系统的关系?","type_id":2,"videoUrl":"https://m.isyrinx.cn/videos/1.mp4"},{"id":82,"imageUrl":"https://m.isyrinx.cn/images/materialImg/videoCoverImg/v520190803-1.jpg","title":"客户如何转型做电商","type_id":5,"videoUrl":"https://m.isyrinx.cn/videos/v520190803-1.mp4"}]}----------------------
把map转化成josn字符串,得到的是对象型字符串,"captionBar",”list“ 里面又是一个数组型型字符串,怎么取值,我们在小程序端的时候讲**/        /**两种方案,一种使用Gson(),一种使用JSONObject(),这个使用的时候,不需要map**/JSONObject result = new JSONObject();   //放值的话直接使用josn.put()result.put("video", list);result.put("msg", "1111111111111111111111111111111111111");result.put("captionBar", captionBar);String jsonStr=JSONObject.toJSONString(result);//反系列是JSONObject obj = JSONObject.parseObject(commentArray)  把对象型字符串转成josn对象System.out.println("成功");   //微信小程序通过res.data得到josn字符串,具体res.data.msgout.write(jsonStr);//write():仅支持输出字符类型数据,字符、字符数组、字符串等  通过这个把数据给小程序端,很重要System.out.println(jsonStr);} else {Map<String, Object> result = new HashMap<String, Object>();result.put("msg", "ASDA");String json = new Gson().toJson(result);out.write(json);}System.out.println(videoType);System.out.println(searchContent + "12515");System.out.println(videoFlag);out.flush();out.close();}protected void doComment(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {boolean flag=false;SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式String createData =df.format(new Date());String formData = request.getParameter("formData");//得到json对象字符串,需要在小程序端定义成对象字符串CommentBean comment =new CommentBean();JSONObject obj = JSONObject.parseObject(formData);//把json对象字符串解析成josn对象数据/**在json数据中得到key为commentArray的json数组字符串,解析成json数组
formData:对象型字符串,所有需要转成josnobject,然后通过key取出其中的值
{"vid":"2","comment_count":3,"commentArray":[{"avatar":"https://wx.qlo","nickName":"月牙","userID":"sq228374","openId":"oSFrc4teDjuuL-QNkBDY2XUOLG-E","comment_content":"adsadada"}]}
**/JSONArray obj1=JSONArray.parseArray(obj.getString("commentArray"));/**System.out.println(obj.getString("commentArray"));  得到的是数组型字符串,所以需要转成josnArray,才能取出其中的值
obj1.getString(0)得到的是对象型字符串
**/JSONObject obj2= JSONObject.parseObject(obj1.getString(0));//把json数组字符串中的第一行转成json对象型字符串,然//后转成josn对象 System.out.println(obj.getString("vid"));    System.out.println(obj2.getString("nickName"));System.out.println(formData);System.out.println(obj.getString("vid"));System.out.println(obj2.getString("nickName"));System.out.println(obj2.getString("openId"));comment.setVideo_id(obj.getString("vid"));comment.setNickName(obj2.getString("nickName"));comment.setUser_id(obj2.getString("userID"));comment.setOpenId(obj2.getString("openId"));comment.setContent(obj2.getString("comment_content"));comment.setAvatarUrl(obj2.getString("avatar"));comment.setCreateTime(createData);//在dao成构造对象,调用方法CommentDao od = new CommentDaoImpl();try {flag=od.commentInsert(comment);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}Map<String, Object> result = new HashMap<String, Object>();Writer out = response.getWriter();result.put("msg", flag);String json = new Gson().toJson(result);out.write(json);out.close();out.flush();}}

小程序端

//小程序提供了访问后台的接口wx.request({url: app.globalData.videoServlet + 'CommentServlet?method=comment', //后台路径//传入到后台的数据,如果不是string类型,需要转成成join字符串data: {formData: JSON.stringify(formData),  //josn对象commentArray: JSON.stringify(that.data.commentArray) //josn数组},method: 'post',header: {//  'Content-Type': 'application/json''content-type': 'application/x-www-form-urlencoded',},success: function(res) {console.log('POST success!!')//  let temp = res.data.success//   console.log(res.data) //这里查看结果输出console.log(res.data.msg)  //得到后台返回的数据},fail: function() {console.log('POST failed!!')}})} else {that.setData({content: "" //清空文本域值})}}, 100)},

微信小程序与servlet交互相关推荐

  1. 鸿蒙与微信小程序,鸿蒙远程交互应用 vs 微信小程序远程交互应用

    原标题:鸿蒙远程交互应用 vs 微信小程序远程交互应用 鸿蒙的远程交互组件应用相对复杂,访问网络时,首先要配置网络权限,华为官方文档有问题,在此引用我老师配置的模板,见附件. 过程: 导入鸿蒙的网络请 ...

  2. 微信小程序前后端交互案例

    微信小程序前后端交互案例 首先声明一下,本人也是一个初学者(下面的案例可能会有很多不完整或说的不正确的,所以只能起到参考作用,千万不要拿我的话当标准). 我是纯自学,之前在前后端交互方面一直搞不懂,所 ...

  3. 微信小程序之界面交互API07

    微信小程序之界面交互API07 关于界面交互,在官方文档上提供了API来 wx.showToast(Object object) 土司(只有提示,会在延迟时间过后消失)! 显示消息提示框 参数 Obj ...

  4. 微信小程序之数据交互

    学习视频: https://www.bilibili.com/video/BV1Gv411g7j6?p=88&spm_id_from=pageDriver 数据交互(首页) 把图片.视频资源放 ...

  5. 微信小程序与后端交互(ssm)

    2020-5-18更新 最近因为要用微信小程序和java后端(ssm框架)做一个云笔记的软件,因为刚刚接触小程序,在网上查了许多资料.首先,看视频学了点小程序中wxml.js.wxss.json这些类 ...

  6. 微信小程序与oracle交互,微信小程序和web之间的交互

    背景 通常我们写了一套自适应的web程序,想在多种环境中使用.比如app里,微信小程序里,各种app分享中, 假如只是能使用app浏览,问题不大,但是要在被嵌入app里面和app本身交互,就要做各种折 ...

  7. 微信小程序前后端交互__完整的登录注册

    简介 微信小程序连接后端,后端的代码放的位置随便,后端运行之后,微信小程序模拟器会自动匹配 微信小程序官方文档给出的发起 HTTPS 网络请求的示例代码为 wx.request({url: 'exam ...

  8. java ssm框架调用微信,微信小程序实现前后台交互(后台使用ssm框架)

    微信小程序前端代码 : index.js中page的onload函数. onLoad: function () { wx.request({ url: 'http://localhost:8080/B ...

  9. Java后台与微信小程序的数据交互

    想把自己写的一个小项目转成微信小程序,主要是因为小程序比较火,而且自己想学一下小程序的东西,所以抱着初学者的心态开始了这个痛苦的旅程.看过小程序的一点视频,个人感觉和HTML,css,js差不多,甚至 ...

最新文章

  1. 在ActionBar显示ShareActionProvider分享文本,点击可以打开进行分享(19)
  2. python下载保存_下载并保存图片Python2.7
  3. Leaflet中加载Geoserver发布的WMS服务显示地图
  4. mysql 用户名中主机$_phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接。您应当检查配置文件中的主机、用户名和密码,...
  5. php连接mysql并读取数据
  6. java rest框架_比较Java REST文档框架
  7. 重温1 Android系统架构及版本
  8. 前端学习(3147):react-hello-react之getBeforeUpdate
  9. json字符串,JSON对象,JSON数组的区别与相互转换
  10. 万字教你如何用 Python 实现线性规划
  11. linux系统装好后优化,CentOS 5.6 Linux安装系统后的基本优化
  12. 一篇关于蓝牙SDP和L2CAP协议的文章
  13. rsync for windows 详细使用教程
  14. 基于nRF24L01的一对多节点通信(一收多发)
  15. project项目管理软件の版本区别?
  16. 为什么很多视频一模一样,也没有被判定为搬运?
  17. 红米4手机(其它小米应该一样)adb 调试(usb ,tcp)
  18. yytextview多种格式_YYTextView使用笔记
  19. 【操作系统】主存空间的分配和回收
  20. iOS地图定位导航与大头针的简单使用

热门文章

  1. 初识python之概念认知篇
  2. 一网打尽Mac上的高效工具 - 效率工作篇(附演示视频)
  3. Redis容量预估工具
  4. 徒手攀登酋长岩,世界第一人!
  5. kubeadm安装部署k8s(1)
  6. can not be named yunan because its located directly under the workspace root
  7. ValueError: The field admin.LogEntry.user was declared with a lazy reference to ‘MyApp.sysusers‘
  8. 常用快递API(顺丰、EMS、申通、圆通等)及快递在线下单API分享
  9. 因果倒置的实验名称是“延迟实验”(Wheeler's delayed choice experiment)
  10. 51单片机入门学习------环境搭建