springmvc入门系列(一)_快速入门案例

0. SpringMVC的工作流程图

这里写图片描述

其工作流程为:
1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(二者组成HandlerExecutionChain),并将其一并返回给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对用户进行响应

1. 使用IDE创建一个Maven web工程(如何创建略去。。)

2. 添加maven依赖

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-expression -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
  </dependencies>

3. 在web.xml文件中配置SpringMVC的DispatcherServlet

<servlet>
    <!-- Servlet名字 -->
    <servlet-name>springmvc</servlet-name>
    <!--
      Servlet对应的类:核心控制器
      核心功能是分发请求,请求会被分发给对应的处理的Java类,SpringMVC中称为handler
    -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!--
      配置Serlvet初始化参数
      DispatcherServlet 加载时会需要一个Sping MVC的配置文件,默认情况下,应用会去应用程序文件夹的
      /WEB-INF/下查找对应的[servelt-name]-servlet.xml文件,例如本例的[servelt-name]是springmvc,
      默认查找的就是/WEB-INF/springmvc-config.xml

      也可以把Spring MVC的配置文件放到应用程序文件夹中的任何地方,用init-param的子元素param-value描述

      DispatcherServlet 加载到springmvc-config.xml配置文件,解析该文件内容并根据文件配置信息创建一个
      WebApplicationContext容器对象,也称之为上下文环境。有了该容器,就可以使用IOC,AOP等功能了。
    -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/springmvc-config.xml</param-value>
    </init-param>
    <!-- 在web应用启动时立即加载 -->
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <!-- 请求对应的servlet的名字 -->
    <servlet-name>springmvc</servlet-name>
    <!-- 监听对请求域的所有请求 -->
    <url-pattern>/</url-pattern>
</servlet-mapping>

4. 创建springmvc-config.xml,配置Controller

<?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-4.2.xsd">

    <!--
        配置Handle,映射"/hello"请求
    -->
    <bean name="/hello" class="com.ghq.controller.HelloController"/>

    <!--
        处理映射器将Bean的name作为url进行查找,需要在配置Handler时指定name(即url)
    -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!--
        SimpleControllerHandlerAdapter 是一个处理器适配器,
        所有处理适配器都要实现SimpleControllerHandlerAdapter接口
    -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--
        视图解析器
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>

5. Controller的实现

package com.ghq.controller;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * HelloController是一个控制器,可以处理一个单一的请求动作
 * @author snow
 */
public class HelloController implements Controller{
    private static final Log logger = LogFactory.getLog(HelloController.class);
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        logger.info("Handler被调用");
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","Helloworld");
        mv.setViewName("/index.jsp");
        return mv;
    }
}

6. index.jsp

<html>
<body>
<h2>Hello World!</h2>
    ${requestScope.msg}
</body>
</html>

7. 部署应用,并访问

http://localhost:9090/hello

页面显示结果如下:

这里写图片描述

8. 基于注解开发

修改Controller类,代码如下:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


/**
 * HelloController是一个控制器,可以处理一个单一的请求动作
 * @author snow
 */
@Controller
public class HelloController {
    private static final Log logger = LogFactory.getLog(HelloController.class);

    /**
     * RequestMapping注解用来映射请求的URL和请求方法等,这里映射/hello
     * @return
     */
    @RequestMapping(value = "/hello")
    public ModelAndView hello() {

        logger.info("Handler被调用");
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","Hello canglaoshi");
        mv.setViewName("/index.jsp");
        return mv;
    }
}

修改springmvc-config.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--
        spring可以自动去扫描base-package下面的包或者子包下面的Java文件
        如果扫描到有Spring的相关注解类,则把这些类注册为Spring的bean
    -->
    <context:component-scan base-package="com.ghq"/>

    <!-- 配置annotation类型的处理映射器  -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.
                 RequestMappingHandlerMapping"/>

    <!-- 配置annotation类型的处处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.
                 RequestMappingHandlerAdapter"/>

    <!-- 视图解析器  -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>

重新部署项目,再次请求,访问结果略去。。

猜你喜欢

转载自blog.csdn.net/guo20082200/article/details/80191713