SpringMVC入门

文章目录

    • 1.SpringMVC
      • [1.1 SpringMVC的作用](#1.1 SpringMVC的作用)
      • [1.2 Spring Web MVC处理请求的流程](#1.2 Spring Web MVC处理请求的流程)
    • 2.SpringMVC的入门程序
      • 2.1环境搭建
      • [2.2 导入SpringMVC的配置文件](#2.2 导入SpringMVC的配置文件)
      • [2.3 配置前端控制器](#2.3 配置前端控制器)
      • [2.4 SpringMVC的相关配置](#2.4 SpringMVC的相关配置)
        • [2.4.1 配置配置处理器映射器](#2.4.1 配置配置处理器映射器)
        • [2.4.2 配置处理器适配器](#2.4.2 配置处理器适配器)
        • [2.4.3 开发Handler](#2.4.3 开发Handler)
        • [2.4.4 配置Handler](#2.4.4 配置Handler)
        • [2.4.5 配置视图解析器](#2.4.5 配置视图解析器)
        • [2.4.6 开发视图](#2.4.6 开发视图)

1.SpringMVC

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web 框架,即使用了MVC架构模式的思想,将web 层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。

1.1 SpringMVC的作用

  • 让我们能非常简单的设计出干净的Web 层和薄薄的Web 层;

  • 进行更简洁的Web 层的开发;请求参数是映射到方法的参数上

  • 天生与Spring框架集成(如IoC容器、AOP等);

  • 提供强大的约定大于配置的契约式编程支持;

  • 能简单的进行Web 层的单元测试;

  • 支持灵活的URL到页面控制器的映射;

  • 非常容易与其他视图技术集成,如Velocity、FreeMarker 等等,因为模型数据不放在特定的API 里,而是放在一个Model里(Map 数据结构实现,因此很容易被其他框架使用);

  • 非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API;

  • 提供一套强大的JSP标签库,简化JSP开发;

  • 支持灵活的本地化、主题等解析;

  • 更加简单的异常处理;

  • 对静态资源的支持;

  • 支持Restful风格。

1.2 Spring Web MVC处理请求的流程



执行过程:

第一步:发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求HandlerMapping查找

​ 可以根据xml配置、注解进行查找

第三步:处理器映射器HandlerMapping向前端控制器返回Handler

第四步:前端控制器调用处理器适配器去执行Handler

第五步:处理器适配器去执行Handler

第六步:Handler执行完成给适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView

​ ModelAndView是springmvc框架的一个底层对象,包括 Model和view

第八步:前端控制器请求视图解析器去进行视图解析

​ 根据逻辑视图名解析成真正的视图(jsp)

第九步:视图解析器向前端控制器返回View

第十步:前端控制器进行视图渲染

​ 视图渲染将模型数据(在ModelAndView对象中)填充到request域

第十一步:前端控制器向用户响应结果

常用组件:

1、前端控制器DispatcherServlet(不需要程序员开发)

作用: 接收请求,响应结果,相当于转发器,中央处理器。

有了DispatcherServlet减少了其它组件之间的耦合度。

2、处理器映射器HandlerMapping(不需要程序员开发)

作用:根据请求的url查找Handler

3、处理器适配器HandlerAdapter(不需要程序员开发)

作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

4、处理器Handler(需要程序员开发)

作用: 编写处理请求的逻辑代码

注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

5、视图解析器View resolver(不需要程序员开发)

作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

6、视图View(需要程序员开发jsp)

View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)

2.SpringMVC的入门程序

2.1环境搭建

我们首先创建一个maven的web项目。

添加springMvc的依赖:

xml 复制代码
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.15.RELEASE</version>
</dependency>
 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>3.0.1</version>
     <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>

2.2 导入SpringMVC的配置文件

在src/main/resources目录下创建springmvc的配置文件。

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"
       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/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    

</beans>

2.3 配置前端控制器

在web.xml中配置前端控制器:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">

    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--如果不配置contextConfigLocation,默认查找springmvc的配置文件为:WEB-INF/servlet名字-servlet.xml
            比如我们这查找的就是:WEB-INF/springMVC-servlet.xml
         -->
        <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有三种配置方式:
              1. *.action, springMVC的前端控制器只处理以action结尾的url请求
              2. / 所有请求都由springMVC的前端控制器处理,但是对于静态资源我们不然让前端控制器处理,所以我们需要进行配置,
                  使用这种配置方式,可以实现restful风格
              3. /* 错误
         -->
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
</web-app>

拦截方式:

1、拦截固定后缀的url,比如设置为 .do、.action, 例如:/user/add.action

此方法最简单,不会导致静态资源(jpg,js,css)被拦截。

2、拦截所有,设置为/,例如:/user/add /user/add.action

此方法可以实现REST风格的url,很多互联网类型的应用使用这种方式。

但是此方法会导致静态文件(jpg,js,css)被拦截后不能正常显示。需要特殊处理。

3、拦截所有,设置为/*,此设置方法错误,因为请求到Action,当action转到jsp时再次被拦截, 提示不能根据jsp路径mapping成功。

2.4 SpringMVC的相关配置

2.4.1 配置配置处理器映射器

在springmvc.xml文件配置如下:

xml 复制代码
   <!--处理器映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

BeanNameUrlHandlerMapping:表示将定义的Bean名字作为请求的url,需要将编写的controller在spring容器中进行配置,且指定bean的name为请求的url,且必须以.action结尾。

2.4.2 配置处理器适配器

在springmvc.xml文件配置如下:

xml 复制代码
<!--处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

SimpleControllerHandlerAdapter:即简单控制器处理适配器,所有实现了org.springframework.web.servlet.mvc.Controller 接口的Bean作为Springmvc的后端控制器。

2.4.3 开发Handler
java 复制代码
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloWorldController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		//1.创建ModelAndView,准备填充数据、设置视图
		ModelAndView modelAndView = new ModelAndView();
		//2.填充数据
		modelAndView.addObject("hello", "Hello SpringMVC");
		//3.添加视图
		modelAndView.setViewName("index");
		//4.返回ModelAndView
		return modelAndView;
	}
}

org.springframework.web.servlet.mvc.Controller:处理器必须实现Controller 接口。

ModelAndView:包含了模型数据及逻辑视图名

2.4.4 配置Handler

在springmvc.xml文件配置如下:

xml 复制代码
 <!--配置处理器-->
    <bean id="helloWorldController" name="/hello.action" class="com.fs.handler.HelloWorldController"/>

name="/hello.action":前边配置的处理器映射器为BeanNameUrlHandlerMapping,如果请求的URL 为"上下文/hello.action"将会成功映射到HelloWorldController控制器。

2.4.5 配置视图解析器
xml 复制代码
<!-- 配置视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
		<property name="prefix" value="/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

InternalResourceViewResolver:支持JSP视图解析

viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar 包;

prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为:

前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为hello,则最终返回的jsp视图地址 "/index.jsp"

2.4.6 开发视图

在index.jsp页面使用EL表达式获取ModelAndView中model的值:

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<body>
<h2>Hello World!</h2>
<h2>${hello}</h2>
</body>
</html>

2.4.7 部署到Tomcat,进行测试

相关推荐
hqxstudying22 分钟前
java依赖注入方法
java·spring·log4j·ioc·依赖
春生野草1 小时前
关于SpringMVC的整理
spring
Bug退退退1232 小时前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq
hello早上好3 小时前
CGLIB代理核心原理
java·spring
先睡9 小时前
Redis的缓存击穿和缓存雪崩
redis·spring·缓存
Bug退退退12313 小时前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq
booooooty19 小时前
基于Spring AI Alibaba的多智能体RAG应用
java·人工智能·spring·多智能体·rag·spring ai·ai alibaba
极光雨雨19 小时前
Spring Bean 控制销毁顺序的方法总结
java·spring
Spirit_NKlaus20 小时前
解决HttpServletRequest无法获取@RequestBody修饰的参数
java·spring boot·spring
lwb_011820 小时前
SpringCloud——Gateway新一代网关
spring·spring cloud·gateway