spring mvc简介
spring mvc是一款基于mvc架构模式的轻量级web框架,目的是将web开发模块化,对整体架构进行解耦。
spring mvc有一下优点:
作为spring框架的一部分,拥有spring的优点(ioc,aop等)
支持灵活的url到页面控制器的映射
提供灵活的数据验证、格式化、数据绑定机制
支持restful风格
spring mvc请求流程
spring mvc框架的整体请求流程如下:
上图中涉及到spring mvc的几个功能组件:
前端控制器(dispatcherservlet):接收用户请求并返回请求结果。它的作用相当于一个转发器或*处理器,控制整个执行流程,对各组件进行调度降低组件之间的耦合。
处理器映射器(handlermapping):根据用户请求的url,通过注解或者xml配置,查找相应的处理器handler
处理器适配(handleradapter):根据映射器查找出的handler,完成调用处理器中的方法
处理器(handler):请求处理的具体逻辑,返回数据和视图信息
视图解析器(view resolver):解析具体视图,通过modelandview对象中的view信息,将逻辑视图名解析成真正的视图view
请求流程具体步骤详解:
1:用户发起请求,请求会被前端控制器(dispatcherservlet)拦截
2:前端控制器(dispatcherservlet)请求处理器映射器(handlermapping)查找handler
3:处理器映射器(handlermapping)根据配置找到相应handler(可以更具注解或者xml配置),可能包含多个interceptor拦截器,返回给前端控制器
4:前端控制器(dispatcherservlet)请求处理器适配器(handleradapter)去执行相应的handler
5:适配器交由对应handler处理器执行
6: handler处理器执行完成后返回modelandview对象给处理器适配器
7:处理器适配器接受handler处理器的返回结果,并将该结果返回给前端控制器(dispatcherservlet)
8:前端控制器(dispatcherservlet)接收处理器适配器返回的数据和视图信息,请求视图解析器,解析对应的视图
9:视图解析器根据view信息匹配的相应的视图结果,反回给前端控制器
10:前端控制器接收具体视图,进行视图渲染,将model数据填充到view视图中,生成最终视图
11:前端控制器向用户返回结果
从零开始搭建demo
创建工程:
eclipse下新建一个动态web项目
工程默认目录结构:
添加jar包依赖
webcontent > web-inf > lib 文件夹下导入相应的jar包,其中核心的jar包是spring-webmvc-5.0.0.release.jar,其他是几个主要是spring用于管理上下文和beande 包、jstl标签库和一个用于打印日志的log包:
在web.xml中配置前端控制器
前端控制器相当于spring mvc的专有servlet,用于拦截所有符合条件的请求,交由框架做后续处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?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" >
<!-- 配置前端控制器-dispatchservlet -->
<servlet>
<servlet-name>springmvcnext</servlet-name>
<servlet- class >org.springframework.web.servlet.dispatcherservlet</servlet- class >
<!-- contextconfiglocation不是必须的, 如果不配置contextconfiglocation, springmvc的配置文件默认在:web-inf/servlet的name+ "-servlet.xml" -->
<init-param>
<param-name>contextconfiglocation</param-name>
<param-value>classpath:applicationcontext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvcnext</servlet-name>
<url-pattern>/</url-pattern> <!--根据url-pattern设定的规则拦截用户发来的请求 此处拦截所有请求,包括静态资源 ->
</servlet-mapping>
</web-app>
|
其中<servlet-mapping>标签中定义url匹配规则为符合*.action的形式,对应的servlet名为springmvcnext,而<servlet>配置的控制器为org.springframework.web.servlet.dispatchservlet,该控制器为当前springmvc项目的前端控制器,<init-param>标签为当前控制器依赖的参数,两个参数分别代表上下文参数和参数加载路径。
关于classpath:代表web项目编译后编译后的输出路径
配置spring mvc配置
在java源代码更目录下添加applicationcontext.xml文件
具体内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?xml version= "1.0" encoding= "utf-8" ?>
<beans xmlns= "http://www.springframework.org/schema/beans"
xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance" xmlns:p= "http://www.springframework.org/schema/p"
xmlns:context= "http://www.springframework.org/schema/context"
xmlns:mvc= "http://www.springframework.org/schema/mvc"
xsi:schemalocation="http: //www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http: //www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
http: //www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http: //www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 包扫描器 标签将用于激活spring mvc注释扫描功能,允许使用 @controller 和 @requestmapping 等注释。-->
<context:component-scan base- package = "com.sl.controller" />
<!-- 注解驱动 -->
<mvc:annotation-driven />
<!-- 配置视图解析器 -->
<bean class = "org.springframework.web.servlet.view.internalresourceviewresolver" id= "internalresourceviewresolver" >
<property name= "prefix" value= "/web-inf/view/" />
<property name= "suffix" value= ".jsp" />
</bean>
</beans>
|
添加控制器controller与视图view
src目录下添加包com.sl.controller,添加控制器代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.sl.controller;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.servlet.modelandview;
@controller
public class helloworldcontroller {
@requestmapping ( "/index" ) //处理url路径中以/index开头的所有请求: 包括 /index/* 和 /index.html
public modelandview helloworld() {
string message = "hello spring mvc" ;
return new modelandview( "index" , "message" , message);
}
}
|
在web-inf/view中添加视图文件index.jsp
1
2
3
4
5
6
7
8
|
<html>
<head>
<title>spring mvc </title>
</head>
<body>
${message}
</body>
</html>
|
运行结果:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:https://www.cnblogs.com/ashleyboy/p/9054036.html