SpringMVC——入门一

1. Spring与Web环境集成

1.1 ApplicationContext应用上下文获取方式

应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的,但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(spring配置文件) ,这样的弊端是配置文件加载多次,应用上下文对象创建多次。

在Web项目中,可以使用ServletContextListener监听Web应用的启动,我们可以在Web应用启动时,就加载Spring的配置文件,创建应用上下文对象ApplicationContext,在将其存储到最大的域servletContext域中,这样就可以在任意位置从域中获得应用上下文ApplicationContext对象了。

1.2 Spring提供获取应用上下文的工具

上面的分析不用手动实现,Spring提供了一个监听器ContextLoaderListener就是对上述功能的封装,该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中,提供了一个客户端工具WebApplicationContextUtils供使用者获得应用上下文对象。

所以我们需要做的只有两件事:

①在web.xml中配置ContextLoaderListener监听器(导入spring-web坐标)

②使用WebApplicationContextUtils获得应用上下文对象ApplicationContext

1.3 导入Spring集成web的坐标

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.1.2.RELEASE</version>
</dependency>

1.4 配置ContextLoaderListener监听器

<!--全局参数-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--Spring的监听器-->
<listener>
	<listener-class>
       org.springframework.web.context.ContextLoaderListener
   </listener-class>
 </listener>

1.5 通过工具获得应用上下文对象

ApplicationContext applicationContext =    
    WebApplicationContextUtils.getWebApplicationContext(servletContext);
    Object obj = applicationContext.getBean("id");

知识要点

Spring集成web环境步骤

​ ①配置ContextLoaderListener监听器

​ ②使用WebApplicationContextUtils获得应用上下文

注意:

此种方式是集成spring和web,springmvc和web集成不是此方式

2. SpringMVC的简介

2.1 SpringMVC概述

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用Spring的 Spring MVC 框架或集成其他 MVC 开发框架,如 Struts1(现在一般不用),Struts2 等。

SpringMVC 已经成为目前最主流的MVC框架之一,并且随着Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持 RESTful 编程风格的请求。

Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:

在这里插入图片描述

2.2 Web MVC

mvc设计模式在b/s系统下应用:

1、 用户发起request请求至控制器(Controller)控制接收用户请求的数据,委托给模型进行处理

2、 控制器通过模型(Model)处理数据并得到处理结果模型通常是指业务逻辑

3、 模型处理结果返回给控制器

4、 控制器将模型数据在视图(View)中展示web中模型无法将数据直接在视图上显示,需要通过控制器完成。如果在C/S应用中模型是可以将数据在视图中展示的。

5、 控制器将视图response响应给用户通过视图展示给用户要的数据或处理结果。

在这里插入图片描述

2.3 SpringMVC执行流程图示

SpringMVC执行流程同MVC设计模式:

1、 用户发送请求至前端控制器DispatcherServlet。

2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。

4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器。

5、 执行处理器(Controller,也叫后端控制器)。

6、 Controller执行完成返回ModelAndView。

7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

9、 ViewReslover解析后返回具体View。

10、 DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

11、 DispatcherServlet响应用户。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvYZ70jV-1569590860690)(D:\Itheima\框架\springmvc-day01\img\3.png)]

2.4 SpringMVC的开发步骤

①导入SpringMVC相关坐标

 <dependencies>
        <!--spring核心坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.2.RELEASE</version>
        </dependency>
        <!--springmvc 坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.2.RELEASE</version>
        </dependency>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
</dependencies>

②在web.xml中配置SpringMVC前端控制器(核心控制器DispathcerServlet)

  <!-- springmvc前端控制器 -->
  <servlet>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- 
	contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等)
  	如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml,可以创建后放入/WEB-INF目录下)
  	 -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<!-- 
  	第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析
  	第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让			DispatcherServlet进行解析
  	使用此种方式可以实现 RESTful风格的url
  	第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,
  	仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错。
  	 -->
  	<url-pattern>/</url-pattern>
  </servlet-mapping>

<!--可以加一个处理 中文乱码 post请求-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

③创建Controller类和视图页面

public class UserController {
    public String show(){
        System.out.println("show running...");
        return "index";
    }
}

④使用注解配置Controller类中业务方法的映射地址

@Controller
@RequestMapping("/demo")
public class UserController {
    @RequestMapping("/show")
    public String show(){
        System.out.println("show running...");
        return "index";
    }
}

⑤配置SpringMVC核心文件 spring-mvc.xml

<!--组件扫描-->
<context:component-scan base-package="com.itheima"/>

<!--springMVC注解驱动-->
<mvc:annotation-driven />

<!--内部资源视图解析器ViewReslover-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 前缀 index -> /index -->
    <property name="prefix" value="/"/>
    <!-- 后缀 /index -> /index-->
    <property name="suffix" value=".jsp"/>
</bean>

⑥客户端发起请求测试

3. SpringMVC的组件解析

3.1 SpringMVC组件解析

  1. 前端控制器:DispatcherServlet

​ 用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由

它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。

  1. 处理器映射器:HandlerMapping

​ HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的

映射方式,例如:配置文件方式,实现接口方式,注解方式等。

  1. 处理器适配器:HandlerAdapter

​ 通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理

器进行执行。

  1. 处理器:Handler

​ 它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由

Handler 对具体的用户请求进行处理。

  1. 视图解析器:View Resolver

​ View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。

  1. 视图:View

​ SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

组件中我们可以配置的有五个:

web.xml中1个:

<!--1 springmvc前端控制器 -->
  <servlet>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>

springmvc.xml核心配置文件中4个:

<!--1 配置处理器适配器 -->
	<!-- 处理器适配器 所有处理器适配器都实现 HandlerAdapter接口 -->
	<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

<!--2 配置处理器映射器 -->
	<!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url) 
	所有的映射器都实现 HandlerMapping接口。-->
	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

<!--3 配置处理器 -->
 	<!--配置Handler 
	SimpleControllerHandlerAdapter要求自己创建controller类必须实现Controller接口-->
    <bean name="/findAll" class="com.itcast.controller.UserController"/>

<!--4 配置视图解析器 -->
    <!--内部资源视图解析器InternalResourceViewReslover-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀 index -> /pages/index -->
        <property name="prefix" value="/pages/"/>
        <!-- 后缀 /index -> /pages/index.jsp -->
        <property name="suffix" value=".jsp"/>
    </bean>

3.2 SpringMVC注解解析

使用注解时,需要在springmvc.xml核心配置文件中引入mvc命名空间再配置组件扫描springMVC注解驱动

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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/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.itheima"/>

<!--springMVC注解驱动-->
<mvc:annotation-driven />
    
</beans>

@RequestMapping

  • 作用:用于建立请求 URL 和处理请求方法之间的对应关系

  • 位置:

​ **类上:**请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录

​ **方法上:**请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径

  • 属性:

    • value:用于指定请求的URL。它和path属性的作用是一样的。

    • method:用于指定请求的方式(枚举)。

    • params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样。

  • 例如:

​ params = {“userName”},表示请求参数必须有userName。

​ params = {“moeny!100”},表示请求参数中money不能是100。

@Controller
@RequestMapping("/demo")
public class UserController {

    @RequestMapping(value = "/show",params = {"userName"},method = RequestMethod.GET)
    public String show(){
        System.out.println("show running...");
        return "index";
    }
}

3.3 SpringMVC的XML配置解析

SpringMVC有默认组件配置,默认组件都是DispatcherServlet.properties配置文件中配置的,该配置文件地址org/springframework/web/servlet/DispatcherServlet.properties,该文件中配置了默认的视图解析器,如下:

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

翻看该解析器源码,可以看到该解析器的默认设置,如下:

REDIRECT_URL_PREFIX = "redirect:"  --重定向前缀
FORWARD_URL_PREFIX = "forward:"    --转发前缀(默认值)
prefix = "";     --视图名称前缀
suffix = "";     --视图名称后缀

视图解析器:我们可以通过属性注入的方式修改视图的的前后缀。

<!--内部资源视图解析器InternalResourceViewReslover-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 前缀 index -> /pages/index -->
    <property name="prefix" value="/pages/"/>
    <!-- 后缀 /index -> /pages/index.jsp -->
    <property name="suffix" value=".jsp"/>
</bean>

3.4 知识要点

  • SpringMVC的相关组件
    • 前端控制器:DispatcherServlet
    • 处理器映射器:HandlerMapping
    • 处理器适配器:HandlerAdapter
    • 处理器:Handler
    • 视图解析器:View Resolver
    • 视图:View

SpringMVC的注解和配置

  • 请求映射注解:@RequestMapping

  • 视图解析器配置:

    • REDIRECT_URL_PREFIX = “redirect:”
    • FORWARD_URL_PREFIX = “forward:”
    • prefix = “”;
    • suffix = “”;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值