springboot框架使用前后端不分离开发网页版日历项目练习

131 阅读2分钟

今天给大家分享一个使用springboot框架使用前后端不分离开发网页版日历项目,在我们刚开始学习java框架的时候,需要自己找一些项目来练习自己的编程技能,今天给大家分享的这个项目,非常适合项目练习。

先给大家介绍一下使用的技术

java版本:8

springboot:2.6.13

使用的模板依赖:spring-boot-starter-thymeleaf

先给大家看一下做出来的效果:

image.png

功能方面平时我们用到的日历功能基本上都有实现,这个项目非常适合我们刚开始学习编程的时候,用来练习。

项目目录结构

image.png

部分代码分享:

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:项目依赖和打包用的,标准配置。

如果你现在需要一个这样简单的项目来练习自己的编程能力,希望这篇文章可以帮助到你。源码已经打包好了,需要的小伙伴可以使用

wwwoop.com/home/Index/…