SpringMVC-入门

时间:2024-02-16 18:24:08

1.概念

  • SpringMVC是一种软件架构思想,把软件按照模型(Model)、视图(View)、控制器(Controller)这三层来划分。
  • Model:指的是工程中JavaBean,用来处理数据
  • View:指的是工程中的html、jsp等页面,用来展示给用户数据
  • Controller:指的是工程中的Servlet,用来接收请求和响应

2.入门程序

导入依赖:

注意:这有一个比较不容易发现的坑,当引入Spring的依赖的时候,如果引入的是Spring6,那么Tomcat的版本必须得是10以上的,否则服务器识别不到咱们自己创的网页 

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>6.0.10</version>
    </dependency>
 2.1.配置文件方式

项目文件路径:

  • SpringMVC的出现,优化了以前每写一个页面,都要注册一个servlet的情况,现在只需要注册一个DispatcherServlet
第一步:注册DispatchServlet
<?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"
         metadata-complete="true">
  <!--创建DispatchServlet-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--关联一个spring配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-servlet2.xml</param-value>
    </init-param>
    <!--设置启动级别-->
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
</web-app>

 第二步:spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--添加处理器映射-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--添加处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--视图解析器:DispatcherServlet给他的ModelAndView-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
        <!--前缀-->
        <!--<property name="prefix" value="/WEB-INF/jsp/"/>-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <!--<property name="suffix" value=".jsp"/>-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>
第三步:编写Controller类
public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","Hello SpringMVC");
        //视图转跳
        mv.setViewName("hello");
        return mv;
    }
}

第四步:把Controller交给spring托管
 <bean id="/hello" class="com.sun.controller.HelloController"/>

第五步:创建hello.jsp

结果:

 2.2.执行原理

上面的域名localhost:8081/hello被拆分成了两部分

  • localhost:8081是服务器名
  • /hello是控制器的名字(在spring的配置文件里注册了的)

 

  • springMVC的核心就是DispatchServlet
  • 首先请求进入DispatcherServlet(前端控制器)DispatcherServlet通过HandlerMapping(处理器映射器)来获取Handler(处理器),然后用获取的Handler去寻找对应的适配器,即HandlerAdapter(处理器适配器),拿到适配器之后,来寻找到对应的Controller(这个是我们自己编写的),执行了Controller之后,返回一个ModelAndView,然后DispatchServlet拿着ModelAndView里面封装的数据和路径去找ViewResolver(视图解析器),在ViewResolver中拼接具体的路径(在上面的例子里就是/WEB-INF/jsp/hello.jsp),然后DispatchServlet再拿着这个路径去找前端页面并回显给用户

这里就不详细介绍springMVC的底层了,如有需要可以看看这个大佬的文章

https://blog.csdn.net/zxd1435513775/article/details/103000992

 2.3.使用注解的方式

这个是我们普遍使用的方式,上面的方式是为了理解springMVC的底层

第一步:由于Maven可能存在资源过滤的问题,我们将其配置完善
 <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
第二步:创建DispatchServlet
<?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"
         metadata-complete="true">
  <!--创建DispatchServlet-->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--关联一个spring配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--设置启动级别-->
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
第三步:spring配置文件
<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
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.sun.controller"/>

    <!-- 让Spring MVC不处理静态资源 -->
    <mvc:default-servlet-handler />

    <!--代替处理器映射器和处理器适配器-->
    <mvc:annotation-driven />

    <!--视图解析器:DispatcherServlet给他的ModelAndView-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
第四步:编写Controller类
@Controller
public class HelloController {
    @RequestMapping("/hello")
    public static String hello(Model model){
        //封装数据
        model.addAttribute("msg","Hello SpringMVC");
        System.out.println("接收请求");
        //被视图解析器接收,来拼装路径
        //hello.jsp
        return "hello";
    }
第五步:创建hello.jsp