【Spring 篇】深入探索:Spring集成Web环境的奇妙世界

在这里插入图片描述

嗨,亲爱的小白们!欢迎来到这篇有关Spring集成Web环境的博客。如果你曾对如何在Spring中构建强大的Web应用程序感到好奇,那么这里将为你揭示Web开发的神秘面纱。我们将用情感丰富、语句通顺的文字,以小白友好的方式,一探Spring在Web环境中的强大功能。

前言:Web开发的新时代

在我们踏入Spring Web环境的奇妙世界之前,让我们简单了解一下什么是Web开发。Web开发是指构建和维护通过互联网或内联网访问的网页的过程。而Spring作为一个全能型的Java框架,提供了强大的支持来简化Web应用程序的开发。

现代Web应用不仅需要提供丰富的用户体验,还需要保证性能、可维护性和安全性。Spring就像是一位强大的导演,为我们打造了一个舞台,让我们在这个Web开发的新时代中轻松驾驭。

Spring框架简介

在探索Spring Web环境之前,让我们简单回顾一下Spring框架的基本概念。Spring是一个开源框架,它简化了Java应用程序的开发,提供了广泛的基础设施支持。

Spring的核心特性包括依赖注入(DI)、面向切面编程(AOP)、事务管理、以及我们即将深入讨论的Web模块。这些特性使得Spring成为一个理想的选择,不仅用于构建大型企业级应用,也可以轻松地用于小型项目的开发。

Spring集成Web环境:如何搭建舞台

1. 项目初始化

首先,我们需要创建一个新的Spring项目。可以使用Spring Initializr(https://start.spring.io/)来初始化一个基本的Spring Boot项目。选择你需要的配置,点击"Generate"下载项目压缩包,解压后导入到你喜欢的集成开发环境中。

2. 添加Web依赖

pom.xml文件中,添加Spring Web的依赖:

<dependencies><!-- ...其他依赖 ... --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

这个依赖包含了构建基本的Spring Web应用所需的一切。

3. 创建一个简单的Controller

src/main/java/com/example/demo目录下,创建一个名为DemoController.java的类,用于处理Web请求:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class DemoController {@GetMapping("/hello")public String hello() {return "Hello, Spring Web!";}
}

这个简单的Controller定义了一个/hello的GET请求,返回一条简单的问候语。

4. 启动应用

在项目的根目录下执行以下命令启动应用:

./mvnw spring-boot:run

或者在集成开发环境中直接运行DemoApplication.java中的main方法。

打开浏览器访问:http://localhost:8080/hello,你将看到页面上显示着"Hello, Spring Web!"。

至此,我们已经成功搭建了一个简单的Spring Web应用。接下来,让我们更深入地探讨Spring Web环境中的一些核心概念。

MVC模式:将舞台分工明确

在Spring Web环境中,MVC(Model-View-Controller)是一个重要的设计模式。它将应用程序划分为三个主要的组件:

  • Model(模型):负责处理数据逻辑,与数据库交互,提供数据给View展示。
  • View(视图):负责用户界面的展示,将Model提供的数据呈现给用户。
  • Controller(控制器):负责处理用户请求,调用Model获取数据,并将数据传递给View展示。

1. 创建一个简单的Model

src/main/java/com/example/demo目录下,创建一个名为DemoModel.java的类,用于表示我们的数据:

public class DemoModel {private String message;public DemoModel(String message) {this.message = message;}public String getMessage() {return message;}
}

2. 修改Controller,引入Model

修改DemoController.java,将返回值从String改为DemoModel

@RestController
public class DemoController {@GetMapping("/hello")public DemoModel hello() {return new DemoModel("Hello, Spring Web!");}
}

3. 创建一个简单的View

src/main/resources/templates目录下,创建一个名为hello.html的HTML文件,用于展示我们的数据:

<!DOCTYPE html>
<html>
<body><h2 th:text="${message}"></h2></body>
</html>

4. 修改Controller,指定View

修改DemoController.java,指定要使用的View:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class DemoController {@GetMapping("/hello")public String hello(Model model) {model.addAttribute("message", "Hello, Spring Web!");return "hello";}
}

5. 启动应用

重新启动应用,访问http://localhost:8080/hello,你将看到页面上显示着"Hello, Spring Web!"。这一次,我们使用了MVC模式,将数据从Controller传递到了View,让整个Web应用更加结构清晰、分工明确。

数据绑定和表单处理:与用户互动的艺术

在真实的Web应用中,我们不仅仅是向用户展示静态的信息,还需要与用户进行交互。Spring提供了强大的数据绑定和表单处理功能,让我们能够轻松地处理用户提交的数据。

1. 创建一个简单的表单

src/main/resources/templates目录下,创建一个名为form.html的HTML文件,用于展示表单:

<!DOCTYPE html>
<html>
<body><form action="/submit" method="post"><label for="name">Name:</label><input type="text" id="name" name="name" required><br><br><label for="email">Email:</label><input type="email" id="email" name="email" required><br><br><input type="submit" value="Submit">
</form></body>
</html>

2. 创建一个Controller处理表单提交

src/main/java/com/example/demo目录下,创建一个名为FormController.java的类,用于处理表单提交:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;@Controller
public class FormController {@GetMapping("/form")public String showForm() {return "form";}@PostMapping("/submit")public String submitForm(String name, String email, Model model) {// 处理表单提交逻辑model.addAttribute("name", name);model.addAttribute("email", email);return "result";}
}

3. 创建一个显示结果的View

src/main/resources/templates目录下,创建一个名为result.html的HTML文件,用于展示表单提交的结果:

<!DOCTYPE html>
<html>
<body><h2 th:text="'Hello, ' + ${name} + '! Thanks for submitting your email: ' + ${email}"></h2></body>
</html>

4. 启动应用

重新启动应用,访问http://localhost:8080/form,填写表单并提交,你将看到页面上显示着你提交的信息。通过这个简单的例子,我们演示了Spring如何处理表单提交,实现了用户与应用的互动。

拦截器和过滤器:定制Web应用的护卫

有时,我们需要在请求到达Controller之前或者之后执行一些额外的逻辑。这时,拦截器和过滤器就发挥了重要的作用。让我们看看如何在Spring中使用拦截器和过滤器。

拦截器

1. 创建一个拦截器

src/main/java/com/example/demo目录下,创建一个名为DemoInterceptor.java的类,用于定义我们的拦截器:

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class DemoInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 在请求到达Controller之前执行System.out.println("Pre Handle method is Calling");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {// 在请求处理之后但视图未渲染前执行System.out.println("Post Handle method is Calling");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {// 在视图渲染之后执行System.out.println("Request and Response is completed");}
}
2. 注册拦截器

src/main/java/com/example/demo目录下,创建一个名为WebConfig.java的类,用于注册我们的拦截器:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Beanpublic DemoInterceptor demoInterceptor() {return new DemoInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(demoInterceptor());}
}

过滤器

1. 创建一个过滤器

src/main/java/com/example/demo目录下,创建一个名为DemoFilter.java的类,用于定义我们的过滤器:

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;public class DemoFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化过滤器System.out.println("Filter initialized");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 在请求处理之前执行System.out.println("Filter is doing its job");chain.doFilter(request, response);// 在请求处理之后执行System.out.println("Filter is done");}@Overridepublic void destroy() {// 销毁过滤器System.out.println("Filter destroyed");}
}
2. 注册过滤器

src/main/java/com/example/demo目录下,创建一个名为FilterConfig.java的类,用于注册我们的过滤器:

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean<DemoFilter> demoFilter() {FilterRegistrationBean<DemoFilter> registrationBean = new FilterRegistrationBean<>();registrationBean.setFilter(new DemoFilter());registrationBean.addUrlPatterns("/hello"); // 过滤的URLreturn registrationBean;}
}

测试拦截器和过滤器

重新启动应用,通过访问http://localhost:8080/hello,你将在控制台上看到拦截器和过滤器的输出信息。这证明了拦截器在请求到达Controller之前和之后,过滤器在请求处理前后都能够执行相应的逻辑。

异常处理:妙用ControllerAdvice

在真实的Web应用中,异常处理是一个必不可少的部分。Spring提供了@ControllerAdvice注解,允许我们集中处理全局的异常情况。

1. 创建一个自定义异常

src/main/java/com/example/demo目录下,创建一个名为CustomException.java的类,用于表示我们的自定义异常:

public class CustomException extends RuntimeException {public CustomException(String message) {super(message);}
}

2. 创建一个异常处理器

src/main/java/com/example/demo目录下,创建一个名为CustomExceptionHandler.java的类,用于处理自定义异常:

import org.springframework.http.HttpStatus;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import javax.servlet.http.HttpServletResponse;@ControllerAdvice
public class CustomExceptionHandler {@ExceptionHandler(CustomException.class)public String handleCustomException(CustomException ex, Model model, HttpServletResponse response) {model.addAttribute("error", ex.getMessage());response.setStatus(HttpStatus.BAD_REQUEST.value());return "error";}
}

3. 创建一个显示错误信息的View

src/main/resources/templates目录下,创建一个名为error.html的HTML文件,用于展示错误信息:

<!DOCTYPE html>
<html>
<body><h2 th:text="${error}"></h2></body>
</html>

4. 测试异常处理

DemoController.java中,添加一个新的请求处理方法,用于抛出自定义异常:

@GetMapping("/error-demo")
public String errorDemo() {throw new CustomException("This is a custom exception");
}

重新启动应用,访问http://localhost:8080/error-demo,你将看到页面上显示着自定义异常的错误信息。

通过这个简单的例子,我们演示了如何使用@ControllerAdvice注解来集中处理全局的异常情况,使得异常处理更加统一和可维护。

安全性:保护Web应用的护盾

Web应用的安全性是非常重要的,Spring提供了一套强大的安全性机制,使我们能够轻松地保护我们的Web应用。

1. 添加Spring Security依赖

pom.xml文件中,添加Spring Security的依赖:

<dependencies><!-- ...其他依赖 ... --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>
</dependencies>

2. 创建一个简单的Security配置

src/main/java/com/example/demo目录下,创建一个名为SecurityConfig.java的类,用于配置Spring Security:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/", "/home").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}

3. 创建一个登录页面

src/main/resources/templates目录下,创建一个名为login.html的HTML文件,用于展示登录页面:

<!DOCTYPE html>
<html>
<body><form th:action="@{/login}" method="post"><label for="username">Username:</label><input type="text" id="username" name="username" required><br><br><label for="password">Password:</label><input type="password" id="password" name="password" required><br><br><input type="submit" value="Login">
</form></body>
</html>

4. 测试Spring Security

重新启动应用,访问http://localhost:8080/login,你将看到登录页面。输入任意用户名和密码,点击登录按钮,你将被重定向到首页。

通过这个简单的例子,我们演示了如何使用Spring Security来保护我们的Web应用,限制访问权限,以及提供登录认证功能。

结语:在Spring的指导下舞动Web的旋律

通过这篇博客,我们深入浅出地探讨了Spring集成Web环境的世界。从项目初始化、MVC模式、数据绑定和表单处理,到拦截器和过滤器、异常处理、以及安全性,我们一步步地领略了Spring框架在Web开发中的强大功能。

在这个Web的舞台上,Spring为我们打造了一个灵活而强大的舞台,让我们能够自如地表演、与用户互动,同时又有着强大的安全性保障。希望这篇博客对于初学者来说是一次愉快的学习之旅,让你能够在Web的世界里舞动自如。

如果你有任何疑问或者想要分享自己的经验,不妨在评论区留下你的足迹。让我们一起共同探索Spring集成Web环境的奇

妙之处,愉快地编写出安全、高效、可维护的Web应用。感谢你的阅读,希望你在Web的旋律中找到属于自己的节奏!🚀🌐

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/409560.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器视觉系统选型-参数—景深

镜头在垂直方向上&#xff0c;能清晰成像的空间距离(清晰成像范围)&#xff0c;称为景深

定期推荐:PMO前沿每周讲座中的博弈论普及讲座

【圆桌第107期】博弈论与我们的工作生活 李彤老师【圆桌第107期】博弈论与我们的工作生活 李彤老师_哔哩哔哩_bilibili 推荐PMO前沿这个公众号&#xff0c;2年多来每天都大量的优秀管理文章&#xff0c;每周还请各行业的老师腾讯会议开讲&#xff0c;有视频回放&#xff0c;今天…

中仕公考:2024年上半年中小学教师资格考试(笔试)报名已开始

2024年上半年中小学教师资格考试(笔试)报名工作于1月12日开始&#xff0c;此次笔试在31个省(自治区、直辖市)举办&#xff0c;各省(自治区、直辖市)的报名公告将陆续上网。 个别地区报名截止时间有所差异&#xff0c;上海1月13日报名截止&#xff0c;浙江、天津、河南1月14日截…

华西建筑智能化寻找志同道合的创业团队

我今天四十多了&#xff0c;之前也创过业&#xff0c;做软件开发系统集成的。 19年进入华西建筑装饰工程有限公司负责机电安装及弱电智能化版块。后公司成立建筑智能化事业部&#xff0c;我负责。现在想全身心打造施工企业项目管理平台&#xff0c;同时进军智慧康养领域。我想…

Makefile编译原理 make和makefile

一.什么是makefile 如图所示&#xff0c;一个工程中的源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c; Makefile 文件定义了一系列的规则来指定哪些文件需要先编译&#xff0c;哪些文件需要后编译&#xff0c;哪些文件需要重新编译&#xff…

GitHub项目推荐-incubator

项目地址 Github地址&#xff1a;GitHub - apache/incubator-anser 官网&#xff1a;Apache Answer | Free Open-source Q&A Platform 项目简述 这是Apache的一个开源在线论坛&#xff0c;也可以部署成为一个自有的QA知识库。项目主要使用了Go和Typescript来开发&#…

SpringBoot知识03

1、多模块项目无法启动&#xff0c;报错Failed to execute goal on project*: Could not resolve dependencies for project

Scanner接收用户键盘输入数据(Java)

1.导包&#xff1a;import java.util.Scanner; 一般情况不需要自己导包&#xff0c;idea工具会自动帮助我们导包 2.代码&#xff1a; 得到键盘扫描器对象&#xff1a; Scanner sc new Scanner(System.in); 接收用户输入数据&#xff1a; int sth sc.nextInt(); String…

Android 13.0 SystemUI下拉状态栏定制二 锁屏页面横竖屏时钟都居中功能实现一

1.前言 在13.0的系统rom定制化开发中,在关于systemui的锁屏页面功能定制中,由于在平板横屏锁屏功能中,时钟显示的很大,并且是在左旁边居中显示的, 由于需要和竖屏显示一样,所以就需要用到小时钟显示,然后同样需要居中,所以就来分析下相关的源码,来实现具体的功能 2.S…

科学和统计分析软件GraphPad Prism mac介绍说明

GraphPad Prism for Mac是一款科学和统计分析软件&#xff0c;旨在帮助研究者、科学家和学生更轻松地处理和可视化数据。 GraphPad Prism for Mac是一款功能强大、易于使用的科学和统计分析软件&#xff0c;适用于各种类型的数据处理和可视化需求。无论您是进行基础研究、临床试…

anoconda 安装报错

表现形式&#xff1a;Output folder: D:\anoconda\Lib Extract: _nsis.py Extract: _system_path.py Output folder: D:\anoconda........................ 解决办法&#xff1a; 网址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Sour…