vue项目实战-前后端分离与结合

柔情只为你懂 2024-04-06 14:54 231阅读 0赞

vue

  • 后端
    • 三层架构搭建
    • userServlet类
    • 实体类
    • dao层实现类
    • mvn仓库:(获取相关的坐标,jar包等)
    • maven的安装
    • pom.xml
    • 运行后端测试
    • 前端连接
    • 运行

后端

三层架构搭建

在这里插入图片描述

userServlet类

  1. package com.wedu.servlet;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import com.wedu.dao.UserDao;
  4. import com.wedu.dao.impl.UserDaoImpl;
  5. import com.wedu.entity.User;
  6. import com.wedu.service.UserService;
  7. import javax.servlet.*;
  8. import javax.servlet.http.*;
  9. import javax.servlet.annotation.*;
  10. import java.io.IOException;
  11. import java.io.PrintWriter;
  12. import java.util.List;
  13. @WebServlet("/userServlet")
  14. public class UserServlet extends HttpServlet {
  15. UserDao userDao = new UserDaoImpl();
  16. @Override
  17. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  18. List<User> user = userDao.find();
  19. ObjectMapper objectMapper = new ObjectMapper();
  20. //将数据库查询的结果封装为一个JSON类型的数据
  21. String data = objectMapper.writeValueAsString(user);
  22. //设置一下响应的编码格式
  23. response.setCharacterEncoding("utf-8");
  24. //获取输出流
  25. PrintWriter printWriter = response.getWriter();
  26. printWriter.append(data);
  27. }
  28. @Override
  29. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  30. this.doGet(request,response);
  31. }
  32. }

实体类

  1. package com.wedu.entity;
  2. /**
  3. * @author chunhua
  4. * @date 2023/11/2 20:39
  5. */
  6. public class User {
  7. private int id;
  8. private int age;
  9. public User() {
  10. }
  11. public User(int id, int age) {
  12. this.id = id;
  13. this.age = age;
  14. }
  15. public int getId() {
  16. return id;
  17. }
  18. public void setId(int id) {
  19. this.id = id;
  20. }
  21. public int getAge() {
  22. return age;
  23. }
  24. public void setAge(int age) {
  25. this.age = age;
  26. }
  27. @Override
  28. public String toString() {
  29. return "User{" +
  30. "id=" + id +
  31. ", age=" + age +
  32. '}';
  33. }
  34. }

dao层实现类

  1. package com.wedu.dao.impl;
  2. import com.wedu.dao.UserDao;
  3. import com.wedu.entity.User;
  4. import com.wedu.util.JDBCUtils;
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.ArrayListHandler;
  7. import org.apache.commons.dbutils.handlers.BeanListHandler;
  8. import java.sql.Connection;
  9. import java.sql.SQLException;
  10. import java.util.List;
  11. public class UserDaoImpl implements UserDao {
  12. Connection connection = null;
  13. QueryRunner qr = new QueryRunner();
  14. String sql = null;
  15. @Override
  16. public List<User> find() {
  17. try {
  18. connection = JDBCUtils.getConnection();
  19. sql = "select * from user ";
  20. qr = new QueryRunner(JDBCUtils.getDataSource());
  21. // BeanListHandler<User> handler = new BeanListHandler<>(User.class);
  22. List<User> result = qr.query(connection, sql, new BeanListHandler<>(User.class));
  23. return result;
  24. }catch (Exception e){
  25. e.printStackTrace();
  26. return null;
  27. }finally {
  28. try {
  29. connection.close();
  30. } catch (SQLException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. }
  35. }

接口:

  1. package com.wedu.dao;
  2. import com.wedu.entity.User;
  3. import java.util.List;
  4. public interface UserDao {
  5. List<User> find();
  6. }

mvn仓库:(获取相关的坐标,jar包等)

https://mvnrepository.com/

maven的安装

参考这篇博客: Maven安装与配置,Idea配置Maven

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>VUEdemo1</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <packaging>war</packaging>
  10. <dependencies>
  11. <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
  12. <dependency>
  13. <groupId>com.mysql</groupId>
  14. <artifactId>mysql-connector-j</artifactId>
  15. <version>8.0.33</version>
  16. </dependency>
  17. <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
  18. <dependency>
  19. <groupId>com.alibaba</groupId>
  20. <artifactId>druid</artifactId>
  21. <version>1.2.8</version>
  22. </dependency>
  23. <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  24. <dependency>
  25. <groupId>javax.servlet</groupId>
  26. <artifactId>javax.servlet-api</artifactId>
  27. <version>4.0.1</version>
  28. <scope>provided</scope>
  29. </dependency>
  30. <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
  31. <dependency>
  32. <groupId>commons-dbutils</groupId>
  33. <artifactId>commons-dbutils</artifactId>
  34. <version>1.6</version>
  35. </dependency>
  36. <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
  37. <dependency>
  38. <groupId>com.fasterxml.jackson.core</groupId>
  39. <artifactId>jackson-databind</artifactId>
  40. <version>2.2.3</version>
  41. </dependency>
  42. <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
  43. <dependency>
  44. <groupId>com.fasterxml.jackson.core</groupId>
  45. <artifactId>jackson-core</artifactId>
  46. <version>2.2.3</version>
  47. </dependency>
  48. </dependencies>
  49. <properties>
  50. <maven.compiler.source>8</maven.compiler.source>
  51. <maven.compiler.target>8</maven.compiler.target>
  52. </properties>
  53. <build>
  54. <plugins>
  55. <plugin>
  56. <groupId>org.apache.tomcat.maven</groupId>
  57. <artifactId>tomcat7-maven-plugin</artifactId>
  58. <configuration>
  59. <!-- 端口号-->
  60. <port>8080</port>
  61. <path>/</path>
  62. </configuration>
  63. <version>2.2</version>
  64. </plugin>
  65. </plugins>
  66. </build>
  67. </project>

运行后端测试

在这里插入图片描述


在这里插入图片描述

前端连接

后端接口写在vue.config.js中

  1. const { defineConfig } = require('@vue/cli-service')
  2. module.exports = defineConfig({
  3. // transpileDependencies: true,
  4. devServer: {
  5. port:8082,
  6. proxy: {
  7. '/api': {
  8. target: 'http://127.0.0.1:8080/',// 后端接口
  9. changeOrigin: true, // 是否跨域
  10. pathRewrite: {
  11. '^/api': '/'
  12. }
  13. }
  14. }
  15. }
  16. })

main.js中引入axios
在这里插入图片描述
在utils包下新建一个
在这里插入图片描述

  1. import axios from 'axios'
  2. export function request(config) {
  3. const request = axios.create({
  4. baseURL: 'api', // 后端请求端口设置,根据自己的端口进行设置
  5. timeout: 4000 // 超时时间
  6. })
  7. // request 请求拦截
  8. // 可以在请求发送前对请求做一些处理
  9. // eg.统一加上token,对请求参数统一加密
  10. request.interceptors.request.use(config => {
  11. config.headers['Content-Type'] = 'application/json;charset=utf-8';
  12. // console.log(config);
  13. // config.headers['token'] = user.token; // 设置请求头
  14. return config
  15. }, error => {
  16. console.log(error);
  17. });
  18. // response 响应拦截
  19. // 可以在接口响应后统一处理结果
  20. request.interceptors.response.use(
  21. response => {
  22. let res = response.data;
  23. // console.log(res);
  24. // 如果是返回的文件
  25. if (response.config.responseType === 'blob') {
  26. return res
  27. }
  28. // 兼容服务端返回的字符串数据
  29. if (typeof res === 'string') {
  30. // 如果是json字符串,将json字符串转换为json对象
  31. res = res ? JSON.parse(res) : res
  32. }
  33. return res;
  34. },
  35. error => {
  36. console.log('err' + error) // 控制台打印错误信息,用于调试
  37. })
  38. // 直接返回
  39. return request(config)
  40. }
  41. // export default request

新建一个vue文件,实现前端页面,数据传入前端页面
组件官网element

  1. <template>
  2. <div>
  3. <el-container style="height: 700px; border: 1px solid #eee">
  4. <el-header style="font-size: 40px; background-color: aquamarine;">学习vue平台</el-header>
  5. <el-container>
  6. <el-aside width="200px">
  7. <el-menu :default-openeds="['1', '3']">
  8. <el-submenu index="1">
  9. <template slot="title"><i class="el-icon-message"></i>系统信息管理</template>
  10. <el-menu-item index="1-1">部门管理</el-menu-item>
  11. <el-menu-item index="1-2">人员管理</el-menu-item>
  12. </el-submenu>
  13. </el-menu>
  14. </el-aside>
  15. <el-main>
  16. <!-- 表单 -->
  17. <el-form :inline="true" :model="searchFrom" class="demo-form-inline">
  18. <el-form-item label="姓名">
  19. <el-input v-model="searchFrom.name" placeholder="姓名"></el-input>
  20. </el-form-item>
  21. <el-form-item label="性别">
  22. <el-select v-model="searchFrom.gender" placeholder="性别">
  23. <el-option label="男" value="1"></el-option>
  24. <el-option label="女" value="2"></el-option>
  25. </el-select>
  26. </el-form-item>
  27. <el-form-item label="入职日期">
  28. <el-date-picker v-model="searchFrom.entrytime" type="daterange" range-separator="至"
  29. start-placeholder="开始日期" end-placeholder="结束日期">
  30. </el-date-picker>
  31. </el-form-item>
  32. <el-form-item>
  33. <el-button type="primary" @click="onSubmit">查询</el-button>
  34. </el-form-item>
  35. </el-form>
  36. <!-- 表格 -->
  37. <el-table :data="tableData" >
  38. <el-table-column prop="id" label="序列" width="100">
  39. </el-table-column>
  40. <!-- <el-table-column prop="date" label="日期" width="140">
  41. </el-table-column>
  42. <el-table-column prop="name" label="姓名" width="120">
  43. </el-table-column> -->
  44. <el-table-column prop="age" label="年龄" width="120">
  45. </el-table-column>
  46. <!-- <el-table-column prop="address" label="地址">
  47. </el-table-column> -->
  48. </el-table>
  49. </el-main>
  50. </el-container>
  51. </el-container>
  52. </div>
  53. </template>
  54. <script>
  55. // import axios from "axios";
  56. import { request } from "../../utils/request";
  57. export default {
  58. data() {
  59. return {
  60. tableData: [{
  61. }],
  62. searchFrom: {
  63. name: '',
  64. gender: '',
  65. entrytime: []
  66. }
  67. }
  68. },
  69. methods: {
  70. onSubmit() {
  71. console.log('submit!');
  72. },
  73. queryUserList(){
  74. request({
  75. url: '/userServlet'
  76. }).then(res => {
  77. console.log(res);
  78. this.tableData = res;
  79. }, err => {
  80. console.log(err);
  81. })
  82. }
  83. },
  84. mounted() {
  85. //发送异步请求,获取数据
  86. // request.get('/userServlet').then((result) =>{
  87. // this.tableData = result.data;
  88. // });
  89. this.queryUserList();
  90. },
  91. created() {
  92. }
  93. }
  94. </script>
  95. <style></style>

运行

在这里插入图片描述
数据从数据库导入成功
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,231人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue-前后分离问题

    前后端分离的项目第一个遇到的拦路虎应该就是 前后端分离所导致的跨域问题了。在vue.js里面,前后端分离里面,前端可以做的事情有: 1.修改 config/index.js里