SpringMVC-入门

1.概念

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

2.入门程序

导入依赖:

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

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

项目文件路径:

  • SpringMVC的出现,优化了以前每写一个页面,都要注册一个servlet的情况,现在只需要注册一个DispatcherServlet
第一步:注册DispatchServlet
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"
         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 复制代码
<?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类
java 复制代码
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托管
XML 复制代码
 <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可能存在资源过滤的问题,我们将其配置完善
XML 复制代码
 <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 复制代码
<?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配置文件
XML 复制代码
<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类
java 复制代码
@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
相关推荐
魔道不误砍柴功1 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2341 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨1 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
Chrikk2 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*2 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue2 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man2 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
测开小菜鸟2 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity3 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天3 小时前
java的threadlocal为何内存泄漏
java