初见SpringMVC之网络请求
SpringMVC是Spring框架中的一部分,是一款轻量级的Web框架。本系列文章是学习SpringMVC框架的入门级介绍,主要从六个方面介绍SpringMVC的基本功能,也是最核心的功能。
1.SpringMVC在使用上如何代替Servlet完成对Http请求的处理。
2.SpringMVC框架基本架构,受理网络请求的一般流程。
3.SpringMVC对数据绑定的支持。
4.SpringMVC对json数据交互的支持
5.SpringMVC拦截器的用法
6 SpringMVC对文件上传和文件下载的支持
一丶基于注解的方式SpringMVC完成对网络请求的处理
在本节中介绍SpringMVC基于注解的方式完成网络请求处理的功能,提供一个简单的案例,来说明使用SpringMVC简单使用。在介绍的过程中,不详细介绍配置文件和类的作用,SpringMVC的核心类和配置文件的作用在下节中详细介绍。
1.向项目中添加所需要jar包
。
图1.1 SpringMVC依赖jar包
2.在web.xml文件中配置DispatcherServerlet,DispatcherServlet是SpringMVC核心调度器,也是实现功能的关键。
<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: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>
3.在src目录下,创建名为springmvc-config.xml的SpingMVC的配置文件。
<?xmlversion="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 定义组件扫描器,指定需要扫描的包 -->
<context:component-scan base-package="com.bupt.controller" />
<!-- 定义视图解析器 -->
<bean id="viewResolver" class=
"org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--设置前缀 -->
<propertyname="prefix" value="/WEB-INF/" />
<!--设置后缀 -->
<propertyname="suffix" value=".jsp" />
</bean>
</beans>
4.完成上述步骤后,基本完成了SpringMVC环境的搭建工作,现在可以配置SpringMVC中的Controll类来处理网络请求了。创建一个Controll类,命名为HelloSpringMVC。在/WEB-INF下创建一个名为hello.jsp的文件,如下所示:
Controll类
/**
* Controller注解代表这个类是SpringMVC中控制器类
* 用来处理网络请求
* @authorSmartTu
*/
@Controller
public class HelloSpringMVC {
/**
*RequestMapping注解,描述了方法和url之间的映射关系
* 此时,当请求路径以/hello结尾时,是该方法受理请求。
* @return
*/
@RequestMapping(value="/hello")
publicString hello(){
/**
* 跳转到/WEB-INF/success.jsp页面
* 前缀/WEB-INF/,后缀.jsp都在springmvc-config.xml中的视图解析器里面配置了
* 所以此时可以省略前缀和后缀。
*/
return "hello";
}
}
hello.jsp文件
<%@page language="java" contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPEhtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Inserttitle here</title>
</head>
<body>
hello springMVC
</body>
</html>
5.在浏览器中访问http://localhost:8080/HelloSpringMV/hello,观察访问过结果(HellpSpringMV是工程名字)
图1.2 SpringMVC测试结果
SpringMVC的基本架构,受理网络请求的一般流程
SpringMVC是基于Servlet的Web框架,在上节中利用SpringMVC受理网络请求时,一个关键步骤就是在web.xml文件中配置DispatcherServlet。SpringMVC通过DispatcherServlet拦截了所有的网络请求,然后由DispatcherServlet将相应的网络请求分发到和具体的类和方法中处理,最后DispacherServlet拿到方法的返回参数,进行视图渲染等工作。
上述过程是SpringMVC受理网络请求的一般流程,如果要完成上述请求,一个DispatcherServlet明显不够,需要解决一下问题:
(1)DispathcerServlet拦截了所有网络请求后,通过Url找到对应Handler,这个工作由谁完成?Handler(处理器)代表受理具体网络请求的类和方法,上节HelloSpringMVC中的hello方法就是Handler。
(2)得到Handler之后,Handler方法的调用是否DispatcherServlet负责吗?
(3)Handler方法调用后的返回参数,是不是传给DispatcherServlet?DispatcherServlet如何处理返回参数?
下面通过一个流程图来回答上述问题:
图 2.1 SpringMVC处理Http请求一般流程
执行的顺序和标号的顺序保持一致。
(1) DispatcherServlet拦截用户发送给服务器的http请求
(2)DispatcherServlet拦截Http请求之后,将Http请求转发给HandlerMapping,(3)HandlerMapping通过url找到对应的Handler,并且将Handler传给DispatcherServlet。(回答问题1)
(4)DispatcherServlet收到Handler之后,自己并不调用Handler,将Handler转发给合适的HandlerAdapter。(回答问题2)
(5)HandlerAdapter调用并且执行Handler
(6)Handler处理器执行完毕之后,将返回参数,传递给HandlerAdapter,比如上节中的”succss”参数
(7)HandlerAdapter并不处理Handler返回参数,将返回参数交给DispatcherServlet。
(8)DispathcerServlet也不直接处理Handler返回的参数,将交给ViewResolver处理
(9)ViewResovler对Handler返回的参数进行处理,然后向DispatcherServlet中返回具体的View(视图)
(10)Dispacher对View进行渲染(填充数据),将渲染结果转发给Result。
(11)Result将服务器处理的结果返回给前端。
上述11个过程是SpringMVC处理HTTP请求的一般过程,在使用SpringMVC框架时,我们只需要配置DispatcherServerlet以及编写Handler就行,SpringMVC会帮我们完成其余的所有功能。