📜  Spring MVC教程(1)

📅  最后修改于: 2023-12-03 15:35:03.502000             🧑  作者: Mango

Spring MVC 教程

简介

Spring MVC 是一种基于 Java 的 MVC 框架,用于构建 Web 应用程序。它的灵活性和强大性使它成为现今最受欢迎的 Web 框架之一。

特点
  • 轻量级,而且速度快
  • 易于配置和使用
  • 支持多种视图技术,如 JSP、Freemarker、Tiles 等
  • 支持 RESTful Web Services,使得开发者可以创建 RESTful Web 应用程序
  • 支持表单验证和数据绑定
  • 支持国际化和本地化
  • 高度可扩展性
  • 简单易懂的异常处理机制
环境搭建

要开始使用 Spring MVC,需要将以下三个核心组件包含在你的 classpath 中:

  • spring-core.jar:Spring 的基本工具类,Spring 模式(DI 和 AOP)的基石,一切都是从这里开始的。
  • spring-web.jar:提供了 Spring MVC 和 Spring Web 功能。
  • spring-webmvc.jar:包含 Spring MVC 实现。

除此之外,还需要在 web.xml 文件中配置 DispatcherServlet 和 Spring MVC 的配置文件。

<web-app>
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/springmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
MVC 模式

Spring MVC 使用 MVC(Model-View-Controller)架构模式,其中每个组件各自履行分离的职责:

  • Model:业务逻辑和数据持久化层
  • View:用户界面
  • Controller:处理用户请求并根据需要调用 Model 和 View。
控制器(Controller)

控制器(Controller)是 Spring MVC 的核心组件之一,它处理用户请求,调用业务逻辑和数据持久化层,并将数据传递到视图层进行显示。

控制器示例
@Controller
@RequestMapping("/demo")
public class DemoController {
 
    @RequestMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Spring MVC Tutorial");
        return "hello";
    }
}
视图(View)

视图(View)是 Spring MVC 架构中的一个组件,它用于表示所渲染的 HTML 页面。Spring MVC 支持多种视图技术,如 JSP、Freemarker、Tiles 等。

JSP 视图示例
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<html>
<head>
    <title>Hello World!</title>
</head>
<body>
    <h2>${message}</h2>
</body>
</html>
拦截器(Interceptor)

Spring MVC 的拦截器拦截并预处理请求,它们的作用类似于过滤器。拦截器可以用于跨越不同的控制器和处理程序,同时通常用于记录日志和限制访问。

拦截器示例
public class SimpleInterceptor implements HandlerInterceptor {
    private static final Logger logger = LoggerFactory.getLogger(SimpleInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
        throws Exception {
        logger.info("Before handling the request");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 
        ModelAndView modelAndView) throws Exception {
        logger.info("After handling the request");
    }
}
表单处理(Form Handling)

Spring MVC 提供了丰富的表单处理功能,包括数据绑定、表单验证、表单视图渲染等。

表单处理示例
@RequestMapping(value = "/user", method = RequestMethod.POST)
public ModelAndView submitUser(@Valid @ModelAttribute("user") User user, BindingResult result) {
    if (result.hasErrors()) {
        ModelAndView modelAndView = new ModelAndView("user");
        modelAndView.addObject("user", user);
        return modelAndView;
    }
 
    ModelAndView modelAndView = new ModelAndView("success");
    return modelAndView;
}
异常处理(Exception Handling)

Spring MVC 提供了简单易懂的异常处理机制。开发者可以定义自己的异常和对应的处理器来实现自定义异常处理逻辑。

异常处理示例
@ControllerAdvice
public class GlobalExceptionHandler {
 
    @ExceptionHandler(Exception.class)
    public ModelAndView handleException(Exception ex) {
        ModelAndView modelAndView = new ModelAndView("error");
        modelAndView.addObject("message", ex.getMessage());
        return modelAndView;
    }
}
结语

Spring MVC 是一种强大而灵活的 Web 框架,它提供了丰富的功能和易于使用的 API,方便开发人员快速构建高质量的 Web 应用程序。