Spring MVC-01

关于Spring MVC

    Spring MVC是基于Spring框架基础之上的,主要解决了后端服务器接收客户端提交的请求,并给予响应的相关问题。

     MVC = Model + View + Controller,它们分别是:

   - Model:数据模型,通常由业务逻辑层(Service Layer)和数据访问层(Data Access Object          Layer)共同构成
  - View:视图
 - Controller:控制器

需要注意:Spring MVC框架只关心V - C之间的交互,与M其实没有任何关系。

SpringMVC流程图

Spring MVC-01_第1张图片

创建Spring MVC工程

**【操作步骤】**

 - 在`pom.xml`中添加`spring-webmvc`依赖项:


  
  
      org.springframework
      spring-webmvc
      5.3.14
  

  提示:如果后续运行时提示不可识别Servlet相关类,则补充添加以下依赖项:


  
  
      javax.servlet
      javax.servlet-api
      3.1.0
      provided
  

- 接下来,准备2个配置类,一个是Spring框架的配置类,一个是Spring MVC框架的配置类:


  package cn.tedu.springmvc.config;
  
  import org.springframework.context.annotation.Configuration;
  
  @Configuration // 此注解不是必须的
  public class SpringConfig {
  }


  
  import org.springframework.context.annotation.ComponentScan;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  
  @Configuration // 此注解不是必须的
  @ComponentScan("cn.tedu.springmvc") // 必须配置在当前配置类,不可配置在Spring的配置类
  public class SpringMvcConfig implements WebMvcConfigurer {
  }

- 接下来,需要创建项目的初始化类,此类必须继承自`AbstractAnnotationConfigDispatcherServletInitializer`,并在此类中重写父类的3个抽象方法,返回正确的值(各方法的意义请参见以下代码中的注释):

  
  /**
   * Spring MVC项目的初始化类
   */
  public class SpringMvcInitializer extends
          AbstractAnnotationConfigDispatcherServletInitializer {
  
      @Override
      protected Class[] getRootConfigClasses() {
          // 返回自行配置的Spring相关内容的类
          return new Class[] { SpringConfig.class };
      }
  
      @Override
      protected Class[] getServletConfigClasses() {
          // 返回自行配置的Spring MVC相关内容的类
          return new Class[] { SpringMvcConfig.class };
      }
  
      @Override
      protected String[] getServletMappings() {
          // 返回哪些路径是由Spring MVC框架处理的
          return new String[] { "*.do" };
      }
  
  }

- 最后,创建控制器类,用于接收客户端的某个请求,并简单的响应结果:


  
  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.ResponseBody;
  
  @Controller // 必须是@Controller,不可以是其它组件注解
  public class UserController {
  
      public UserController() {
          System.out.println("UserController.UserController()");
      }
  
      // http://localhost:8080/springmvc01_war_exploded/login.do
      @RequestMapping("/login.do")
      @ResponseBody
      public String login() {
          return "UserController.login()";
      }
  
  }

- 全部完成后,启动项目,会自动打开浏览器并显示主页,在主页的地址栏URL上补充`/login.do`即可实现访问,并看到结果。

关于以上案例:

- 当启动Tomcat时,会自动将项目打包并部署到Tomcat,通过自动打开的浏览器中的URL即可访问主页,在URL中有很长一段是例如 `springmvc01_war_explored` 这一段是不可以删除的,其它的各路径必须补充在其之后,例如 `/login.do` 就必须在此之后
- 当启动Tomcat时,项目一旦部署成功,就会自动创建并加载`AbstractAnnotationConfigDispatcherServletInitializer`的子类,即当前项目中自定义的`SpringMvcInitialier`,无论这个类放在哪个包中,都会自动创建并加载,由于会自动调用这个类中所有方法,所以会将Spring MVC框架处理的请求路径设置为 `*.do`,并执行对 `cn.tedu.springmvc` 的组件扫描,进而会创建 `UserController` 的对象,由于在 `UserController` 中配置的方法使用了 `@RequestMapping("/login.do")`,则此时还将此方法与`/login.do`进行了绑定,以至于后续随时访问`/login.do`时都会执行此方法
- 注意:组件扫描必须配置在Spring MVC的配置类中
- 注意:控制器类上的注解必须是`@Controller`,不可以是`@Component`、`@Service`、`@Repository`

总结

  1. 创建Maven项目:使用Maven创建一个空的Java项目。

  2. 添加Spring MVC依赖:在pom.xml文件中添加Spring MVC的依赖,包括spring-webmvc、spring-context等。

  3. 配置web.xml文件:配置web.xml文件,设置Spring MVC的DispatcherServlet和上下文配置文件的位置。

  4. 创建controller类:创建一个Controller类,用于处理HTTP请求和响应。在类上添加@Controller注解,使用@RequestMapping注解来映射URL和方法。

  5. 创建视图:创建JSP页面或者Thymeleaf模板,用来渲染结果。

  6. 配置Spring上下文:创建一个Spring的配置文件,配置各个组件的依赖关系和相关属性。

  7. 配置视图解析器:在Spring配置文件中配置视图解析器,用于解析视图的逻辑名称并返回实际的视图。

  8. 运行项目:使用Maven命令或IDE工具将项目打包成WAR文件,并部署到Web服务器上,启动服务器后可以访问项目的URL,进行测试。

    

你可能感兴趣的:(spring,mvc,java)