0
点赞
收藏
分享

微信扫一扫

在window用bat批处理制作mongodb本地启动文件

青青子衿谈育儿 2024-05-24 阅读 7
mvc

一、SpringMVC简介

1-介绍

原生的Servlet API开发代码片段 

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
                                                        throws ServletException, IOException {  
    String userName = request.getParameter("userName");
    
    System.out.println("userName="+userName);
}

 基于SpringMVC开发代码片段

更加专注的进行业务逻辑的开发

@RequestMapping("/user/login")
public String login(@RequestParam("userName") String userName, Integer id){
    
    log.debug("userName="+userName);
    
    return "result";
}

 2-主要作用以及优点

1)主要作用

最终总结:

 2)优点

3-核心组件以及调用流程理解

1)SpringMVC含义

 2)完整流程表述:

(1)客户端发起请求:用户通过浏览器或其他客户端想服务器发起http请求

(2)请求到达前端控制器(DispatcherServlet):请求首先被DispatcherServlet接收,它是SpringMVC的前端控制器,是整个流程的起点。

(3)处理器映射器(Handler Mapping)确定处理器: DispatcherServlet使用处理器映射器来确定请求应该由哪个控制器(Handler)处理。处理器映射器根据配置或注解找到匹配的处理器。

(4)控制器处理请求:找到匹配的控制器后,控制器执行相应的方法来处理请求。这个方法可能包含业务逻辑、数据处理等。

(5)模型处理数据: 控制器可以与模型(Model)交互,进行数据处理和业务逻辑。模型通常包含应用程序的数据和业务规则。

(6)视图解析器(View Resolver)确定视图: 控制器处理完请求后,它返回一个逻辑视图的名称。视图解析器将逻辑视图名称解析为实际的视图(View),这可以是JSP、Thymeleaf等。

(7)视图渲染: 视图负责将模型中的数据渲染到视图中,生成最终的响应内容。这可以是HTML、JSON等格式。 

 (8)响应发送到客户端: 渲染后的视图作为响应发送回DispatcherServlet。

 (9)响应返回客户端: DispatcherServlet将最终的响应返回给客户端,完成了整个请求-响应的循环。

3)SpringMVC涉及组件理解

 3)图解说明

 

4-问题与思考

1、什么是MVC架构,它的核心思想是什么?

2、在没有MVC之前,Web应用是如何组织和开发的?存在哪些问题?

3、为什么MVC成为一种流行的设计模式,而且在Web开发中得到广泛应用?MVC架构解决了那些方面的问题?

4、所以什么是 SpringMVC ?

二、SpringMVC快速体验

1-体验场景需求

2-配置分析

3-准备项目

1)创建项目

2)导入依赖

<properties>
    <spring.version>6.0.6</spring.version>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <!-- springioc相关依赖  -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- web相关依赖  -->
    <!-- 在 pom.xml 中引入 Jakarta EE Web API 的依赖 -->
    <!--
        在 Spring Web MVC 6 中,Servlet API 迁移到了 Jakarta EE API,因此在配置 DispatcherServlet 时需要使用
         Jakarta EE 提供的相应类库和命名空间。错误信息 “‘org.springframework.web.servlet.DispatcherServlet’
         is not assignable to ‘javax.servlet.Servlet,jakarta.servlet.Servlet’” 表明你使用了旧版本的
         Servlet API,没有更新到 Jakarta EE 规范。
    -->
    <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-web-api</artifactId>
        <version>9.1.0</version>
        <scope>provided</scope>
    </dependency>

    <!-- springwebmvc相关依赖  -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

</dependencies>

 3)Controller声明

@Controller
public class HelloController {

    //handlers

    /**
     * handler就是controller内部的具体方法
     * @RequestMapping("/springmvc/hello") 就是用来向handlerMapping中注册的方法注解!
     * @ResponseBody 代表向浏览器直接返回数据!
     */
    @RequestMapping("/springmvc/hello")
    @ResponseBody
    public String hello(){
        System.out.println("HelloController.hello");
        return "hello springmvc!!";
    }
}

4)SpringIoC配置

<?xml version="1.0" encoding="UTF-8"?>
<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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 扫描controller对应的包,将handler加入到ioc-->
    <context:component-scan base-package="com.atguigu.controller" />

    <!-- 方案1: 手动配置handlerMapping 和 handlerAdapter -->
    <!-- handlerMapping
         RequestMappingHandlerMapping 就是springmvc提供的组件
         支持@RequestMapping方式注册的handler
    -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
    <!-- handlerAdapter
         RequestMappingHandlerAdapter 就是springmvc提供的组件
         支持@RequestMapping方式注册的handler
    -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
    <!-- 方案2: 不配置
         解释: springmvc会在启动的时候,如果发现我们没有配置handlerMapping,handlerAdapter,viewResolver
         就会加载spring-webmvc包下的配置DispatcherServlet.properties下的组件!
         DispatcherServlet.properties:
           org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
                org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping,\
                org.springframework.web.servlet.function.support.RouterFunctionMapping

            org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
                org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
                org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter,\
                org.springframework.web.servlet.function.support.HandlerFunctionAdapter
            ........

         所以,我们可以不同写,也会默认加载! 注意: 一旦你配置了,就不会加载对应的默认组件切记!!!
    -->

     <!-- viewResolver 不需要配置,因为我们不需要查找逻辑视图!!! -->

</beans>

 5)web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!-- 配置SpringMVC中负责处理请求的核心Servlet,也被称为SpringMVC的前端控制器 -->
  <servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <!-- DispatcherServlet的全类名 -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 通过初始化参数指定SpringMVC配置文件位置 -->
    <init-param>
      <!-- 如果不记得contextConfigLocation配置项的名称,可以到DispatcherServlet的父类FrameworkServlet中查找 -->
      <param-name>contextConfigLocation</param-name>
      <!-- 使用classpath:说明这个路径从类路径的根目录开始才查找 -->
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <!-- 作为框架的核心组件,在启动过程中有大量的初始化操作要做,这些操作放在第一次请求时才执行非常不恰当 -->
    <!-- 我们应该将DispatcherServlet设置为随Web应用一起启动 -->
    <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <!-- 对DispatcherServlet来说,url-pattern有两种方式配置 -->
    <!-- 方式一:配置“/”,表示匹配整个Web应用范围内所有请求。这里有一个硬性规定:不能写成“/*”。
      只有这一个地方有这个特殊要求,以后我们再配置Filter还是可以正常写“/*”。 -->
    <!-- 方式二:配置“*.扩展名”,表示匹配整个Web应用范围内部分请求 -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

4-测试成功

 5-总结

举报

相关推荐

0 条评论