Spring MVC快速体验

Spring MVC 快速体验的五个步骤: 1. 配置web.xml 2. 创建Spring配置文件applicationContext.xml 3. 创建model 4. 创建controller 5. 创建视图文件userlist.jsp 6. 创建Servlet配置文件Spring-servlet.xml

1. 配置web.xml

一个web中可以没有web.xml文件,也就是说,web.xml文件并不是Web工程必须的。web.xml文件用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。 下面来看看Spring MVC中web.xml文件的配置方法:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <!-- 使用ContextLoaderListener配置时,需要告诉它Spring配置文件的未知-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!-- SpringMVC的前端控制器 -->
    <!-- 当 DispatcherServlet 载入后,会从Spring-servlet.xml文件中加载Spring应用的上下文-->
    <!-- DispatcherServlet 主要用来加载包含Web组件的bean,如控制器、视图解析器 以及 处理器映射-->
    <servlet>
        <servlet-name>Springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:Spring-servlet.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>Springmvc</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>

    <!--配置上下文载入器-->
    <!-- 上下文载入器载入除DispatcherServlet加载的其它应用中的bean。这些bean通常是驱动应用后端的中间层和数据层组件 -->
    <!-- 最常用的上下文载入器是一个Servlet监听器,其名称为ContextLoaderListener-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

Spring的MVC之所以必须要配置web.xml,其实最关键的是要配置两个地方。

  • contextConfigLocation:Spring的核心就是配置文件,可以说配置文件是Spring中必不可少的东西,而这个参数就是使Web和Spring的配置文件相结合的一个关键配置。
  • DispatcherServlet:包含了SpringMVC的请求逻辑,Spring使用此类拦截Web请求并进行相应的逻辑处理。DispatcherServlet 将试图从一个叫做 <servlet-name>-servlet.xml的文件中载入应用上下文,其默认位于WEB-INF目录下。也可以通过contextConfigLocation来自定义位置。

2. 创建Spring配置文件applicationContext.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"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

InternalResourceViewResolver是一个辅助Bean,会在ModelAndView返回的视图名前加上prefix指定的前缀,再在最后加上suffix指定的后缀。

3. 创建model

模型对于SpringMVC来说必不可少,如果处理程序非常简单,完全可以忽略。模型创建主要的目的就是承载数据,使数据传输更加方便。

public class User {
    private String username;
    private Integer age;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

4. 创建controller

控制器用于处理Web请求,每个控制器都对应着一个逻辑处理。

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

public class UserController extends AbstractController {
    protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        List<User> userList = new ArrayList<User>();
        User userA = new User();
        User userB = new User();
        userA.setUsername("zhangsan");
        userA.setAge(12);

        userB.setUsername("lisi");
        userB.setAge(12);
        userList.add(userA);
        userList.add(userB);
        return new ModelAndView("userlist", "users", userList);
    }
}

请求的最后返回了ModelAndView类型的实例。ModelAndView类在SpringMVC中占有很重要的地位,控制器执行方法都必须返回一个ModelAndView,ModelAndView对象保存了视图以及视图显示的模型数据,例如其中的参数如下。

  • 第一个参数userlist:视图组件的逻辑名称。这里视图的逻辑名称就是userlist,视图解析器会使用该名称查找实际的View对象。
  • 第二个参数users:传递给视图的,模型对象的名称。
  • 第三个参数userList:传递给视图的,模型对象的值。

5. 创建视图文件userlist.jsp。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>This is SpringMVC demo pages</title>
</head>
<body>
    <c:forEach items="${users}" var="user">
        <c:out value="${user.username}"></c:out>
        <br>
        <c:out value="${user.age}"></c:out>
        <br>
    </c:forEach>
</body>
</html>

视图文件用于展现请求处理结果,通过对JSTL的支持,可以很方便的展现在控制器中放入ModelAndView中的处理结果数据。

6. 创建Servlet配置文件Spring-servlet.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/userlist.htm">userController</prop>
            </props>
        </property>
    </bean>
    <!-- 这里的 id="userController"对应的是<bean id="simpleUrlMapping">中的<prop>里面的value-->
    <bean id="userController" class="UserController"/>
</beans>

因为SpringMVC是基于Servlet的实现,所以在Web启动的时候,服务器会首先尝试加载对应于Servlet的配置文件,而为了让项目更加模块化,通常我们将Web部分的配置都存放于此配置文件中。 至此,已经完成了SpringMVC的搭建,启动服务器,输入网址 http://localhost:8080/SpringMVC/userlist.html。 可以看到服务器返回界面,如下图所示。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

Spring Boot 2.0迁移指南主要注意点

Spring官方的Spring Boot 2变动指南,主要是帮助您将应用程序迁移到Spring Boot 2.0,变化部分还是很多很细节的,摘录主要点如下: S...

10640
来自专栏我的技术专栏

在Linux上如何查看Python3自带的帮助文档?

14630
来自专栏代码拾遗

Spring Cloud 教程 - Eureka Server

将groupId 为 org.springframework.cloud,artifactId 为spring-cloud-starter-netflix-eu...

21940
来自专栏编程

Spring-Data-REST轻松搞定RESTfulAPI

背景 昨天同事问我有没有研究过 ,没有~但是看名字就大概知道是做什么的(命名的重要性),因为之前有了解过 ,过一会发过两个截图过来。真的很强大,感觉这个在使用...

28760
来自专栏杂烩

分布式服务框架之Dubbo整合Spring项目(一)

        先说一下架构,项目采用Maven管理依赖,总共三个项目,一个是接口包common-inter,一个是服务提供者provider,最后一个是服务消...

23310
来自专栏芋道源码1024

注册中心 Eureka 源码解析 —— 项目结构简介

本文主要基于 Eureka 1.8.X 版本 1. 概述 1.1 简介 1.2 项目结构 2. eureka-client 2.1 eureka-client-...

47680
来自专栏Java技术栈

Spring Boot开启的2种方式

Spring Boot依赖 使用Spring Boot很简单,先添加基础依赖包,有以下两种方式 1. 继承spring-boot-starter-parent项...

34970
来自专栏Java后端技术

context:component-scan标签的use-default-filters属性的作用以及原理分析

  我们在Spring+SpringMVC+Mybatis的集成开发中,经常会遇到事务配置不起作用等问题,那么本文就来分析下出现这种问题可能的原因以及解决方式。

9740
来自专栏ImportSource

Spring Boot 2.0 新特性和发展方向

以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持。 内嵌容器包结构调整 为了支持react...

45590
来自专栏Danny的专栏

【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

16930

扫码关注云+社区

领取腾讯云代金券