使用idea构建我的第一个spring mvc

    xiaoxiao2025-03-01  35

    第一次操作

    需求:我发请求,后台有一个类处理这个请求,并跳转成功页面

    1.首先用maven构建项目,使用webapp模版,构建好了之后在main文件夹内新建java、resources、webapp(自带)三个文件夹,其中java文件夹要标记为source root(用于存放源代码),resources文件夹标记为resources root(用于存放配置文件),此时项目目录构建完毕。

    2.index.jsp代码如下

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h3>入门程序</h3> <a href="hello">入门程序</a> </body> </html>

    其中有一个超链接,href为相对路径格式的hello(从http://localhost:8080/springmvc1/跳转到http://localhost:8080/springmvc1/hello)(注意:如果这个地方写/hello,意思就是在从(http://localhost:8080/springmvc1/)跳转到http://localhost:8080/hello,显然无法成功)

    3.控制器的类

    package com.dwz.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; //控制器类 @Controller public class HelloController { @RequestMapping(path = "/hello") public String sayHello(){ System.out.println("hello spring mvc"); return "success"; } }

    @Controller 注解,该HelloController类被spring进行管理

    @RequestMapping(path = “/hello”) 请求映射,表明什么request才会map到该方法,需要提供一个request的路径path,本例中的/hello就是该方法的请求路径

    return “success” 跳转到success.jsp文件

    4.springmvc的配置文件springmvc.xml(位于resources文件夹下)

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 注解扫描 --> <context:component-scan base-package="com.dwz"></context:component-scan> <!-- 配置视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 开启spring mvc 框架注解的支持--> <mvc:annotation-driven></mvc:annotation-driven> </beans>

    (1)<context:component-scan base-package=“com.dwz”></context:component-scan>可以让HelloController这个类被spring扫描到,此时@Controller生效

    但是此时springmvc.xml这个配置文件并没有被识别到,也就是无法生效,因此需要在其他地方加载它,才能让springmvc.xml生效,因此我们需要在web.xml中进行配置

    5.web.xml(位于WEB-INF下)

    web.xml

    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!-- SpringMVC的核心控制器 --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置Servlet的初始化参数,读取springmvc的配置文件,创建spring容器 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 配置servlet启动时加载对象 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

    其中

    <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置Servlet的初始化参数,读取springmvc的配置文件,创建spring容器 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param>

    表示我们想要给DispatcherServlet传初始化参数,参数名称为contextConfigLocation,参数值为classpath:springmvc.xml,此时DispatcherServlet就可以帮我们加载springmvc.xml这个配置文件

    1是因为,对于正常的servlet,其只会在第一次发请求的时候才会被创建,而我们配置load-on-startup,可以让该servlet在服务器启动的时候就创建,该servlet一旦创建,就可以帮我们创建srpingmvc.xml这个配置文件

    配置文件springmvc.xml一旦加载,其中的注解扫描就可以正常进行。HelloController就可以被扫到,其中的requestmapping注解就可以将特定的request映射到相应的方法

    6.跳转页面

    HelloController这个Controller创建,其中的requestmapping映射的方法sayHello就可以被正常调用,之后return “success” 可以让页面跳转到success.jsp(在WEB-INF下新建pages文件夹存放页面)

    success.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h3>入门成功</h3> </body> </html>

    但是这个过程需要使用视图解析器帮助页面跳转

    <!-- 配置视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"></property> <property name="suffix" value=".jsp"></property> </bean>

    配置视图解析器bean的id属性和class属性,其中class为InternalResourceViewResolver,

    其中需要配置两个参数prefix(目录)和suffix(后缀)

    最后, 开启spring mvc 框架注解的支持(现在这个入门的项目还不需要,之后会用到)

    <!-- 开启spring mvc 框架注解的支持--> <mvc:annotation-driven></mvc:annotation-driven>

    作用:springmvc的各个组件中,处理器映射器HandlerMapping、处理器适配器HandlerAdapter、视图解析器ViewResolver被称为springmvc的三大组件。配上spring mvc框架注解支持,相当于把流程中的处理器映射器HandlerMapping、处理器适配器HandlerAdapter

    之后配置tomcat的访问路径application context(可以不写,也可以写/项目名)

    如果不写

    主页为http://localhost:8080/

    点击后跳转http://localhost:8080/hello

    如果写/项目名

    主页为http://localhost:8080/springmvc1/

    点击后跳转http://localhost:8080/springmvc1/hello

    详细流程

    启动服务器,加载配置文件 DispatcherServlet对象创建springmvc.xml被加载HelloController创建成对象(默认为单例??啥意思??) 发送请求,后台处理请求

    精简版

    复杂版

    spring mvc基于组件的方式执行流程

    1.用户请求request先到达前端控制器DispatcherServlet

    2.请求查找Handler:HandlerMapping这个地方,体现在我们程序中的Controller类中的方法前加RequestMapping,其中path为/hello,同时我们在1.Request的时候带的也有路径/hello,这二者一致,说明我们的hello请求就会通过RequestMapping找到Controller中的相应的方法。

    3.返回执行链

    4.处理器适配器HandlerAdapter,采用了适配器模式,不管是任何类型的Controller,都可以得到适配,都可以执行(Controller就是Handler)

    5.执行

    6.7.返回ModelAndView,也就是本例中的success.jsp

    8.9.视图解析器通过返回的ModelAndView帮你找到相应的视图(success.jsp)返回给前端控制器DispatcherServlet

    10.渲染视图

    11.返回响应response

    最新回复(0)