您的位置:首页 > 编程语言 > Java开发

SpringMVC入门----阿冬专栏

2015-08-20 15:03 555 查看


SpringMVC入门




来自:http://blog.csdn.net/laner0515/article/details/19997197

1、 什么是Spring MVC?

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如
JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

2、 Spring Web MVC能帮我们做什么?

让我们能非常简单的设计出干净的Web层和薄薄的Web层;

进行更简洁的Web层开发

天生与Spring框架集成(如IoC容器、AOP等);

提供强大的约定大于配置的契约式编程支持

能简单的进行Web层的单元测试;

支持灵活的URL到页面控制器的映射;

非常容易与其他试图技术集成,如Welocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很热容易被其他框架使用);

非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API

提供一套强大的JSP标签库,简化JSP开发

支持灵活的本地化、主题等解析

更加简单的异常处理

对静态资源的支持

支持Restful风格

3、 SpringWeb MVC清理请求的流程?



具体步骤如下:

1、 首先用户发送请求:前端控制器,前段控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑播放,如图1、2步骤。

2、 页面控制器接受到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndWiew(模型数据和逻辑试图名);如图:3、4、5步骤

3、 前端控制器回收控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入比便视图渲染;图6、7步骤

4、 前端控制器再次回收控制器,将响应返回给用户,图步骤8,至此整个结束。

4、 Spring Web MVC的核心框架图



具体流程步骤:

1、 首先用户发送请求---------------àDispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2、 DispatcherServlet---------------àHandleMapping,HandlerMapping蒋会把请求映射为HandlerExecutionChain对象(包含一个个儿Handler处理起(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3、 DispatcherServlet---------àHandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

4、 HandlerAdapter---------à处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、多级试图名);

5、 ModelAndView的逻辑试图名------àViewResolver,ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他试图技术;

6、 View-------à渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因为很容易支持其他试图技术;

7、 返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

5、 Spring Web MVC优势?

1、 清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、试图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器(Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表达展示盒提交到的对象就叫表单对象)、

2、 分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要

3、 由于命令对象就是一个Pojo,无需继承框架特定API,可以使用命令对象直接作为业务对象。

4、 和Spring其他框架无缝继承,是其他Web框架所不具备的。

5、 可适配,通过HandlerAdapter可以支持任意的类作为处理器。

6、 可定制性,HandlerMapping、ViewResolver等能够非常简单的定制。

7、 功能强大的数据验证、格式化、绑定机制。

8、 利用Spring提供的Mock对象能够非常简单的进行Web层单元测试。

9、 本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换

10、 强大的JSP标签库,使JSP编写更容易。


springMVC上传文件

在看springMVC之前,就听说现在很多公司用SSH的并不多,但是springMVC的不少,感觉springMVC应该是一个比较好用的框架,但是具体怎么用多好用还是没有概念,通过这次简单的学习,发现的确有他的很多优势,下面以springMVC上次为例,写一个简单的springMVC实例,稍微感受一下springMVC 的好处。

首先配置web.xml文件:

[html] view
plaincopy





<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*:/config/springAnnotation-servlet.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>



<filter>

<filter-name>characterEncodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<init-param>

<param-name>forceEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>characterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<servlet-mapping>

<servlet-name>springMVC</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

springMVC的配置相对比较简单,和之前的配置spring区别不大。

下面配置springMVC文件:

[html] view
plaincopy





<!-- 注解扫描包 -->

<context:component-scan base-package="com.tgb.web.controller.annotation.upload"/>



<!-- 开启注解 -->

<mvc:annotation-driven/>

<!-- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>

-->

<!-- 静态资源访问 -->

<mvc:resources location="/img/" mapping="/img/**"/>

<mvc:resources location="/js/" mapping="/js/**"/>





<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/"></property>

<property name="suffix" value=".jsp"></property>

</bean>



<!-- 上传拦截,如最大上传值及最小上传值 -->



<bean id="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!-- set the max upload size100MB -->

<property name="maxUploadSize">

<value>800000</value>

</property>

<property name="maxInMemorySize">

<value>4096</value>

</property>

</bean>



lt;/beans>

因为web里设置springMVC拦截的是所有的网址,所以,这里需要对图片和js等静态文件进行配置,不然无法识别。

同时,配置需要上传文件的最大值和最小值,当然,在程序里也可以用代码配置,但是,不提倡。

这里配置注解,个人认为springMVC的注解很好用,简单易用。

配置好之后,我们开始写代码:

[html] view
plaincopy





@RequestMapping("/upload1")

public String upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException{

//创建一个通用的多部分解析器.

CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());

//判断 request 是否有文件上传,即多部分请求...

if(multipartResolver.isMultipart(request))

{

//判断 request 是否有文件上传,即多部分请求...

MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)(request);



Iterator<String> iter = multiRequest.getFileNames();

while(iter.hasNext()){

MultipartFile file = multiRequest.getFile(iter.next());

String fileName = "demoUpload" +file.getOriginalFilename();

String path ="F:/" +fileName;

File localFile = new File(path);

file.transferTo(localFile);



}

}



return "/success";

}

最后是前台界面:

[html] view
plaincopy







[html] view
plaincopy





<h>上传文件</h>

<form name="userForm" action="/springMVC1/file/upload1" method="post" enctype="multipart/form-data">

选择文件:<input type="file" name="file">

<input type="submit" value="上传">

</form>

至此,一个简单上传文件就完成了,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: