Spring MVC 框架

9.1 MVC模式

MVC的三个核心部分:

  1. 模型(Model)
    • 模型是应用程序中用于处理数据和业务逻辑的部分。
    • 它通常包含应用程序的状态信息(即数据)以及用于访问和修改这些数据的逻辑。
    • 模型是独立的,它不关心数据如何显示或用户如何与之交互。
    • 它可以与数据库或其他存储系统直接交互,以存储和检索数据。
  2. 视图(View)
    • 视图是应用程序的用户界面部分,负责显示数据给用户。
    • 它从模型中获取数据,并将其以用户可理解的方式展示出来。
    • 视图通常不知道模型是如何实现的,它只是显示模型提供的数据。
    • 视图可以接收用户的输入,但它不处理这些输入,而是将它们传递给控制器。
  3. 控制器(Controller)
    • 控制器是模型和视图之间的桥梁,它处理用户的输入(如点击按钮或提交表单)。
    • 它接收用户的请求,并根据这些请求调用模型和视图去完成相应的任务。
    • 控制器从视图接收用户输入,然后调用模型来处理这些输入,并将处理结果返回给视图进行显示。
    • 控制器还可以处理应用程序的流程控制,例如导航到不同的视图

       上面JSP+Servlet+JavaBean的模式就是最典型的MVC模式,在这种模式下,应用程序中每个层级的代码各司其职,结构非常清晰,如下所示

       控制器由Servlet担任,接收前端请求并调用JavaBean,相当于一个工作调度人员,JavaBean实现了模型的功能,处理业务并操作数据库,视图由JSP实现,负责MVC结构流程图如下所示

上面的图片阐述了MVC模式三个部分(模型,视图,控制器)的功能职责,并对各部分之间的调用关系进行了描述,从中可以分析出MVC整体的处理过程如下:

(1)视图提供系统与用户交互的界面,并发送用户输入的请求给控制器。

(2)控制器接收用户的请求,并决定应该调用的模型

(3)模型根据用户请求进行相应的业务逻辑处理,并返回处理结果(数据)

(4)控制器根据返回的处理结构,调用相应的视图格式化模型返回的数据,并通过视图呈现给用户。

MVC(Model-View-Controller)模式作为一种广泛使用的软件设计模式,在软件开发中具有许多优点,但同时也存在一些潜在的缺点。

优点

  1. 低耦合性:MVC模式通过将应用程序划分为三个核心部分(模型、视图、控制器),降低了它们之间的耦合度。这种低耦合性使得在修改或扩展某个部分时,不需要对其他部分进行大量的修改,从而提高了代码的灵活性和可维护性。

  2. 高内聚性:每个部分都专注于其特定的职责。模型负责数据处理和业务逻辑,视图负责数据展示,控制器负责用户输入和业务流程控制。这种高内聚性使得代码更加模块化,易于理解和维护。

  3. 可重用性:由于视图和控制器与模型分离,因此相同的模型可以被多个视图共享,从而提高了代码的重用性。

  4. 清晰的职责划分:MVC模式为开发者提供了一种清晰的开发思路,使得每个开发者都可以专注于自己擅长的领域(如前端开发者可以专注于视图层,后端开发者可以专注于模型层和控制层)。

  5. 易于测试:由于模型、视图和控制器之间的低耦合性,可以更容易地对它们进行单元测试。特别是模型层,由于它不依赖于视图和控制器的实现,因此可以独立于其他部分进行测试。

  6. 支持并行开发:由于MVC模式将应用程序划分为相对独立的三个部分,因此不同的团队或开发者可以并行地开发这三个部分,从而提高了开发效率。

缺点

  1. 增加了复杂性:对于小型或简单的应用程序来说,引入MVC模式可能会增加额外的复杂性和开销。因为这些应用程序可能不需要如此严格的职责划分和分离。

  2. 学习曲线:对于新手开发者来说,理解和实现MVC模式可能需要一定的时间和努力。特别是当涉及到复杂的业务逻辑和交互流程时,可能需要更多的时间和精力来掌握。

  3. 调试困难:由于MVC模式将应用程序划分为多个部分,并在它们之间传递数据和控制流,因此在出现错误或问题时,可能需要跨多个部分进行调试。这可能会增加调试的难度和时间成本。

  4. 过度设计:在某些情况下,开发者可能会过度设计MVC模式,导致应用程序变得过于复杂和庞大。这可能会降低开发效率,并增加维护成本。

  5. 视图与模型之间的同步问题:在某些情况下,视图可能需要直接访问或修改模型的数据。然而,由于MVC模式强调低耦合性,因此这种直接访问可能会破坏模型的封装性,并导致视图与模型之间的同步问题。为了解决这个问题,可能需要引入额外的机制(如观察者模式)来同步视图和模型之间的数据。

9.2搭建Spring MVC环境

搭建Spring MVC环境是一个涉及多个步骤的过程,主要包括项目创建、依赖配置、配置文件编写以及控制器和视图层的开发等。以下是一个基于Maven和IDEA的Spring MVC环境搭建步骤概览:

1. 准备开发环境

  • 安装Java JDK:确保安装了Java Development Kit(JDK),Spring MVC通常要求JDK 8或更高版本。
  • 安装IDE:如IntelliJ IDEA,这是一个流行的Java集成开发环境(IDE)。
  • 安装Maven(如果尚未安装):Maven是一个项目管理工具,用于构建和管理项目依赖。

2. 创建Maven项目

  1. 打开IDEA,选择“File” -> “New” -> “Project”。
  2. 在弹出的窗口中,选择“Maven”作为项目类型,然后点击“Next”。
  3. 填写项目的GroupId、ArtifactId和Version等信息,点击“Next”。
  4. 在接下来的窗口中,可以选择Maven的archetype,但对于Spring MVC项目,通常不需要特定的archetype,因此可以直接跳过此步骤。
  5. 点击“Finish”完成项目创建。

3. 配置Maven依赖

在项目的pom.xml文件中添加Spring MVC及相关依赖。以下是一些基本的依赖示例:

<dependencies>  
    <!-- Spring MVC核心依赖 -->  
    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-webmvc</artifactId>  
        <version>5.3.x</version> <!-- 请根据实际需要选择合适的版本 -->  
    </dependency>  
  
    <!-- Servlet API依赖 -->  
    <dependency>  
        <groupId>javax.servlet</groupId>  
        <artifactId>javax.servlet-api</artifactId>  
        <version>4.0.1</version>  
        <scope>provided</scope>  
    </dependency>  
  
    <!-- 其他可能的依赖,如Spring核心、JSON处理等 -->  
    <!-- ... -->  
</dependencies>

4. 配置web.xml

src/main/webapp/WEB-INF目录下创建或编辑web.xml文件,添加Spring MVC的DispatcherServlet配置。

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"  
         version="4.0">  
  
    <servlet>  
        <servlet-name>dispatcher</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath:spring-dispatcher-servlet.xml</param-value>  
        </init-param>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>dispatcher</servlet-name>  
        <url-pattern>/</url-pattern>  
    </servlet-mapping>  
  
    <!-- 其他配置,如欢迎文件列表等 -->  
    <!-- ... -->  
  
</web-app>

5. 创建Spring MVC配置文件

src/main/resources目录下创建spring-dispatcher-servlet.xml(文件名应与web.xml中配置的contextConfigLocation相匹配),并配置Spring MVC的bean和其他设置。

<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:context="http://www.springframework.org/schema/context"  
       xmlns:mvc="http://www.springframework.org/schema/mvc"  
       xsi:schemaLocation="  
           http://www.springframework.org/schema/beans  
           http://www.springframework.org/schema/beans/spring-beans.xsd  
           http://www.springframework.org/schema/context  
           http://www.springframework.org/schema/context/spring-context.xsd  
           http://www.springframework.org/schema/mvc  
           http://www.springframework.org/schema/mvc/spring-mvc.xsd">  
  
    <!-- 启用注解驱动的Spring MVC -->  
    <mvc:annotation-driven/>  
  
    <!-- 组件扫描,以发现带有@Controller的类 -->

9.2.2 使用注解开发Spring MVC框架

使用注解来开发Spring MVC框架是现代Java Web开发中的一种流行做法,因为它可以减少XML配置文件的复杂性,并使代码更加简洁和易于维护。以下是一个基于注解的Spring MVC框架开发的基本步骤:

1. 添加必要的依赖

首先,确保你的pom.xml(如果你使用的是Maven)或build.gradle(如果你使用的是Gradle)中包含了Spring MVC和其他必要的依赖项,如Servlet API、JSP API(如果你打算使用JSP作为视图技术)等。

对于Maven,依赖项可能如下所示:

<dependencies>  
    <!-- Spring MVC -->  
    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-webmvc</artifactId>  
        <version>5.3.x</version> <!-- 使用适合你的项目的版本 -->  
    </dependency>  
  
    <!-- Servlet API -->  
    <dependency>  
        <groupId>javax.servlet</groupId>  
        <artifactId>javax.servlet-api</artifactId>  
        <version>4.0.1</version>  
        <scope>provided</scope>  
    </dependency>  
  
    <!-- JSP API(如果你使用JSP) -->  
    <dependency>  
        <groupId>javax.servlet.jsp</groupId>  
        <artifactId>javax.servlet.jsp-api</artifactId>  
        <version>2.3.3</version>  
        <scope>provided</scope>  
    </dependency>  
  
    <!-- 其他可能的依赖,如数据库连接池、ORM框架等 -->  
    <!-- ... -->  
</dependencies>

2. 配置Spring MVC

使用Java配置来替代web.xmlspring-dispatcher-servlet.xml。你可以创建一个配置类,并使用@Configuration@EnableWebMvc等注解来启用Spring MVC。

@Configuration  
@EnableWebMvc  
@ComponentScan(basePackages = "com.yourcompany.yourapp") // 扫描你的控制器等组件  
public class WebConfig implements WebMvcConfigurer {  
  
    // 实现WebMvcConfigurer接口来定制Spring MVC的行为  
    // 例如,添加静态资源处理器、拦截器、视图解析器等  
  
    @Override  
    public void addResourceHandlers(ResourceHandlerRegistry registry) {  
        registry.addResourceHandler("/resources/**")  
                .addResourceLocations("/resources/");  
    }  
  
    // 其他配置...  
}

3. 配置Servlet 3.0的Web应用初始化器

如果你不使用web.xml,则需要实现一个WebApplicationInitializer接口来配置Servlet容器

public class WebAppInitializer implements WebApplicationInitializer {  
  
    @Override  
    public void onStartup(ServletContext servletContext) throws ServletException {  
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();  
        ctx.register(WebConfig.class); // 注册你的配置类  
  
        ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));  
        servlet.setLoadOnStartup(1);  
        servlet.addMapping("/");  
    }  
}

4. 创建控制器

使用@Controller注解来标记你的控制器类,并使用@RequestMapping等注解来映射请求。

@Controller  
public class HomeController {  
  
    @RequestMapping("/")  
    public String home() {  
        return "home"; // 返回视图名,Spring MVC会查找相应的视图文件  
    }  
  
    // 其他控制器方法...  
}

5. 配置视图解析器

在你的配置类中,你可以通过实现WebMvcConfigurer接口来配置视图解析器。

@Override  
public void configureViewResolvers(ViewResolverRegistry registry) {  
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();  
    resolver.setPrefix("/WEB-INF/views/");  
    resolver.setSuffix(".jsp");  
    registry.viewResolver(resolver);  
}

6. 开发视图

根据你的配置(例如,如果你使用JSP),在/WEB-INF/views/目录下创建相应的JSP文件。

7. 运行和测试

将你的应用部署到Servlet容器中(如Tomcat、Jetty等),并访问你的应用来测试它是否按预期工作。

这就是使用注解来开发Spring MVC框架的基本步骤。注意,这些步骤可以根据你的具体需求进行调整和扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值