概述

前文记录了MVC模式和Spring MVC的初步认识,现在记录创建一个项目,配置Spring MVC,编写接口程序。

创建项目


打开IntelliJ IDEA,点击“File->New->Project...”,在打开的界面中左侧选择“Maven”,勾选“Create from archetype”,选中“maven-archetype-webapp”,点击“Next”:



填写GroupId等信息填写完整,点击“Next”:



配置好本机安装的maven目录,点击“Next”:



设置好项目存放目录,点击“Finish”:



maven需要下载相应的依赖,稍后片刻,创建完成,目录结构如下:



此时目录结构是缺失的,需要进行完善,点击“File->Project Structure...”,左侧选中“Modules”,点击“Sources”:



选中“main”目录,右键菜单中点击“New Folder...”,新建一个名为“java”的文件夹:



选中“java”文件夹,点击上方“Sources”按钮,可以看到“java”文件夹变色,并已被标记为“Source Folders”文件夹:



选中“main”目录,右键菜单中点击“New Folder...”,新建一个名为“resources”的文件夹:



选中“resources”文件夹,点击上方“Resources”按钮,可以看到“resources”文件夹标识变更,并已被标记为“Resources Folders”文件夹:



选中“src”目录,右键菜单中点击“New Folder...”,新建一个名为“test”的文件夹,选中“test”目录,右键菜单中点击“New Folder...”,新建一个名为“java”的文件夹:



选中“java”文件夹,点击上方“test”按钮,可以看到“java”文件夹变色,并已被标记为“Test Source Folders”文件夹:



然后创建包,选中java目录,右键“New->Package”,输入包名“com.snow.dcl.controller”,点击“确定”:



至此项目目录结构就配置完整了。

配置Tomcat


Tomcat配置前文已经记录过了,此处不做重复记录(前文连接:https://www.cnblogs.com/Dcl-Snow/p/10548725.html)。

添加Spring MVC依赖


打开pom文件,在<dependencies>标签中添加如下依赖:

  1 <dependency>
2 <groupId>org.springframework</groupId>
3 <artifactId>spring-webmvc</artifactId>
4 <version>4.3.10.RELEASE</version>
5 </dependency>
6 <dependency>
7 <groupId>javax.servlet</groupId>
8 <artifactId>javax.servlet-api</artifactId>
9 <version>4.0.1</version>
10 </dependency>


基于配置的控制器实例


配置前端控制器DispatcherServlet


DispatcherServlet的核心功能是分发请求,请求会被分发给对应处理的Java类,称为Handle,在Spring 2.5版本以前开发一个Handle必须实现org.springframework.web.servlet.mvc.Controller接口,Controller接口必须实现ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception方法,Controller接口的实现类可以通过该方法传递参数访问对应请求的HttpServletRequest和HttpServletResponse对象,请求处理完成后,返回一个包含模型对象和视图路径的ModelAndView对象;在Spring 2.5版本新增了可基于注解的控制器,即不需要实现Controller接口,通过注释类型来描述即可完成功能。

先不使用**注解**的方式进行记录,展开项目的目录结构,双击打开web.xml文件,替换为下面内容:

  1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
5 version="3.1">
6
7 <display-name>Archetype Created Web Application</display-name>
8
9 <!--welcome pages-->
10 <welcome-file-list>
11 <welcome-file>index.jsp</welcome-file>
12 </welcome-file-list>
13
14 <!--配置Spring MVC DispatcherServlet-->
15 <servlet>
16 <servlet-name>springMVC</servlet-name>
17 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
18 <init-param>
19 <!--配置/WEB-INF目录下的springmvc-servlet.xml作为mvc的配置文件-->
20 <param-name>contextConfigLocation</param-name>
21 <param-value>/WEB-INF/springmvc-servlet.xml</param-value>
22 </init-param>
23 <load-on-startup>1</load-on-startup>
24 <async-supported>true</async-supported>
25 </servlet>
26 <!--配置Spring MVC DispatcherServlet拦截所有请求-->
27 <servlet-mapping>
28 <servlet-name>springMVC</servlet-name>
29 <url-pattern>/</url-pattern>
30 </servlet-mapping>
31 </web-app>
32

然后配置springmvc-servlet.xml,在WEB-INF目录下右键“New->File”创建springmvc-servlet.xml,双击打开该文件,填写以下内容:

  1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
6
7 <!--配置Handle,映射"/hello"请求-->
8 <bean name="/hello" class="com.snow.dcl.controller.HelloController"/>
9 <!--将bean的name作为url进行查找-->
10 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
11 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
12 <!--视图解析器-->
13 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
14
15 </beans>
16

配置文件内容含义:

1.首先声明了HelloController业务控制器类,并将其映射到/hello请求。

2.配置了处理映射器BeanNameUrlHandlerMapping,以Bean的名称作为url进行查找。

3.配置了处理器适配器SimpleControllerHandlerAdapter,对HelloController类的handleRequest方法进行调用。

4.配置视图解析器InternalResourceViewResolver解析视图,将view呈现给用户。

注意:Spring 4.0版本之后,处理映射器、处理器适配器、视图解析器不需要进行配置,Spring会提供默认配置进行使用,此处进行配置是为了理解原理。

在“com.snow.dcl.controller”包下右键“New->Java Class”,创建一个名为“HelloController”的类,编写如下代码:

  1 public class HelloController implements Controller {
2
3 @Override
4 public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
5 ModelAndView modelAndView = new ModelAndView();
6 modelAndView.addObject("message", "Hello!");
7 modelAndView.setViewName("/WEB-INF/content/welcome.jsp");
8 return modelAndView;
9 }
10
11 }
12

HelloController是实现了Controller接口的控制器,处理请求动作;handleRequest是必须实现的方法,该方法的参数对应请求的HttpServletRequest和HttpServletResponse,必须返回一个包含视图名或视图名和模型的ModelAndView对象,此处返回的模型中包含message字符串对象,返回的视图路径/WEB-INF/content/welcome.jsp,即请求被转发到welcome.jsp。

选中WEB-INF目录,右键“New->Directory”,命名为“content”,然后同样方式在该目录中创建welcome.jsp,文件中编写如下代码:

  1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
5 <title>welcome</title>
6 </head>
7 <body>
8 ${requestScope.message}
9 </body>
10 </html>

此处使用JSP的EL表达式${requestScope.message}来获取HelloController的ModelAndView对象中message的值并显示在浏览器中。

测试


启动TomcatServer,启动完成后,打开浏览器输入:(http://localhost:8080/hello),访问成功。

基于注解的控制器实例


Spring 2.5版本后,增加了基于注解的控制器,即不需要实现Controller接口,通过注解即可实现功能。

修改HelloController类


打开HelloController类文件,代码修改如下:

  1 @Controller
2 public class HelloController {
3
4 @RequestMapping(value = "/hello")
5 public ModelAndView hello() {
6 ModelAndView modelAndView = new ModelAndView();
7 modelAndView.addObject("message", "Hello!");
8 modelAndView.setViewName("/WEB-INF/content/welcome.jsp");
9 return modelAndView;
10 }
11
12 }
13

HelloController是一个基于注解的控制器,使用@Controller注解标示,@RequestMapping注解用来映射一个请求和请求的方法,value = "/hello"表示请求由hello方法进行处理,方法返回一个包含视图名或视图名和模型的ModelAndView对象。

修改Spring MVC的配置文件


打开springmvc-servlet.xml,内容修改如下:

  1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:context="http://www.springframework.org/schema/context"
5 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">
6
7 <!--spring可以自动扫描base-package设置的包或子包下的java类,如果扫描到有spring相关注解的类,则注册为spring的bean-->
8 <context:component-scan base-package="com.snow.dcl.controller"/>
9 <!--配置annotation类型的映射处理器-->
10 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
11 <!--配置annotation类型的处理器适配器-->
12 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
13 <!--视图解析器-->
14 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
15
16 </beans>
17

Spring的扫描机制会自动扫描com.snow.dcl.controller包下使用了@Controller注解的控制器类,配置的RequestMappingHandlerMapping映射处理器处理会根据请求查找映射,配置的RequestMappingHandlerAdapter来完成对@RequestMapping注解的方法的调用,配置的InternalResourceViewResolver解析视图呈现给用户。

注意:Spring 4.0版本之后,处理映射器、处理器适配器会有跟简单的方式进行配置,此处进行配置是为了理解原理。

测试


启动TomcatServer,启动完成后,打开浏览器输入:(http://localhost:8080/hello),访问成功。

Spring MVC接口实例的更多相关文章

  1. Spring MVC框架实例

    Spring  MVC 背景介绍 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,能够选择是使用内置的 Spring Web 框架还是 ...

  2. 换一种方式编写 Spring MVC 接口

    1. 前言 通常我们编写 Spring MVC 接口的范式是这样的: @RestController @RequestMapping("/v1/userinfo") public ...

  3. Mock测试你的Spring MVC接口

    1. 前言 在Java开发中接触的开发者大多数不太注重对接口的测试,结果在联调对接中出现各种问题.也有的使用Postman等工具进行测试,虽然在使用上没有什么问题,如果接口增加了权限测试起来就比较恶心 ...

  4. Spring MVC(二)--Spring MVC登陆实例

    本文通过一个简单的登陆实例实现Spring MVC的流程,同时整合 MyBatis使用,流程是这样的: 1.访问一个URL进入登陆界面 2.输入正确的用户名和密码,成功则进入index页面,否则留在登 ...

  5. Spring MVC Framework 实例

    一 SpringMVC基础入门,创建一个HelloWorld程序 1 首先,导入SpringMVC需要的jar包. commons-logging-<version>.jar spring ...

  6. jquery调用spring mvc接口返回字符串匹配

    背景:有个增删改页面,用jquery祭出ajax异步调用接口,spring mvc响应对象是个json字符串,jquery根据响应结果判断,如果删除成功给出提示.那么问题来了,接口里响应的字符串怎么匹 ...

  7. Spring MVC(十六)--Spring MVC国际化实例

    上一篇文章总结了一下Spring MVC中实现国际化所需的配置,本文继上一文举一个完整的例子,我选择用XML的方式.我的场景是这样的: 访问一个页面时,这个页面有个表格,对表头中的列名实现国际化. 第 ...

  8. Maven+Eclipse+Spring MVC简单实例

    1. ToolsVersion and Preparations: Eclipse: 3.5 (eclipse-jee-galileo-win32) Maven: 2.0.11 Spring MVC ...

  9. Spring MVC配置实例

    1.下载Jar文件,添加到项目 lib文件夹中. 使用eclipse新建 Web 项目.下载导入相关的 jar 和 Tomcat.我的java版本是JDK1.8 对应的 Tomcat 版本是 8.0. ...

随机推荐

  1. Shape.Type属性名称及对应值列表

    在Excel工作表中,有多种Shape类型的时候,可以通过shape.Type属性值返回一个代表形状类型的MsoShapeType数值.通过该数值可知该图形的类型! 列表如下: 名称 值 说明 mso ...

  2. 对于jenkins上前端项目 npm 或 yarn 打包 及 部署 使用

    1.npm和yarn镜像源地址 npmMirror ~~~~~ https://skimdb.npmjs.com/registry/ edunpm ~~~~~~ http://registry.enp ...

  3. Thymeleaf实现页面静态化

    如果用户所有的请求,都需要Thyleaf渲染后直接返回给用户,后台就存在大量的查询操作,数据库的压力就会骤然上升,请求的时间就会延长,带来极不好用户体验,现在市面上流行的就是页面的静态化处理,下面就来 ...

  4. In .net 4.8,calculate the time cost of serialization in BinaryFormatter,NewtonSoft.json,and System.Text.Json.JsonSerializer.Serialize

    using ConsoleApp390.Model; using Newtonsoft.Json; using System; using System.Collections.Generic; us ...

  5. Java生鲜电商平台-电商系统性能指标

    Java生鲜电商平台-电商系统性能指标 1.响应时间和吞吐量 根据应用程序的响应时间可以知道程序完成传输数据所用的时间.也可以从HTTP请求级别,或者成为数据库级别来看.对那些缓慢的查询你需要做一些优 ...

  6. 剑指offer笔记面试题12----矩阵中的路径

    题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么该路径 ...

  7. Bootstrap基本CSS样式

    一.简介.使用 1.简介 Bootstrap 来源于 Twitter,是一款基于 Html.Css.JavaScript 的前端UI框架.可以方便.快速的开发web界面. 教程:https://www ...

  8. 为做了面向互联网部署(IFD)的Dynamics 365定制登录账号格式

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. 【JDBC】C3P0连接池的使用

    C3P0连接池的c3p0-config.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <c3p ...

  10. css 两行、多行超出后用省略号...表示

    .item-name { letter-spacing: ; overflow: hidden; display: -webkit-box; text-overflow: ellipsis; -web ...