SpringMvc入门

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Spring与Web环境的集成

1.ApplicationContext应用上下文的获取方式

分析

之前获取应用上下文对象每次都是从容器中获取编写时都需要new ClasspathXmlApplicationContext(Spring配置文件)这样的弊端就是配置加载多次应用上下文就创建多次。

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

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

实现

1.在web.xml中导入ContextLoaderListener监听器导入Spring-web坐标

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

        <1>导入Spring集成web的坐标

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

        <2>配置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>

        <3> 通过工具获取应用上下文对象

        将app存到servletConxt域中

         优化的目的为了解耦减小代码之间的耦合。

public void contextInitialized(ServletContextEvent servletContextEvent) {

       /* ServletContext servletContext = servletContextEvent.getServletContext();
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        servletContext.setAttribute("app",app);
        System.out.println("spring容器创建完毕");*/

        //优化后
       /* ServletContext servletContext = servletContextEvent.getServletContext();
        //读取web.xml中全局参数
            //getInitParameter返回包含指定上下文范围初始化参数值的 String如果参数不存在则返回 null
        String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");
        ApplicationContext app = new ClassPathXmlApplicationContext(contextConfigLocation);
        //将Spring的应用上下文对象存储到ServletContext域中
        servletContext.setAttribute("app",app);
        System.out.println("spring 容器创建完毕");*/
        ServletContext servletContext = servletContextEvent.getServletContext();
        String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");
        ApplicationContext app = new ClassPathXmlApplicationContext(contextConfigLocation);
        servletContext.setAttribute("app",app);

    }

        然后取出使用

  @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = req.getServletContext();
        /*ApplicationContext app = (ApplicationContext) servletContext.getAttribute("app");*/
        /*ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);*/
        ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
        UserService userService = (UserService) app.getBean("userService");
        userService.save();
    }

SpringMvc简介

MVC是一种软件架构的思想将软件按照模型、视图、控制器来划分

MModel模型层指工程中的JavaBean作用是处理数据

JavaBean分为两类

  • 一类称为实体类Bean专门存储业务数据的如 Student、User 等

  • 一类称为业务处理 Bean指 Service 或 Dao 对象专门用于处理业务逻辑和数据访问。

VView视图层指工程中的html或jsp等页面作用是与用户进行交互展示数据

CController控制层指工程中的servlet作用是接收请求和响应浏览器

MVC的工作流程用户通过视图层发送请求到服务器在服务器中请求被Controller接收Controller调用相应的Model层处理请求处理完毕将结果返回到ControllerController再根据请求处理的结果找到相应的View视图渲染数据后最终响应给浏览器

SpringMvc的开发步骤

1.导入SpringMvc相关坐标

2.配置SpringMvc核心控制器DispathcerServlet

3.创建Controller类和视图页面

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

5.配置SpringMvc核心文件spring-mvc.xml

6.客户端发起请求测试

        (1)导入Spring和SpringMvc的坐标

<!--    spring坐标-->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.0.5.RELEASE</version>
          <scope>compile</scope>
      </dependency>
<!--    springmvc坐标-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.5.RELEASE</version>
    </dependency>

     导入jsp和servlet坐标

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.2.1</version>
      <scope>provided</scope>
    </dependency>

        (2)在web.xml配置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:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

        (3)创建Controller和业务方法


public class UserController {
    public String save(){
        System.out.println("Controller running ...");
        return "success";
    }
}

        创建试图页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>success</h1>
</body>
</html>

        (4)配置注解

@Controller
@RequestMapping("/userController")
public class UserController {
    @RequestMapping("/quick")
    public String save(){
        System.out.println("Controller running ...");
        return "success";
    }
}

        (5)创建spring-mvc.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: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/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--controller组件扫描-->
   <!-- <context:component-scan base-package="com.lin.controller"/>-->
    <context:component-scan base-package="com.lin">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!--配置内部资源解释器 我们可以通过属性注入的方式修改视图的的前后缀-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>

springmvc流程图示

 SpringMvc的组件解析

1.SpringMvc的执行流程

 执行流程的描述

1.用户发送请求至前端控制器DispatcherServlet。
2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3. 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)生成处理器对象及处理器拦截器(如果 有则生成)一并返回给DispatcherServlet。
4. DispatcherServlet调用HandlerAdapter处理器适配器。
5.HandlerAdapter经过适配调用具体的处理器(Controller也叫后端控制器)。
6. Controller执行完成返回ModelAndView。
7 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9.ViewReslover解析后返回具体View。
10. DispatcherServlet根据View进行渲染视图即将模型数据填充至视图中。DispatcherServlet响应用户。

主要的组件解析

1. 前端控制器DispatcherServlet
用户请求到达前端控制器它就相当于 MVC 模式中的 CDispatcherServlet 是整个流程控制的中心由
它调用其它组件处理用户的请求DispatcherServlet 的存在降低了组件之间的耦合性。
2. 处理器映射器HandlerMapping
HandlerMapping 负责根据用户请求找到 Handler 即处理器SpringMVC 提供了不同的映射器实现不同的
映射方式例如配置文件方式实现接口方式注解方式等。
3. 处理器适配器HandlerAdapter
通过 HandlerAdapter 对处理器进行执行这是适配器模式的应用通过扩展适配器可以对更多类型的处理
器进行执行。
4. 处理器Handler
它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由
Handler 对具体的用户请求进行处理。
5. 视图解析器View Resolver
View Resolver 负责将处理结果生成 View 视图View Resolver 首先根据逻辑视图名解析成物理视图名即
具体的页面地址再生成 View 视图对象最后对 View 进行渲染将处理结果通过页面展示给用户。
6. 视图View
SpringMVC 框架提供了很多的 View 视图类型的支持包括jstlView、freemarkerView、pdfView等。最
常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户需要由程
序员根据业务需求开发具体的页面

注解解析

@RequestMapping
作用用于建立请求 URL 和处理请求方法之间的对应关系
位置
  类上请求URL 的第一级访问目录。此处不写的话就相当于应用的根目录
  方法上请求 URL 的第二级访问目录与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
属性
  value 用于指定请求的URL。它和path属性的作用是一样的
  method 用于指定请求的方式
  params 用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样
例如
  params = {"accountName"} 表示请求参数必须有accountName
  params = {"moeny!100"} 表示请求参数中money不能是100
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring