引言
1.MVC
:Model-View-Control
框架性质的C
层要完成的主要工作:封装web
请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及相应的视图给用户。
2.
简要概述springmvc
Spring C 层框架的核心是 DispatcherServlet,它的作用是将请求分发给不同的后端处理器,也即 使用了一种被称为Front Controller 的模式(后面对此模式有简要说明)。 Spring 的C 层框架使用了后端控制器来、映射处理器和视图解析器来共同完成C 层框架的主要工作。并且spring 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即我们后面会经常用到的ModelAndView 对象。
一、入门实例
1.
搭建环境
在spring
的官方API
文档中,给出所有包的作用概述,现列举常用的包及相关作用:
org.springframework.aop-3.0.5.RELEASE.jar
:与Aop
编程相关的包
org.springframework.beans-3.0.5.RELEASE.jar
:提供了简捷操作bean
的接口
org.springframework.context-3.0.5.RELEASE.jar
:构建在beans
包基础上,用来处理资源文件及国际化。
org.springframework.core-3.0.5.RELEASE.jar
:spring
核心包
org.springframework.web-3.0.5.RELEASE.jar
:web
核心包,提供了web
层接口
org.springframework.web.servlet-3.0.5.RELEASE.jar
:web 层的一个具体实现包,DispatcherServlet也位于此包中。
后文全部在spring3.0 版本中进行,为了方便,建议在搭建环境中导入spring3.0 的所有jar 包(所有jar 包位于dist 目录下)。
2.
编写HelloWorld
实例
步骤一、建立名为springMVC_01_helloword
,并导入上面列出的jar
包。
步骤二、编写web.xml
配置文件,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>spmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
简要说明
:DispatcherServlet
就是一个Servlet
,也是对请求进行转发的核心Servlet
。在这里即所有.do
的请求将首先被DispatcherServlet
处理,而DispatcherServlet
它要作的工作就是对请求进行分发(也即是说把请求转发给具体的Controller
)。可以简单地认为,它就是一个总控处理器,但事实上它除了具备总控处理理器对请求进行分发的能力外,还与spring
的IOC
容器完全集成在一起,从而可以更好地使用spring
的其它功能。在这里还需留意
<
servlet-name
>
spmvc
</
servlet-name
>
,下面步骤三会用到。
步骤三、建立
spmvc-servlet.xml
文件,它的命名规则:
servlet-name-servlet.xml
。它的主要代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.do">helloControl</prop>
</props>
</property>
</bean>
<bean id="helloControl" class="com.asm.HelloWord"></bean>
</beans>
说明:
hello.do
的请求将给名为
helloControl
的
bean
进行处理。
步骤四、完成
HelloWord.java
的编写,代码如下:
package com.asm;
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 HelloWord implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception {
ModelAndView mav = new ModelAndView("hello.jsp");
mav.addObject("message", "Hello World!");
return mav;
}
}
说明
:ModelAndView
对象是包含视图和业务数据的混合对象,即是说通过此对象,我们可以知道所返回的相应页面(比如这里返回hello.jsp
页面),也可以在相应的页面中获取此对象所包含的业务数据(比如这里message-hello
worrld
)。
步骤五、在当前项目web
根目录下编写hello.jsp
,主要代码如下:
<
body
>
世界,你好!
获取值:
${message }
</
body
>
步骤六:输入
.../hello.do
进行测试。
4.
简析spring mvc
工作原理
(1
)启动服务器,根据web.xml
的配置加载前端控制器(也称总控制器)
DispatcherServlet
。在加载时、会完成一系列的初始化动作。
(2
)根据servlet
的映射请求(上面的helloWorld
实例中针对.do
请求),并参照“控制器配置文件”(即spmvc-servlet.xml
这样的配置)文件,把具体的请求分发给特定的后端控制器进行处理(比如上例会分发给HelloWorld
控制器进行处理)
(3
)后端控制器调用相应的逻辑层代码,完成处理并返回视图对象(
ModelAndView
)给前端处理器。
(4
)前端控制器根据后端控制器返回的
ModelAndView
对象,并结合一些配置(后面有说明),返回一个相应的页面给客户端。
小结
:这种Front Controller
模式常应用在主流的web
框架中,比如典型的struts1.x
框架.Front Controller
模式:所有请求先交给一个前端处理器(总控处理器)处理,然后前端处理器会参照一些配置文件再把具体的请求交给相应的后端处理器。后端处理器调用逻辑层代码,并根据逻辑返回相应的视图对象给前端控制器。然后前端控制器再根据视图对象返回具体的页面给客户端(提示:和spring mvc
一样,在struts1.x
中前端控制器是Servlet,
而在struts2
中前端控制器是Filter
)。 概述
Front Controller
模式:前端控制器预处理并分发请求给后端控制器,后端控制器进行真正的逻辑处理并返回视图对象,前端控器器根据视图对象返回具体页面给客户端。
5.
初识spring mvc
的视图
在前面的HelloWorld
实例中,在HelloWorld.java
中返回
ModelAndView
mav =
new
ModelAndView(
"hello.jsp"
)
参数为
hello.jsp
,它会对应于当前项目根目录下的
hello.jsp
页面。但
spring mvc
为我们提供了一个特别的视图定位方式,下面改进前面的
HelloWord
实例:
改进一
:在
spmvc-servlet.xml
中增加如下代码:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
改进二
:在HelloWorld.java
重新定义返回的
ModelAndView
对象,即把
ModelAndView mav =
new
ModelAndView(
"hello.jsp"
)
改为
ModelAndView mav =
new
ModelAndView(
"hello"
)
改进三
:在/WEB-INF/page
目录下建立hello.jsp
页面
进行上面三个改进操作后,重新访问hello.do
会访问到WEB-INF/page/hello.jsp
页面。
简析视图定位
:当返回
ModelAndView
对象名称为hello
时,会给hello
加上前后缀变成
/WEB-INF/page/hello.jsp
。因此在给前后缀赋值时,应特别注意它和返回的
ModelAndView
对象能否组成一个正确的文件全路径。在前面的“简析spring mvc
工作原理(4)
”点中提到在根据ModelAndView
对象返回页面时,会结合一些配置。这里就是结合了视图定位方式,给viewName
加上前后缀进行定位。
分享到:
相关推荐
如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用...
Spring MVC入门实例
Spring MVC 实例 - Hello World,spring mvc 入门Spring MVC 实例 - Hello World,spring mvc 入门
SPRING MVC入门实例,适合入门者
spring mvc入门小例子spring mvc入门小例子spring mvc入门小例子spring mvc入门小例子spring mvc入门小例子
spring3.0mvc自学教程ppt+注解教程+注解实例+springmybatis教程+项目实例+中文api 初学(自学)着的不二法定,从入门到项目实例深入学习(浅-深)
《Spring MVC+MyBatis开发从入门到项目实战》对框架的介绍通俗易懂,由浅入深,结合实例展示,为读者的入门提供了有力的帮助,且为以后的技术提升打下坚实的基础。《Spring MVC+MyBatis开发从入门到项目实战》适用于...
spring boot demo 是一个Spring Boot、Spring Cloud的项目示例,根据市场主流的后端技术,共集成了30+个demo,未来将持续更新。该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis...
主要介绍Spring MVC 的使用注解来配置的使用实例
Spring mvc、 Spring、 Mybatis、 注解实例、 项目实例 从入门到项目实战
附件为本人做好的例子 博文链接:https://di201yao.iteye.com/blog/191758
mybatis 3.1.1, spring-3.1.3 与 mybatis-spring -1.1.1 集成的 分页程序,以及spring MVC 例子. 没分了,收取一分,如果有和我一样穷的兄弟,你可以到我的博客上去下载,不需要积分:...
Spring_MVC的入门资料,里边儿有完整的入门实例,希望对SpringMVC菜鸟们有帮助!
此工程为spring mvc的入门级例子,有助于刚入门spring mvc的开发人员了解spring mvc。
Spring mvc + Spring + Mybatis + 注解实例 + 项目实例 从入门到项目实战
以用户管理为例,结合spring struts hibernate dwr jstl做的实例,struts hibernate dwr 与Spring完全结合,实现用户列表、信息增、删、改、查、维护时用户重名提示等功能,还包括页面自动转码设置(web.xml),...
基于SpringMVC以及Spring,Hibernate的非注解入门小demo