SpringMVC,这个名字在Java Web开发者的耳边仿佛是一首动听的旋律,携着轻盈的氛围,带给我们一种愉悦的编程体验。但是,当我们深入探寻这个框架时,它的魅力远不止表面的简单,它由许多组件构成,每个组件都像乐章中的一段旋律,构筑出一幅和谐而富有层次的画卷。
在SpringMVC的舞台上,控制器是一位指挥者,负责协调整个交响乐的演奏。通过@Controller
注解,我们将一个普通的Java类标记为控制器,告诉SpringMVC这是一个可以接受用户请求的角色。下面是一个简单的控制器示例:
@Controller
@RequestMapping("/music")
public class MusicController {
@GetMapping("/play")
public String playMusic(Model model) {
model.addAttribute("song", "Spring Symphony");
return "music-player";
}
}
在这个例子中,MusicController
被标记为@Controller
,而@RequestMapping("/music")
指定了该控制器处理的请求路径前缀。当用户请求/music/play
时,playMusic
方法将被调用,将音乐名传递给视图。
在交响乐的演奏过程中,芭蕾舞台上的演员在音乐的引导下翩翩起舞,而在SpringMVC的舞台上,视图解析器扮演了这个角色。它负责将控制器返回的逻辑视图名解析为实际的视图页面。在spring-mvc.xml
中配置视图解析器:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
上述配置中,prefix
指定了视图页面的前缀,suffix
指定了视图页面的后缀。比如在前面的控制器例子中,return "music-player";
中的music-player
将被解析为/WEB-INF/views/music-player.jsp
。
在交响乐团中,演奏家们各司其职,通过共同的努力演绎出一场精彩的音乐会。在SpringMVC中,模型和视图也是紧密合作的两个组件。控制器方法返回的ModelAndView
对象包含了模型和视图的信息。
@Controller
@RequestMapping("/orchestra")
public class OrchestraController {
@GetMapping("/playConcert")
public ModelAndView playConcert() {
ModelAndView modelAndView = new ModelAndView("concert");
modelAndView.addObject("musician", "Spring Orchestra");
return modelAndView;
}
}
在这个例子中,playConcert
方法返回了一个ModelAndView
对象,其中指定了视图名为"concert",并通过addObject
方法将乐团的名字传递给视图。
在音乐中,每个音符都有其特定的节奏,而和弦的组合则创造出音乐的和谐。在SpringMVC中,@RequestMapping
注解就是控制器方法的节奏,定义了请求的映射关系。它可以设置在类级别,也可以设置在方法级别。
@Controller
@RequestMapping("/musician")
public class MusicianController {
@RequestMapping(value = "/playNote", method = RequestMethod.GET)
public String playNote() {
// 演奏一个音符
return "music-note";
}
}
在这个例子中,类级别的@RequestMapping("/musician")
表示该控制器处理的请求路径前缀为"/musician",而方法级别的@RequestMapping(value = "/playNote", method = RequestMethod.GET)
则表示处理路径为"/musician/playNote"的GET请求。
音乐的美妙在于乐谱上的音符和符号,而在SpringMVC中,视图页面就是呈现最终音乐的媒介。通常使用JSP、Thymeleaf等技术来编写视图页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Music Note</title>
</head>
<body>
<h1>Play a beautiful note!</h1>
</body>
</html>
在这个简单的JSP页面中,通过<h1>
标签展示了一段音符的文字。
音乐会不仅仅是演奏者在台上的独奏,还包括与观众的互动。在SpringMVC中,请求参数和路径变量就是这场交互中的对话。
@Controller
@RequestMapping("/conversation")
public class ConversationController {
@GetMapping("/talk")
public String talk(@RequestParam(name = "topic", defaultValue = "Spring") String topic, Model model) {
model.addAttribute("conversation", "Let's talk about " + topic + "!");
return "talk";
}
}
在这个例子中,talk
方法接受一个名为topic
的请求参数,如果请求中没有提供topic
参数,则默认值为"Spring"。通过@RequestParam
注解,SpringMVC将请求参数绑定到方法的参数上,并传递给视图。
音乐会中的互动不仅仅局限于对话,有时还需要观众参与演奏。在SpringMVC中,表单处理提供了强大的功能,使得用户能够向服务器提交数据。
@Controller
@RequestMapping("/audience")
public class AudienceController {
@GetMapping("/joinOrchestra")
public String joinOrchestraForm(Model model) {
model.addAttribute("musician", new Musician());
return "join-form";
}
@PostMapping("/processJoinForm")
public String processJoinForm(@ModelAttribute("musician") Musician musician) {
// 处理表单提交的参与乐团的音乐家信息
return "joined-orchestra";
}
}
在这个例子中,joinOrchestraForm
方法展示了一个加入乐团的表单,通过@ModelAttribute
注解,表单中的数据将被绑定到Musician
对象。而processJoinForm
方法则处理表单的提交。
在音乐会上,总有监察员保证音乐会的正常进行,而在SpringMVC中,拦截器就是这样的监察员。拦截器可以在请求被处理前或处理后进行一些预处理或后处理。
public class ConcertInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理前执行
return true; // 返回true表示继续执行,返回false表示中断执行
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在请求处理后但在视图渲染前执行
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在整个请求完成后执行,包括视图渲染完成后
}
}
在这个例子中,ConcertInterceptor
实现了HandlerInterceptor
接口,可以在preHandle
、postHandle
和afterCompletion
中执行相应的操作。在spring-mvc.xml
中配置拦截器:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/secure/**" />
<bean class="com.example.interceptor.ConcertInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
上述配置表示拦截路径为"/secure/**"的请求,并使用ConcertInterceptor
进行处理。
SpringMVC的组件如同一场音乐会,控制器、视图解析器、模型和视图、请求映射、视图页面、请求参数和路径变量、表单处理以及拦截器,每个组件都有其独特的角色,共同协作,构建出一幅美妙的交响乐。这篇博客只是带你浏览了这个庞大而美丽的音乐会场,而深入学习每个组件将让你更好地驾驭SpringMVC的优雅之处。在这个音乐之旅中,让我们激发内心的热情,不断地学习、实践,去创造出属于自己的音乐之美。愿你的编程旅途如同一场动听的交响乐,充满激情与深度。
作者信息 作者 : 繁依Fanyi CSDN: https://techfanyi.blog.csdn.net 掘金:https://juejin.cn/user/4154386571867191 |