示例1:基于Controller接口的控制器
1.增加Spring的支持
首先,使用Eclipse
新建一个Dynamic Web Pro ject
,也就是新建一个动态Web
项目,命名为SpringMVCTest
。
复制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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| G:\Desktop\随书源码\库文件\spring-framework-5.0.1.RELEASE\libs>copy *.RELEASE.jar E:\workspace_shizhan\SpringMVCTest\WebContent\WEB-INF\lib 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 已复制 21 个文件。
|
复制commons-logging的jar包到项目lib目录
下载commons-logging-1.2
然后进入解压后的目录,输入如下copy
命令来复制commons-logging-1.2.jar
到项目路径中.
1 2 3
| G:\Desktop\随书源码\库文件\commons-logging-1.2>copy *1.2.jar E:\workspace_shizhan\SpringMVCTest\WebContent\WEB-INF\lib commons-logging-1.2.jar 已复制 1 个文件。
|
此时libs
目录下的文件如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| E:\workspace_shizhan\SpringMVCTest\WebContent\WEB-INF\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
|
这样该Web
应用已经加入了Spring
的必需类库。但还需要修改web.xml
文件,让该文件负责加载Spring
框架。
2. 配置前端控制器DispatcherServlet
进入WebContent\WEB-INF
目录,打开web.xml
文件,如果没有web.xml
文件,可以在项目上右键,选择Java EE Tools
,然后选择Generate Deployment Descriptor Stub
即可生成web.xml
文件.
在人在该文件中配置Spring MVC
的前端控制器DispatcherServlet
,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
|
web.xml
文件的内容告诉Web
容器,将使用Spring MVC
的DispatcherServlet
,并通过配置url-pattern
元素的值为"/"
,将所有的URL
都映射到该Servlet
。
3 配置Spring MVC的Controller
接下来是Spring MVC
的配置文件,配置信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?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 name="/hello" class="org.fkit.controller.HelloController"/>
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> </beans>
|
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| package org.fkit.controller;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller;
public class HelloController implements Controller {
@Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("handleRequest 被调用"); ModelAndView mv = new ModelAndView(); mv.addObject("message", "Hello World!"); mv.setViewName("/WEB-INF/content/welcome.jsp"); return mv; } }
|
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 2 3 4 5 6 7 8 9 10 11 12 13
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>欢迎页面</title> </head> <body> <!-- 页面可以访问Controller传递传递出来的message --> ${requestScope.message} </body> </html>
|
6.测试应用
使用Eclipse
部署SpringMVCTest
这个Web
应用,在浏览器中输入如下URL
来测试应用,
1
| http://localhost:8080/SpringMVCTest/hello
|
浏览器上将会显示Hello World!
这个字符串,这表示Spring MVC
访问成功。
提示:使用MVC
框架就应该严格遵守MVC思想。MC框架不赞成浏览器直接访问Web
应用的视图页面,用户的所有请求都只应向控制器发送,由控制器调用模型组件、视图组件向用户呈现数据.
原文链接: 示例1 基于Controller接口的控制器