示例1 基于Controller接口的控制器
示例1:基于Controller接口的控制器
1.增加Spring的支持
首先,使用Eclipse
新建一个Dynamic Web Project
,也就是新建一个动态Web
项目,命名为SpringMVCTest
。
项目结构
展开/折叠
G:\Desktop\随书源码\Spring+Mybatis企业应用实战(第2版)\codes\02\SpringMVCTest ├─mytree ├─src\ │ └─org\ │ └─fkit\ │ └─controller\ │ └─HelloController.java └─WebContent\ ├─META-INF\ │ └─MANIFEST.MF └─WEB-INF\ ├─content\ │ └─welcome.jsp ├─lib\ │ ├─commons-logging-1.2.jar │ ├─spring-aop-5.0.1.RELEASE.jar │ ├─spring-aspects-5.0.1.RELEASE.jar │ ├─spring-beans-5.0.1.RELEASE.jar │ ├─spring-context-5.0.1.RELEASE.jar │ ├─spring-context-indexer-5.0.1.RELEASE.jar │ ├─spring-context-support-5.0.1.RELEASE.jar │ ├─spring-core-5.0.1.RELEASE.jar │ ├─spring-expression-5.0.1.RELEASE.jar │ ├─spring-instrument-5.0.1.RELEASE.jar │ ├─spring-jcl-5.0.1.RELEASE.jar │ ├─spring-jdbc-5.0.1.RELEASE.jar │ ├─spring-jms-5.0.1.RELEASE.jar │ ├─spring-messaging-5.0.1.RELEASE.jar │ ├─spring-orm-5.0.1.RELEASE.jar │ ├─spring-oxm-5.0.1.RELEASE.jar │ ├─spring-test-5.0.1.RELEASE.jar │ ├─spring-tx-5.0.1.RELEASE.jar │ ├─spring-web-5.0.1.RELEASE.jar │ ├─spring-webflux-5.0.1.RELEASE.jar │ ├─spring-webmvc-5.0.1.RELEASE.jar │ └─spring-websocket-5.0.1.RELEASE.jar ├─springmvc-config.xml └─web.xml
复制Spring的jar包到项目lib目录
为了让Web
应用具有Spring
支持的功能,将spring-framework-5.0.1.RELEASE
解压文件夹下的libs
文件夹下所有Spring
框架的class
文件的jar
包和Spring
所依赖的commons-logging-1.2.jar
复制到Web
应用的lib
文件夹下,也就是SpringMVCTest\WebContent\WEB-INF
路径下.
可以在libs
目录下打开cmd
,使用如下copy
命令复制即可:
1 | copy *.RELEASE.jar E:\workspace_shizhan\SpringMVCTest\WebContent\WEB-INF\lib |
复制效果:
1 | G:\Desktop\随书源码\库文件\spring-framework-5.0.1.RELEASE\libs>copy *.RELEASE.jar E:\workspace_shizhan\SpringMVCTest\WebContent\WEB-INF\lib |
复制commons-logging的jar包到项目lib目录
下载commons-logging-1.2
,解压,然后进入解压后的目录,输入如下copy
命令来复制commons-logging-1.2.jar
到项目路径中:
1 | copy *1.2.jar E:\workspace_shizhan\SpringMVCTest\WebContent\WEB-INF\lib |
复制效果:
1 | G:\Desktop\随书源码\库文件\commons-logging-1.2>copy *1.2.jar E:\workspace_shizhan\SpringMVCTest\WebContent\WEB-INF\lib |
复制后的libs目录文件列表
此时libs
目录下的文件如下所示:
1 | E:\workspace_shizhan\SpringMVCTest\WebContent\WEB-INF\lib |
这样该Web
应用已经加入了Spring
的必需类库。但还需要修改web.xml
文件,让该文件负责加载Spring
框架。
2. 配置前端控制器DispatcherServlet
eclipse生成web.xml
进入WebContent\WEB-INF
目录,打开web.xml
文件,如果没有web.xml
文件,可以在项目上右键,选择Java EE Tools
,然后选择Generate Deployment Descriptor Stub
即可生成web.xml
文件.
web.xml中配置前段控制器
在人在该文件中配置Spring MVC
的前端控制器DispatcherServlet
,如下所示:
1 |
|
web.xml
文件的内容告诉Web
容器,将使用Spring MVC
的DispatcherServlet
,并通过配置url-pattern
元素的值为"/"
,将所有的URL
都映射到该Servlet
。
3 配置Spring MVC的Controller
接下来是Spring MVC
的配置文件,创建/WEB-INF/springmvc-config.xml文件,写入如下配置信息:
1 |
|
springmvc-config.xml
文件声明了HelloController
业务控制器类,并将其映射到/hello
请求。- 此处还配置了一个处理器映射器
BeanNameUrlHandlerMapping
,这样可以Bean
的名称为URL
进行查找; - 同时配置了处理器适配器
SimpleControllerHandlerAdapter
,来完成对HelloController
类的handleRequest
方法的调用; - 最后配置了视图解析器
InternalResourceViewResolver
来解析视图,将View
呈现给用户。
需要注意的是,在Spring4.0
之后,如果不配置处理器映射器、处理器适配器和视图解析器,也会使用默认的完成Spring
内部MVC
工作,笔者在此处显示配置处理过程,是希望读者能够了解Spring MVC
的每一个动作,之后可以更好地理解Spring MVC
的工作流程。
4. Controller类的实现
HelloController
类实现了Controller
接口,用来处理/hello
请求。示例代码如下:
1 | package org.fkit.controller; |
HelloController
是一个实现Controller
接口的控制器,它可以处理一个单的请求动作。 handleRequest
是Controller
接口必须实现的方法, Controller
调用该方法来处理请求。该方法的参数是对应请求的HttpServletRequest
和HttpServletResponse
,该方法必须返回一个包含视图名或视图名和模型的ModelAndView
对象。本例返回的模型中包含了一个名为message
的字符串对象,返回的视图路径为/WEB-INF/content/welcome.jsp
,因此,请求将被转发到welcome.jsp
页面。
提示:Spring MVC
建议把所有的视图页面存放在WEB-INF
文件夹下,这样可以保护视图页面,避免直接向视图页面发送请求。上面的HelloController
类的handleRequest
方法处理完请求后, Spring MVC
会调用/WEB-INF/content/
文件夹下的welcome.jsp
呈现视图.
5. View页面
SpringMVCTest
包含一个视图页面welcome.jsp
,用来显示欢迎信息。
此处的JSP
页面使用了EL
表达式来简化页面开发,关于EL
表达式的使用可参考附录A EL
表达式和JSTL
标签库”的内容
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
6.测试应用
使用Eclipse
部署SpringMVCTest
这个Web
应用,在浏览器中输入如下URL
来测试应用,
1 | http://localhost:8080/SpringMVCTest/hello |
浏览器上将会显示Hello World!
这个字符串,这表示Spring MVC
访问成功。
提示:使用MVC
框架就应该严格遵守MVC
思想。MVC
框架不赞成浏览器直接访问Web
应用的视图页面,用户的所有请求都只应向控制器发送,由控制器调用模型组件、视图组件向用户呈现数据.