随着Web前端技术的迅猛发展,现在的Web开发已经明显分为两大阵营:Web前端和Web后端,接着UI设计又从Web前端分离出去,成为专门的团队。当我们从JavaScript开始,一路经过jQuery、Bootstrap、React,一直追逐到Vue时,是否还有人记得曾经的Web开发是前后端一体的?

本文给出的前后端一体的Web服务器例子,这种开发方式绝对不值得提倡,但是这个例子,将有助于我们加深理解HTTP和HTML。

1、需求定义

本次开发,要求在网页上显示某个培训班的所有学生信息。

我们用MySQL保存学生信息,使用SpringBoot构建程序框架,使用MyBatis与数据库对接。

下面是详细开发过程。

2、在MySQL服务器上执行下面的SQL语句创建db_train数据库,在db_train库中建立t_student表:

create database db_train default character set utf8;use db_train;create table t_student(

student_id int unsigned not null,

student_name varchar(32) not null,

student_age int unsigned not null,

student_gender int not null,

primary key(student_id)

)engine=InnoDB default charset=utf8;

3、使用下面的SQL语句向t_student表中插入一些实验数据:insert into t_student(student_id, student_name, student_age, student_gender) values(1, '张三', 36, 1);insert into t_student(student_id, student_name, student_age, student_gender) values(2, '李明', 31, 0);insert into t_student(student_id, student_name, student_age, student_gender) values(3, '王麻', 28, 0);insert into t_student(student_id, student_name, student_age, student_gender) values(4, '郑丽', 27, 1);insert into t_student(student_id, student_name, student_age, student_gender) values(5, '赵进', 39, 0);insert into t_student(student_id, student_name, student_age, student_gender) values(6, '郭霞', 33, 1);insert into t_student(student_id, student_name, student_age, student_gender) values(7, '杨浩', 37, 0);

4、查询数据库,确认上面的SQL语句执行已经成功:

5、启动IDEA,创建一个空的工程train:

6、在工程中创建一个SpringBoot模块student,Group输入com.flying,Java版本选择8,Dependencies选择Lombok、SpringWeb、MyBatis Framework:

7、修改pom.xml文件,加入mysql数据库连接的依赖,以及打包生成jar文件的内容。修改后的pom.xml文件为:

<?xml version='1.0' encoding='UTF-8'?>

xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd'>

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.3.3.RELEASE

com.flying

student

0.0.1-SNAPSHOT

student

Demo project for Spring Boot

1.8

mysqlmysql-connector-javaruntime

org.springframework.boot

spring-boot-starter-web

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.1.3

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

student

org.apache.maven.plugins

maven-jar-plugin

*.properties

*.txt

*.xml

true

student_lib/

false

com.flying.student.StudentApplication

./resources/

${project.build.directory}

org.apache.maven.plugins

maven-dependency-plugin

copy-dependencies

package

copy-dependencies

${project.build.directory}/student_lib/

maven-resources-plugin

copy-resources

package

copy-resources

src/main/resources

${project.build.directory}/resources

8、在src\main\java\com\flying\student目录中增加entity包,然后在entity包中增加StudentEntity数据类,代码如下:package com.flying.student.entity;import lombok.Data;@Datapublic class StudentEntity {    private int studentId;    private String studentName;    private int studentAge;    private int studentGender;

}

9、在src\main\java\com\flying\student目录中增加dao包,然后在dao包中增加数据据库操作接口StudentDao,代码如下:

package com.flying.student.dao;import com.flying.student.entity.StudentEntity;import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapperpublic interface StudentDao { List queryAllStudents();

}

10、在src\main\resources目录中增加mapper子目录,然后在mapper子目录中增加StudentMapper.xml文件,文件内容如下:<?xml  version='1.0' encoding='UTF-8' ?>mapper

PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN'

'http://mybatis.org/dtd/mybatis-3-mapper.dtd'>

select student_id as studentId, student_name as studentName, student_age as studentAge, student_gender as studentGender

from t_student

11、在src\main\java\com\flying\student目录中增加controller包,然后在controller包中增加StudentController类,代码如下:

package com.flying.student.controller;import com.flying.student.dao.StudentDao;import com.flying.student.entity.StudentEntity;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;

@Controller

public class StudentController {

@Autowired

private StudentDao studentDao;

@RequestMapping('/all_students')

public @ResponseBody String getAllStudents(){

StringBuffer stringBuffer = new StringBuffer();

stringBuffer.append('');

stringBuffer.append('

');

stringBuffer.append('

培训学生信息查询');

stringBuffer.append(' ');

stringBuffer.append('

');

stringBuffer.append('

stringBuffer.append('

');

stringBuffer.append('

');

stringBuffer.append('

节点信息查询

');

stringBuffer.append('

');

stringBuffer.append('

');

stringBuffer.append('

');

stringBuffer.append('

学生ID');

stringBuffer.append('

学生姓名');

stringBuffer.append('

学生年龄');

stringBuffer.append('

学生性别');

stringBuffer.append('

');

List nodeEntityList = studentDao.queryAllStudents(); int recordCount; if (nodeEntityList == null){

recordCount = 0;

}else{

recordCount = nodeEntityList.size();

} for (int i=0; i

StudentEntity studentEntity = nodeEntityList.get(i);

stringBuffer.append('

');

stringBuffer.append('

').append(studentEntity.getStudentId()).append('');

stringBuffer.append('

').append(studentEntity.getStudentName()).append('');

stringBuffer.append('

').append(studentEntity.getStudentAge()).append(''); if (studentEntity.getStudentGender() == 0){

stringBuffer.append('

男');

}else{

stringBuffer.append('

女');

}

}

stringBuffer.append(' ');

stringBuffer.append(''); return stringBuffer.toString();

}

}

12、修改application.properties文件,设置服务器监听端口为8000,设置MySQL和MyBatis的信息:server.port=8000spring.datasource.url=jdbc:mysql://127.0.0.1/db_train?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=truespring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.max-idle=10spring.datasource.max-wait=10000spring.datasource.min-idle=5spring.datasource.initial-size=5mybatis.typeAliasesPackage=spring.SpringBoot.mappermybatis.mapperLocations=classpath:mapper/*.xml

13、在IDEA的Terminal窗口执行 mvn clean package -DskipTests 命令,进行编译和打包:

14、编译后将会生成resources目录、student_lib目录和student.jar文件,将这些文件拷贝到Linux运行环境(我比较喜欢Linux环境,其实Windows环境也是可以的哈):

15、在Linux环境下执行生成的student.jar文件:

16、打开浏览器,输入 http://:8000/all_students

可以看到,网页上以表格形式显示了培训班的所有学生信息,我们通过前后端一体的方式,实现了数据库表内容查询的功能。

谢谢阅读!欢迎收藏。

java前台构建_Java编程第43讲——实现前端后一体的Web服务器相关推荐

  1. java split()方法_Java编程性能优化一些事儿

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Smile and stop complaining about the t ...

  2. java 异步事件_Java编程入门——异步事件:轮询与中断

    CPU几乎把所有的时间都花费在从内存获取指令并运行它们的过程中.然而,CPU和主存仅仅只是计算机硬件系统中众多组件的其中两个.一个完整的系统还包含其他的设备,比如: 硬盘或者固态硬盘,用来存储程序和数 ...

  3. java父子表_Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级...

    在平时的开发工作中,经常遇到这样一个场景,在数据库中存储了具有父子关系的数据,需要将这些数据以树形结构的形式在界面上进行展示.本文的目的是提供了一个通用的编程模型,解决将具有父子关系的数据转换成树形结 ...

  4. java培训机构_java编程软件培训机构

    java编程软件培训机构,南京小码王科技培训有限公司,欢迎来电预约试听课:13851536647(郑老师)小码王实施以成就感驱动发自内在的建构主义教育,以面向未来高层次人才素质模型为导向,锻炼学生抽象 ...

  5. java 令牌解析_Java编程guava RateLimiter实例解析

    本文主要研究的是Java编程guava RateLimiter的相关内容,具体如下. 场景1 在流量监管中的应用 约定访问速率(CAR)是流量监管常用技术之一,可以应用在端口进和出方向,一般应用在入方 ...

  6. java 正方形字符串_java编程:怎么画一个正方形?

    问题描述: java编程:怎么画一个正方形? 不用applet,只是application编程,用java怎么画一个蓝色的正方形(最好实心和空心的各画一个). -------------------- ...

  7. java的成员方法_java编程中的成员方法是什么?

    DIEA 成员方法描述对象所具有的功能或操作,反映对象的行为,是具有某种相对独立功能的程序模块.它与过去所说的子程序.函数等概念相当.一个类或对象可以有多个成员方法,对象通过执行它的成员方法对传来的消 ...

  8. java外围设计_Java 编程(23 种设计模式)

    简介 在一般的程序开发过程中,初中级程序员接触的程序设计模式是比较少的.最常见的可能就是单例模式.工厂模式.抽象工厂模式等等,但实际上程序中的设计模式是非常多的,具体可以分为 23 种设计模式.设计模 ...

  9. java开发 职业技能_java编程开发程序员需要具备哪些职业技能

    随着互联网的不断发展,java编程开发可以说是目前学习人数和应用范围非常多的一种编程语言了,而今天我们就一起来了解一下,java编程开发程序员需要具备哪些职业技能. 1.数据结构和算法分析 数据结构和 ...

最新文章

  1. 当 RocketMQ 遇上 Serverless,会碰撞出怎样的火花?
  2. 【赠书】图表示学习+图神经网络:破解AI黑盒,揭示万物奥秘的钥匙!
  3. Introduce Intelligence to Your Security Operations
  4. linux 模块化编译,手把手教Linux驱动1-模块化编程 module
  5. 【HTTP 2】简介(Introduction)
  6. 卷积神经网络-目标探测
  7. C++学习之路 | PTA乙级—— 1028 人口普查 (20 分)(精简)
  8. php 合计,表格怎么合计总数
  9. w10 Sentinel的下载和安装
  10. Ant tutorial(2)
  11. android高通WiFi,高通QCA9377 WiFi蓝牙模块芯片介绍,
  12. 博物馆施工组织设计方案
  13. HTTP请求过程——Chrome浏览器Network详解
  14. springboot中@SpringBootApplication的扫描范围,以及多模块的扫描问题
  15. Unity制作卡牌游戏
  16. 爬虫爬取电影天堂电影链接
  17. SyntaxError:Non-UTF-8 code starting with ‘\xb6‘ in file E:/...py on line 16, but no encoding declare
  18. Linux系统配置(磁盘管理)
  19. python列表中的元素可以是不同类型_Python列表中所有元素必须为相同类型的数据。...
  20. SpringMVC中使用ajax

热门文章

  1. macbook卡在进度条开不了机_小技巧 – MacOS系统卡在进度条,无法进入系统,如何拷贝数据?...
  2. CIGRE(国际大电网会议)对应用于电力系统以及电力设备的数据挖掘体系的定义
  3. L/O(输出/输入)
  4. Yearn攻击事件复盘:黑客完成5次DAI与USDT从3crv中存取操作后偿还闪电贷
  5. ICEM绘制体积网格的基本操作步骤
  6. 2-17 微信小程序regexp对象(附带方法解析)
  7. PHP使用HighChart生成股票K线图详解
  8. 如何在移动端app中应用字体图标icon fonts
  9. 50个直击灵魂的问题_直击面试官最常见的四个灵魂拷问题~
  10. 四级英语口语模拟测试软件,cet4:2013年12月英语四级口语考试模拟试题