资讯详情

资讯详情

Spring Boot实战:加法计算器与用户登录系统开发

1. Spring框架基础与项目概述Spring框架作为Java生态中最流行的轻量级开发框架其核心特性IoC控制反转和AOP面向切面编程为开发者提供了极大的便利。本次我们将基于Spring Boot快速实现两个典型功能场景加法计算器和用户登录系统。这两个案例虽然基础但涵盖了Spring MVC、表单处理、会话管理等核心知识点。加法计算器案例主要演示前后端数据交互方式Controller层参数绑定服务层业务逻辑处理视图层结果展示用户登录系统则涉及表单验证机制会话管理Session安全控制基础重定向处理模式2. 开发环境准备2.1 工具与依赖配置推荐使用以下开发环境JDK 1.8IntelliJ IDEA内置Spring InitializrMaven 3.6Spring Boot 2.7.xpom.xml关键依赖dependencies !-- Web基础支持 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- 模板引擎 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-thymeleaf/artifactId /dependency !-- 开发工具包 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-devtools/artifactId scoperuntime/scope optionaltrue/optional /dependency /dependencies2.2 项目结构规划src/main/java └── com.example.demo ├── controller # 控制器层 ├── service # 业务逻辑层 ├── model # 数据模型 └── DemoApplication.java # 启动类 src/main/resources ├── static # 静态资源 ├── templates # 模板文件 └── application.properties # 配置文件3. 加法计算器实现3.1 前端表单设计在templates/calculator.html中form action/calculate methodpost input typenumber namenum1 required span/span input typenumber namenum2 required button typesubmit计算/button /form div th:if${result} ! null 结果span th:text${result}/span /div3.2 控制器实现创建CalculatorControllerController public class CalculatorController { GetMapping(/calculator) public String showForm() { return calculator; } PostMapping(/calculate) public String calculate( RequestParam double num1, RequestParam double num2, Model model) { double sum num1 num2; model.addAttribute(result, sum); return calculator; } }关键点说明GetMapping处理页面访问请求PostMapping处理表单提交RequestParam自动绑定表单参数Model对象用于向视图传递数据3.3 服务层优化虽然简单计算可以直接在Controller完成但最佳实践是分离业务逻辑Service public class CalculatorService { public double add(double a, double b) { return a b; } } // Controller中改为注入Service Autowired private CalculatorService calculatorService; PostMapping(/calculate) public String calculate(...) { double sum calculatorService.add(num1, num2); // ... }4. 用户登录系统实现4.1 用户模型设计public class User { private String username; private String password; // 省略getter/setter }4.2 登录控制器Controller SessionAttributes(user) public class LoginController { private static final MapString, String USER_DB Map.of( admin, 123456, user, password ); GetMapping(/login) public String showForm(Model model) { model.addAttribute(user, new User()); return login; } PostMapping(/login) public String submit( ModelAttribute User user, Model model) { if(USER_DB.containsKey(user.getUsername()) USER_DB.get(user.getUsername()).equals(user.getPassword())) { return redirect:/welcome; } model.addAttribute(error, 用户名或密码错误); return login; } }4.3 登录页面实现templates/login.htmlform action/login methodpost th:object${user} input typetext th:field*{username} placeholder用户名 required input typepassword th:field*{password} placeholder密码 required button typesubmit登录/button span th:if${error} th:text${error} stylecolor:red/span /form4.4 欢迎页与会话管理GetMapping(/welcome) public String welcome(ModelAttribute(user) User user, Model model) { model.addAttribute(username, user.getUsername()); return welcome; }welcome.htmlh1欢迎, span th:text${username}/span!/h1 a href/logout退出登录/a5. 功能增强与优化5.1 输入验证添加Spring Validation支持public class User { NotBlank(message用户名不能为空) private String username; Size(min6, message密码至少6位) private String password; } // Controller修改 PostMapping(/login) public String submit( Valid ModelAttribute User user, BindingResult result, Model model) { if(result.hasErrors()) { return login; } // ... }5.2 密码安全处理添加密码加密import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; // 初始化密码库 private static final MapString, String USER_DB new HashMap(); static { BCryptPasswordEncoder encoder new BCryptPasswordEncoder(); USER_DB.put(admin, encoder.encode(123456)); // ... } // 验证时 if(encoder.matches(user.getPassword(), USER_DB.get(user.getUsername()))) { // ... }5.3 拦截器实现访问控制public class AuthInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(request.getSession().getAttribute(user) null) { response.sendRedirect(/login); return false; } return true; } } // 注册拦截器 Configuration public class WebConfig implements WebMvcConfigurer { Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AuthInterceptor()) .addPathPatterns(/welcome); } }6. 常见问题排查表单提交后出现404错误检查PostMapping路径是否与form action一致确保Controller类有Controller注解Thymeleaf模板无法解析检查模板是否放在resources/templates目录确认依赖中包含了thymeleaf-starter参数绑定失败确保表单字段name属性与RequestParam值一致基本类型参数建议使用包装类如Double代替double会话数据丢失确认Controller类添加了SessionAttributes重定向时使用RedirectAttributes传递参数静态资源无法加载检查资源是否放在resources/static目录确保没有拦截器拦截了静态资源路径7. 项目扩展方向数据库集成使用Spring Data JPA替换内存用户存储实现用户注册功能增强安全性添加验证码功能实现密码强度校验集成Spring Security前端优化使用Bootstrap美化界面添加Ajax表单提交实现响应式布局日志记录添加登录日志记录计算器操作历史异常处理全局异常处理器自定义错误页面这个项目虽然基础但涵盖了Spring Web开发的多个核心概念。建议在掌握这些基础后逐步尝试更复杂的业务场景开发。实际开发中计算器服务可以扩展为财务计算模块登录系统可以发展为完整的权限管理系统。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →