示例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应用的视图页面,用户的所有请求都只应向控制器发送,由控制器调用模型组件、视图组件向用户呈现数据.