网站首页 > 技术文章 正文
1.背景简介
我在在专栏《Vue.js极速入门精要》最后一节,介绍了如何正Vuejs、axios以及Jackson来实现动态的加载数据并在前端展示,但并没有介绍如何通过Vue数据模型实现对行前端数据的提交和持久化。
这一节内容主要是实现对组织部门信息的持久化,主要是利用Vue数据模型、ajax封装库axios以及Jackson(Jackson详情请参考我另一专栏《深入浅出JSON与Jackson》)。部门信息主要包括:部门标识、部门名称、上级部门以及部门描述。下面我们就开始本实战应用案例介绍。
我们还是边学边练。
2.项目环境构建
第一步:构建项目
基于Eclipse,创建web工程,并导入Jackson库。
提示:当然你可以用Maven的方式来构建项目,并在pom中添加如下依赖
<dependency>
??????????? <groupId>com.fasterxml.jackson.core</groupId>
??????????? <artifactId>jackson-databind</artifactId>
??????????? <version>2.9.10</version>
</dependency>
项目会自动到导入Jackson相关的库:
1) jackson-annotations-2.9.10.jar
2) jackson-core-2.9.10.jar
3) jackson-databind-2.9.10.jar
项目的Java版本为Java 8,构建的项目结果如下:
第二步,为项目添加js库:vuejs和axios
这里建议直接下载Vue和Axios库,并添加到js目录下。下载地址分别为:
Vuejs:https://cn.vuejs.org/v2/guide/installation.html
Axios:https://github.com/axios/axios/
也可通过CDN来导入相应的库:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
3.创建输入信息表单页面
本项目是直接下载了两个js库并放置在根目录下的static目录下的子目录js中。
第一步:创建页面命名为index.html,编写页面文件代码,如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vue+Axios持久化示例</title>
<link href="static/css/bulma.min.css" rel="stylesheet">
?
</head>
<body style="margin:10px;">
??? <h1>Vue+Axios+Java Web实现数据持久化示例</h1>
?
??? <fieldset>
??????? <legend>部门信息</legend>
??????? <div id="sbtForm">
??????? <!-- <form id="myDepart"? > -->
??????????? <div id="xDepart">
??????????????? <label>编号:</label><input v-model="dptObject.dptId"
?????????????????? placeholder="输入大于200的数字">
??????????????? <label>名称:</label><input
?????????????????? v-model="dptObject.dptName" placeholder="输入部门名称">
??????????????? <label>上级:</label><input
?????????????????? v-model="dptObject.dptParent" placeholder="输入上级部门编号">
??????????????? <label>类型:</label>
??????????????? ? <select v-model="dptObject.dptType">
??????????????? ??? <option v-for="option in options" v-bind:value="option.value">
??????????????? ??? {{ option.text }}
??????????????? ??? </option>
??????????????? ?</select>
??????????????? <button class="button is-success is-rounded" v-on:click="subdata()"> 保持信息</button>
??????????? </div>
??????????? {{dptObject.dptName}}
??????????? <span style="color:red">--{{result}}</span>
??????? <!-- </form> -->
??????? </div>
??? </fieldset>
???
</body>
?
</html>
第二步:引入Vue和axios框架包,并修改页面代码如下:
<!—导入Vuejs -->
<script src="static/js/vue.js"></script>
<!—导入Ajax框架axios -->
<script src="static/js/axios.js"></script>
<!—创建Vue实例并axios的ajax提交方法 -->
<script type="text/javascript">
?
Vue.prototype.$axios = axios; //注册为Vue的全局实例
?
new Vue({
??? el:"#sbtForm",
??? data:{?
??? ? result:"",
? ? ??dptObject:{"dptId":0,"dptName":"","dptParent":0,"dptType":"独立机构"},
? ? ??options:[
? ? ??????{ text: '独立机构', value: '独立机构' },
? ? ??????{ text: '直属部门', value: '直属部门' },
? ? ??????{ text: '分支机构', value: '分支机构' },
? ? ??????{ text: '子级部门', value: '子级部门' }
? ? ????],
??? },
??? methods:{??????
??????? subdata:function(){
??????? ? let s = this; //指向Vue实例本身,否则this指向了调用对象
??????? ? axios.post('dataSDemo',s.dptObject)
??????? ?????? .then(function (response) {
??????? ??? ???s.result = response.data;
??????????? ????? ?console.log(response);
??????? ??????? })
??????? ?????? .catch(function (error) {
??????? ???????? console.log(error);
??????? ??????? });
??????? },
??? }
});
?
?
</script>
代码说明:
上述代码中,在创建Vue实例时,定义了几个选项,主要是data选项和methods选项,其中data中result表示结果,dptObject表示需要持久化的部门对象,methods中定义类ajax提交方法subdata。Axios的post方法是一个样板化的代码,其中dataAjaxService为后台服务Servlet的URL。axios详情可以参考:https://github.com/axios/axios#example
4.创建数据持久化服务对象
为了简便起见,本示例没有真正连接数据库,而是模拟了数据存储操作,以单例模式实现DataServiceProvider,主要包括这样介个方法:
注意:Depart类和DataServiceProvider类详情,请参考专栏《Vue.js极速入门精要》最后一节。
5.创建后台服务类
创建后台Servlet,使其解析并处理有axios以ajax方式提交的数据。代码如下:
package com.newdayedu.demo.restful;
?
import java.io.BufferedReader;
import java.io.IOException;
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.newdayedu.demo.entity.Depart;
import com.newdayedu.demo.service.DataServiceProvider;
?
?
@WebServlet(name = "dataAjaxService", urlPatterns = { "/dataAjaxService" })
public class DataRestfulService extends HttpServlet {
???????? private static final long serialVersionUID = 1L;
?
???????? protected void doGet(HttpServletRequest request, HttpServletResponse response)
????????????????????????? throws ServletException, IOException {
?????????????????
????????????????? String httpMethod = request.getMethod();
?
????????????????? response.setContentType("application/json;charset=UTF-8");
?
????????????????? DataServiceProvider data = DataServiceProvider.getDataProvider();
?
????????????????? if (httpMethod.equalsIgnoreCase("post")) {
????????????????????????? String result = "Unkown";
????????????????????????? String json =readJSONString(request) ;
????????????????????????? Depart d = data.toXObject(json);
????????????????????????? data.addDepart(d);
????????????????????????? response.getWriter().append("{\"result\":\"成功保存\","+json+"}");
????????????????????????? System.out.println("Send JSON Data:\n" + data.toJSON(d));
????????????????????????? response.flushBuffer();
????????????????? }
???????? }
?
???????? /**
???????? ?* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
???????? ?*????? response)
???????? ?*/
???????? protected void doPost(HttpServletRequest request, HttpServletResponse response)
????????????????????????? throws ServletException, IOException {
????????????????? doGet(request, response);
???????? }
???????? //post的json数据以流的形式发送到后端
???????? private static String readJSONString(HttpServletRequest request) {
????????????????? StringBuffer json = new StringBuffer();
????????????????? String line = null;
????????????????? try {
????????????????????????? BufferedReader reader = request.getReader();
????????????????????????? while ((line = reader.readLine()) != null) {
?????????????????????????????????? json.append(line);
????????????????????????? }
????????????????? } catch (Exception e) {
????????????????????????? System.out.println(e.toString());
????????????????? }
????????????????? return json.toString();
???????? }
?
}
这里需要注意的是:如何在后台获取axios以Ajax的方法 提交的数据,所以关键是方法readJSONString方法(不能以getParameter方法获取)。当然你可利用其它前端库对提交的数据进行适当的转换,以你认可的方式获取表单值。在上述代码中,
String json =readJSONString(request) ;
Depart d = data.toXObject(json);
这两行代码完成提交对象字符串解析和对象转换(利用Jackson)。完成对象转换后即可以把对象进行持久化了(数据库或或其它形式)。
然后,我们运行整个项目,在输入表单输入,点击保持后,结果页面类似如下:
红色内容为保存成功的对象数据。
6.练习
如何基于上述代码框架,实现数据的查找和删除呢?自己动手练练吧。本次的边学边练就到这里了,记得动手练练啊——书读百遍,不如一练!
猜你喜欢
- 2024-10-17 简书看到的技术文档,非常详细解释了axios技术,值得收藏
- 2024-10-17 全面分析前端的网络请求方式 前端网络请求框架
- 2024-10-17 一步一步学测试平台开发-Vue restful请求
- 2024-10-17 前端面试29:什么是fetch?fetch与20年前的ajax有什么不同?
- 2024-10-17 手把手教你全面分析前端如何网络请求方式
- 2024-10-17 前端基础面试:axios的特点和基本使用方法以及拦截器的使用方法
- 2024-10-17 在React项目中使用Axios react-intl
- 2024-10-17 前端金三银四面试必备八股文——JavaScript
- 2024-10-17 Axios是什么?用在什么场景?如何使用?
- 2024-10-17 Node.js 中遇到大数处理精度丢失如何解决?前端也适用
你 发表评论:
欢迎- 11-19零基础学习!数据分析分类模型「支持向量机」
- 11-19机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 11-19我以前一直没有真正理解支持向量机,直到我画了一张图
- 11-19研一小姑娘分享机器学习之SVM支持向量机
- 11-19[机器学习] sklearn支持向量机
- 11-19支持向量机
- 11-19初探支持向量机:用大白话解释、原理详解、Python实现
- 11-19支持向量机的核函数
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)