1、springmvc简介(翻译API)
Spring Web模型 - 视图 - 控制器(MVC)框架围绕一个DispatcherServlet调度处理程序的请求进行设计 ,
具有可配置的处理程序映射,视图分辨率,区域设置,时区和主题解析以及对上传文件的支持。
默认处理程序基于@Controller和@RequestMapping 注释,提供广泛的灵活处理方法。
随着Spring 3.0的引入,该@Controller机制还允许您通过@PathVariable注释和其他功能创建RESTful Web站点和应用程序。
2、springmvc特点 (API)
Spring的Web模块包含许多独特的Web支持功能:
- 明确分离角色。每个角色 - 控制器,验证器,命令对象,表单对象,模型对象DispatcherServlet,处理程序映射,视图解析器等等都可以由专门的对象来实现。
- 框架和应用程序类作为JavaBeans的强大而直接的配置。此配置功能包括跨上下文的简单引用,例如从Web控制器到业务对象和验证器。
- 适应性,非侵入性和灵活性。定义您需要的任何控制器方法签名,可能使用给定方案的参数注释之一(例如@RequestParam,@RequestHeader,@PathVariable等)。
- 可重用的业务代码,不需要重复。使用现有的业务对象作为命令或表单对象,而不是镜像它们来扩展特定的框架基类。
- 可定制的绑定和验证。键入不匹配作为应用程序级验证错误,保留违规值,本地化日期和数字绑定等,而不是仅使用仅包含字符串的表单对象进行手动解析和转换为业务对象。
- 可定制的处理程序映射和视图解析。处理程序映射和视图分辨率策略的范围从简单的基于URL的配置到复杂的,特制的分辨率策略。Spring比Web MVC框架更具灵活性,它允许特定的技术。
- 灵活的模型转移。具有名称/值的模型传输Map支持与任何视图技术的轻松集成。
- 可定制的区域设置,时区和主题分辨率,支持带有或不带有Spring标签库的JSP,支持JSTL,支持Velocity,无需额外的桥接等。
- 一个简单而强大的JSP标签库,被称为Spring标签库,为数据绑定和主题等功能提供支持。自定义标签允许在标记代码方面具有最大的灵活性。
- 在Spring 2.0中引入的JSP表单标签库,使得在JSP页面中的写入表单更容易。
- 其生命周期的范围限定在当前的HTTP请求或HTTPSession。 这不是Spring MVC本身的一个特定功能,而是WebAppcationContext使用Spring MVC的 容器。
3、springmvc之核心DispatcherServlet
Spring的Web MVC框架与许多其他Web MVC框架一样,以请求为驱动,围绕一个中央Servlet设计,将请求发送给控制器,并提供了有助于Web应用程序开发的其他功能。
DispatcherServlet然而,春天 不仅仅是这样。它与Spring IOC容器完全集成,因此允许您使用Spring的其他所有功能。
Spring Web MVC的请求处理工作流程DispatcherServlet如下图所示。模式读者将会明确的认识到,DispatcherServlet是“前端控制器”设计模式的表达(这是Spring Web MVC与许多其他领先的Web框架共享的模式)。
DispatcherServlet然而,春天 不仅仅是这样。它与Spring IOC容器完全集成,因此允许您使用Spring的其他所有功能。
Spring Web MVC的请求处理工作流程DispatcherServlet如下图所示。模式读者将会明确的认识到,DispatcherServlet是“前端控制器”设计模式的表达(这是Spring Web MVC与许多其他领先的Web框架共享的模式)。
DispatcherServlet是一个实际的Servlet(它从HttpServlet基类继承),因此可以在你的Web应用程序中(web.xml)被声明。
DispatcherServlet需要通过在同一web.xml文件中使用URL映射来映射要处理的请求
DispatcherServlet需要通过在同一web.xml文件中使用URL映射来映射要处理的请求
web.xml配置如下:
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
ApplicationContextSpring中的实例可以被限定。在Web MVC框架中,每个DispatcherServlet都有自己的 WebApplicationContext,
它继承了WebApplicationContext根中已经定义的所有bean。根WebApplicationContext应该包含应该在其他上下文和Servlet实例之间共享的所有基础架构bean。
这些继承的bean可以在servlet特定的范围内被覆盖,您可以在给定的Servlet实例本地定义新的范围特定的bean。
在初始化一个时DispatcherServlet,Spring MVC将在Web应用程序的WEB-INF目录中查找名为 [servlet-name] -servlet.xml的文件,并创建在其中定义的bean,覆盖在全局范围内以相同名称定义的任何bean的定义。
因此我们需要在WEB-INF下面创建spring-servlet.xml定义spring IOC容器及其管理的bean
4、WebApplicationContext中的特殊Bean类型
Spring DispatcherServlet使用特殊的bean来处理请求并呈现适当的视图。这些bean是Spring MVC的一部分。您可以通过简单地配置WebApplicationContext其中的一个或多个来选择要使用的特殊bean 。但是,您最初不需要这样做,因为Spring MVC维护一个默认bean的列表,如果您没有配置任何内容。首先看下表列出DispatcherServlet依赖的特殊bean类型。
(1)HandlerMapping:根据一些标准将传入的请求映射到处理程序和前处理程序和后处理程序列表(处理程序拦截器),其细节因HandlerMapping 实施而异。最流行的实现支持注释控制器,但是也存在其他实现。
(2)HandlerAdapter :帮助DispatcherServlet调用映射到请求的处理程序,而不管处理程序是否被实际调用。例如,调用注释控制器需要解析各种注释。因此,a的主要目的HandlerAdapter是屏蔽DispatcherServlet这些细节。
(3)HandlerExceptionResolver: 映射视图的异常也允许更复杂的异常处理代码。
(4)ViewResolver :视图解析器将基于逻辑字符串的视图名称解析为实际View类型。
(5)LocaleResolver&LocaleContextResolver: 解决客户端正在使用的区域设置以及可能的时区,以便能够提供国际化的视图
(6)ThemeResolver: 解决您的Web应用程序可以使用的主题,例如提供个性化布局
(7)MultipartResolver :解析多部分请求,以支持从HTML表单处理文件上传。
(8)FlashMapManager :存储并检索FlashMap可以用于将属性从一个请求传递给另一个请求的“输入”和“输出” ,通常是通过重定向。
(2)HandlerAdapter :帮助DispatcherServlet调用映射到请求的处理程序,而不管处理程序是否被实际调用。例如,调用注释控制器需要解析各种注释。因此,a的主要目的HandlerAdapter是屏蔽DispatcherServlet这些细节。
(3)HandlerExceptionResolver: 映射视图的异常也允许更复杂的异常处理代码。
(4)ViewResolver :视图解析器将基于逻辑字符串的视图名称解析为实际View类型。
(5)LocaleResolver&LocaleContextResolver: 解决客户端正在使用的区域设置以及可能的时区,以便能够提供国际化的视图
(6)ThemeResolver: 解决您的Web应用程序可以使用的主题,例如提供个性化布局
(7)MultipartResolver :解析多部分请求,以支持从HTML表单处理文件上传。
(8)FlashMapManager :存储并检索FlashMap可以用于将属性从一个请求传递给另一个请求的“输入”和“输出” ,通常是通过重定向。
5、配置视图解析器
在Spring Web MVC框架控制器的所有处理方法必须解析为一个逻辑视图名称,明确地(例如,通过返回 String,View或ModelAndView)或隐式(即基于惯例)。Spring中的视图由逻辑视图名称解析,并由视图解析器解析。spring有很多视角解析器。这张表列出了大部分;
(1)AbstractCachingViewResolver :抽象视图解析器缓存视图。通常情况下需要准备才能使用; 扩展此视图解析器提供缓存。
(2)XmlViewResolver :实现ViewResolver它接受使用与Spring的XML bean工厂相同的DTD使用XML编写的配置文件。默认配置文件是 /WEB-INF/views.xml。
(3)ResourceBundleViewResolver :实现ViewResolver它使用bean定义ResourceBundle,由bundle基本名称指定。通常,您可以在属性文件中定义包,位于类路径中。默认文件名为views.properties。
(4)UrlBasedViewResolver :简单的实现ViewResolver界面,直接解析逻辑视图名称到URL,而不需要明确的映射定义。如果您的逻辑名称以直观的方式与视图资源的名称匹配,则不需要任意映射,这是适当的。
(5)InternalResourceViewResolver :方便的子类UrlBasedViewResolver支持InternalResourceView(实际上是Servlet和JSP)和子类,如JstlView和TilesView。您可以通过使用为此解析器生成的所有视图指定视图类 setViewClass(..)。有关UrlBasedViewResolver详细信息,请参阅javadoc。
(6)VelocityViewResolver / FreeMarkerViewResolver :它的方便子类UrlBasedViewResolver支持VelocityView(实际上是Velocity模板),或者FreeMarkerView分别和它们的自定义子类。
(7)ContentNegotiatingViewResolver :实现ViewResolver根据请求文件名或Accept头解析视图的界面。
(2)XmlViewResolver :实现ViewResolver它接受使用与Spring的XML bean工厂相同的DTD使用XML编写的配置文件。默认配置文件是 /WEB-INF/views.xml。
(3)ResourceBundleViewResolver :实现ViewResolver它使用bean定义ResourceBundle,由bundle基本名称指定。通常,您可以在属性文件中定义包,位于类路径中。默认文件名为views.properties。
(4)UrlBasedViewResolver :简单的实现ViewResolver界面,直接解析逻辑视图名称到URL,而不需要明确的映射定义。如果您的逻辑名称以直观的方式与视图资源的名称匹配,则不需要任意映射,这是适当的。
(5)InternalResourceViewResolver :方便的子类UrlBasedViewResolver支持InternalResourceView(实际上是Servlet和JSP)和子类,如JstlView和TilesView。您可以通过使用为此解析器生成的所有视图指定视图类 setViewClass(..)。有关UrlBasedViewResolver详细信息,请参阅javadoc。
(6)VelocityViewResolver / FreeMarkerViewResolver :它的方便子类UrlBasedViewResolver支持VelocityView(实际上是Velocity模板),或者FreeMarkerView分别和它们的自定义子类。
(7)ContentNegotiatingViewResolver :实现ViewResolver根据请求文件名或Accept头解析视图的界面。
现在开发很多都是使用
InternalResourceViewResolver 这个视图解析器,其配置很简单,结构很明了,这里先配置这个解析器其他解析器以后会介绍
<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
6、控制器
@Controller注解表明特定类供应的作用控制器(后期学习)
@RequestMapping注释来将URL映射/appointments到整个类或特定的处理程序方法。通常,类级注释将特定的请求路径(或路径模式)映射到表单控制器上,其他方法级注释缩小了特定HTTP方法请求方法(“GET”,“POST”等)的主映射,或HTTP请求参数条件(后期学习)
控制器实体类:
package com.spring.mvc;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value="front")
public class FrontController {
@RequestMapping(value = "index")
public String index(){
System.out.println("index....................");
return "index";
}
}
XML文件配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<bean class="com.spring.mvc.FrontController"></bean>
<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Welcom</title>
</head>
<body>
<a href="front/index">welcom</a>
</body>
</html>
WEB-INF/views/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>index</title>
</head>
<body>
<h1>Hello Word!</h1>
</body>
</html>
web.xml
<?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">
<display-name>springmvc5</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
导入的JAR包:
spring核心包:spring-beans-4.3.10.RELEASE.jar
spring-context-4.3.10.RELEASE.jar
spring-context-support-4.3.10.RELEASE.jar
spring-core-4.3.10.RELEASE.jar
spring-expression-4.3.10.RELEASE.jar
spring-context-4.3.10.RELEASE.jar
spring-context-support-4.3.10.RELEASE.jar
spring-core-4.3.10.RELEASE.jar
spring-expression-4.3.10.RELEASE.jar
spring web:spring-aop-4.3.10.RELEASE.jar
spring-web-4.3.10.RELEASE.jar
spring-webmvc-4.3.10.RELEASE.jar
spring-web-4.3.10.RELEASE.jar
spring-webmvc-4.3.10.RELEASE.jar
spring必须依赖的jar包:commons-logging-1.0.3.jar