SpringMVC(一):SpringMVC基础以及环境配置

本文介绍了SpringMVC的基础知识,包括其在MVC架构中的角色和处理流程。内容涉及前端控制器DispatcherServlet、处理器映射器HandlerMapping、处理器适配器HandlerAdapter等主要组件的作用,以及SpringMVC环境的搭建,包括创建Maven项目、配置pom.xml、web.xml和SpringMVC配置文件。此外,还讲述了编写处理器Handler和视图View的步骤,以及如何配置Tomcat运行项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、一个MVC模式下WEB工程的处理流程图

2、springMVC是基于MVC架构的轻量级web框架,将web开发模块化,对整体架构结构,简化开发流程。SpringMVC的请求响应流程如图:

归纳下步骤依次为:

1)用户向某个路径url,发起request请求,请求会被前端控制器(DispatcherServlet)处理。

2)前端控制器DispatcherServlet 请求处理器映射器HandlerMapping去查找Handler,可以依赖注解或者xml配置去查找。

3)处理器映射器HandlerMapping根据配置查找到想要的Handler(可能有若干Interceptor连接器),返回给前端控制器DispatcherServlet。

4)前端控制器DispatcherServlet请求处理器适配器HandlerAdapter去执行相应的Handler通常为Controller。

5)处理器适配器HandlerAdapter去执行相应的Handler。

6)Handler执行后返回给处理器适配器HandlerAdapter一个ModelAndView对象。

7)处理器适配器HandlerAdapter将接受的ModelAndView返回给前端控制器DispatcherServlet。

8)前端控制器DispatcherServlet接受ModelAndView后请求试图解析器ViewResolver对视图进行解析。

9)视图解析器ViewResolver根据view信息匹配到相应的视图结果,反馈给前端控制器DispatcherServlet。

10)前端控制器DispatcherServlet接收到view具体视图后进行视图渲染,将model中的模型数据填充到view视图中request域中,生成最终的view。

11)前端控制器DispatcherServlet项用户返回请求结果。

主要组件作用:

1)前端控制器DispatcherServlet:作用是接受用户请求,然后返回用户反馈结果,作用相当转发器和中央处理器,控制器整个流程统一调度。

2)处理器映射器HandlerMapping:作用是根据请求url路径,通过注解或者xlm配置,寻找匹配的处理器Hanler信息。

3)处理器适配器HandlerAdapter:作用是根据映射器Handler信息,按照特定规则执行相关的处理器Handler。

4)处理器Handler:作用是执行相关的处理逻辑,并返回相应的数据和视图信息,将其封装在ModelAndView对象中。

5)视图解析器ViewResolver,作用是进行解析操作,通过ModelAndView对象中的view信息将逻辑视图名解析成真正的视图view例如根据一个jsp路径返回一个真正的jsp页面

一般需要我们开发的是处理器Handler和视图view。

3、SpringMVC环境搭建

1)intellij创建new project,选择Maven下的create from archetype,选择maven-archetype-webapp,next直到完成。

整体目录结构如下,新工程main文件夹下如果没有java和resources文件夹可以直接右击创建文件夹,此时会提示创建java或者resources文件夹,若无提示则可以直接创建同名文件夹再在File--porject Structure中Modules设置相应的属性。

2)pom文件添加springmvc依赖包配置

  <properties>
    <spring.version>5.2.0.RELEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.5</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.5</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.2</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

3)配置web.xml文件

一般JSP/Servlet开发模式中,请求会映射到web.xml的配置文件中然后匹配相应的Servlet来处理并返回结构。若使用springMVC处理请求就需要在web.xml中将需要SpringMVC处理的请求拦截到专有的Servlet上,让SpringMVCk框架进行后续的处理。

<?xml version="1.0" encoding="UTF-8"?>
<web-app  version="2.5"
          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_2_5.xsd">
<!-- SpringMVC前端控制器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
<!--
contextConfigLocation配置springmvc加载的配置文件,如果不配置contextConfigLocation
默认加载的是/web-INF/servletName-servlet.xml
-->
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
<!-- *.action 访问以.action 结尾由 DispatcherServlet进行解析-->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

4)配置springMVC配置文件

<?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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
        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-4.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    
    <!-- 处理器映射器 -->
    <!-- 将bean的name作为url进行查找,需要配置Handler时指定beanName -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!-- 处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!-- 视图显示器 -->
    <!-- 解析jsp视图 -->
    <!-- 默认使用jstl的包 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
    <!-- 配置Handler -->
    <bean name="/query_test.action" class="com.leeyy.controller.FruitControllerTest"/>
</beans>

3、编写处理器Handler和视图View

SpringMVC配置文件中处理器适配器是SimpleControllerHandlerAdapter,我们自定义的Handler类要实现Controller接口。

package com.leeyy.controller;

import com.leeyy.bean.Fruits;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import java.util.ArrayList;
import java.util.List;

public class FruitControllerTest implements Controller {
    private FruitsService fruitsService = new FruitsService() ;

    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        List<Fruits> fruitsList = fruitsService.queryFruits();
        System.out.println("---");
        System.out.println(fruitsList);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("fruitsList", fruitsList);
        modelAndView.setViewName("/WEB-INF/jsp/fruits/fruit.jsp");
        return modelAndView;
    }
}
// 内部类
class FruitsService {
    public List<Fruits> queryFruits() {
        List<Fruits> fruitsList = new ArrayList<Fruits>();
        Fruits apple = new Fruits();
        apple.setName("红富士苹果");
        apple.setPrice(1.5);
        apple.setProducing_area("安徽");

        Fruits Banana = new Fruits();
        Banana.setName("香蕉");
        Banana.setPrice(2.9);
        Banana.setProducing_area("上海");
        fruitsList.add(apple);
        fruitsList.add(Banana);

        return fruitsList;
    }
}

该类中模拟了一个Service类,提供了一个queryFruits()方法,返回一个水果商品列表。Controller类中将该Service作为成员变量,在handleRequest方法中应用获取水果商品信息,并将结果绑定到ModelAndView的属性中并传递给view中。

在WEB-INF/jsp/fruits/fruit.jsp目录下创建jsp视图

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'fruit.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>
  <body>
        <h3>新鲜水果</h3>
        <table width="300px" border="1">
            <tr>
                <td>名称</td>
                <td>价格</td>
                <td>产地</td>
            </tr>

            <c:forEach items="${fruitsList}" var="fruit">
                <tr>
                    <td>${fruit.name}</td>
                    <td>${fruit.price}</td>
                    <td>${fruit.producing_area}</td>
                </tr>
            </c:forEach>
        </table>

        <h4>hello</h4>

  </body>
</html>

此外还有水果的实体类

package com.leeyy.bean;

public class Fruits {
    private String name;
    private double price;
    private String producing_area;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getProducing_area() {
        return producing_area;
    }

    public void setProducing_area(String producing_area) {
        this.producing_area = producing_area;
    }

    @Override
    public String toString() {
        return "Fruits{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", producing_area='" + producing_area + '\'' +
                '}';
    }
}

4、配置Tomcat运行

这里intelli下载了smartTomcat的插件,直接创建smartTomcat的配置Run/Debug环境

完成后点击运行,访问:http://localhost:8080/MyBatisAndSpring/query_test.action 即可看到列表信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值