今天给大家分享一个使用springboot框架使用前后端不分离开发网页版日历项目,在我们刚开始学习java框架的时候,需要自己找一些项目来练习自己的编程技能,今天给大家分享的这个项目,非常适合项目练习。
先给大家介绍一下使用的技术
java版本:8
springboot:2.6.13
使用的模板依赖:spring-boot-starter-thymeleaf
先给大家看一下做出来的效果:
功能方面平时我们用到的日历功能基本上都有实现,这个项目非常适合我们刚开始学习编程的时候,用来练习。
项目目录结构
部分代码分享:
package com.jsonl.rili.controller;
import com.nlf.calendar.Lunar;
import com.nlf.calendar.Solar;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/***
* User: Json
* Date: 2025/6/21
**/
@Controller
public class CalendarController {
@GetMapping({ "/calendar"})
public String calendar(
@RequestParam(required = false) Integer year,
@RequestParam(required = false) Integer month,
Model model
) {
LocalDate today = LocalDate.now();
int displayYear = (year != null) ? year : today.getYear();
int displayMonth = (month != null) ? month : today.getMonthValue();
// 构造当月第一天和计算天数
LocalDate firstDayOfMonth = LocalDate.of(displayYear, displayMonth, 1);
int daysInMonth = firstDayOfMonth.lengthOfMonth();
// 当月第一天是周几(1=周一,7=周日)
int startWeekDay = firstDayOfMonth.getDayOfWeek().getValue();
// 构造日历格数据(42格,6行7列)
List<DateCell> dateCells = new ArrayList<>();
int dayCounter = 1;
for (int i = 1; i <= 42; i++) {
if (i >= startWeekDay && dayCounter <= daysInMonth) {
LocalDate date = LocalDate.of(displayYear, displayMonth, dayCounter);
// 转换为 lunar-java 对象
Solar solar = Solar.fromYmd(date.getYear(), date.getMonthValue(), date.getDayOfMonth());
Lunar lunar = solar.getLunar();
String lunarDayChinese = lunar.getDayInChinese(); // 农历日
String jieQi = lunar.getJieQi(); // 节气名称,可能为空
boolean isToday = date.equals(today);
dateCells.add(new DateCell(date.getDayOfMonth(), lunarDayChinese, jieQi, isToday));
dayCounter++;
} else {
// 非本月格子用空白
dateCells.add(DateCell.empty());
}
}
model.addAttribute("year", displayYear);
model.addAttribute("month", displayMonth);
model.addAttribute("dateCells", dateCells);
model.addAttribute("weekDays", Arrays.asList("一", "二", "三", "四", "五", "六", "日"));
return "calendar";
}
// 定义日期单元模型
public static class DateCell {
private Integer day; // 阳历日,null表示空格
private String lunarDay; // 农历日
private String jieQi; // 节气
private boolean today;
public DateCell(Integer day, String lunarDay, String jieQi, boolean today) {
this.day = day;
this.lunarDay = lunarDay;
this.jieQi = jieQi;
this.today = today;
}
public static DateCell empty() {
return new DateCell(null, null, null, false);
}
public Integer getDay() { return day; }
public String getLunarDay() { return lunarDay; }
public String getJieQi() { return jieQi; }
public boolean isToday() { return today; }
}
}
使用技术
Java + Spring Boot:搭建整个项目的后端逻辑,处理用户请求、生成日历数据。
Thymeleaf 模板引擎:负责把日历数据显示到网页上。
lunar-java 农历库:这个小工具可以帮我们把阳历转农历,还能识别节气,超级省事。
HTML + CSS:构建和美化页面样式,做得干净又有点“小清新”。
Maven:项目依赖和打包用的,标准配置。
如果你现在需要一个这样简单的项目来练习自己的编程能力,希望这篇文章可以帮助到你。源码已经打包好了,需要的小伙伴可以使用