mvc

二 理解DispatcherServlet

廉价感情. 提交于 2019-12-01 05:41:27
要理解DispatcherServlet,首先看一下他的作用,先摘一段开涛的原话: DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。 何为前端控制器设计模式呢?下面是一段摘自百度找到的文字: 前端控制器(front controller)主要提供一种可以集中式管理请求的控制器,一个前端控制器可以接受所有的客户请求,将每个请求递交给相应的请求句柄,并适当地响应用户。 前端控制器也是表示层的设计模式,它的出现主要是由于表示层通常需要控制和协调来自不同用户的多个请求,而这种控制机制又根据不同的需要,可能会集中式控制或分散式控制。换句话说,就是应用系统需要对于表示层的请求提供一个集中式控制模块,以提供各种系统服务,包括内容提取、视图管理和浏览,如果系统中没有这种集中式控制模块或控制机制,每个不同的系统服务都需要进行单独的视图处理,这样代码的重复性就会提高,致使系统开发代价提高。同时,如果没有一个固定模块管理视图之间的浏览机制,致使其浏览功能下放于每个不同的视图中,最终必将使得系统的可维护性受到破坏。 大家不要在意这些细节,大概知道这个设计模式的作用就是集中客户请求,并负责职责的分派就行。重点在于,它与Spring IOC容器无缝集成

使用泛型和反射技术简化Spring jdbcTemplate的使用

与世无争的帅哥 提交于 2019-12-01 04:56:28
最近没事儿研究了下springMVC,因为不想用hibernate,所以就是用了spring自带的jdbcTemplate。在使用的过程中发现spring jdbcTemplate需要自己实现将结果集转化为对象的操作,个人感觉很是繁琐,于是就使用泛型和反射对这个过程进行了封装,来简化jdbcTemplate的使用。废话少说,上代码: public class MyRowMapper<T> implements RowMapper { private Class<T> cls; public MyRowMapper(Class<T> cls) { this.cls = cls; } @Override public Object mapRow(ResultSet rs, int num) throws SQLException { T t = null; try { // 获取对象中的所有字段 Field[] fields = cls.getDeclaredFields(); // 实例化 t = cls.newInstance(); for(Field f : fields){ // if(f.isAnnotationPresent(NotPersistent.class)){ // continue; // } // 获取字段名称 String fieldName = f

sping3+hibernate4框架模板

我的梦境 提交于 2019-12-01 01:06:07
本框架以商品购物平台项目为例,用到spring3mvc和hibernate4,主要搭建步骤如下: 1、spring3MVC模板 2、集成hiebernate4模板 3、Spring集成测试模板 包含的技术: spring框架; springMVC技术; velocity框架; 多视图解析器; Log4j日志框架; spring集成测试; 【配置web.xml】 【spring3MVC+Velocity模板】 (1)放入sping3所需的库、commons-logging-1.0.4.jar、jstl.jar, 加入velocity框架需要的库(velocity-1.7.jar、commons-collections-3.2.1.jar、commons-lang-2.4.jar) (2)配置web.xml,启动spring和mvc <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http

spring mvc文件上传实现进度条

喜夏-厌秋 提交于 2019-11-30 16:56:35
文件上传应该大部分人都接触过,一般都是基于commons-fileupload组件来实现,SpringMVC的文件上传功能也是在commons-fileupload组件提供的功能上面做了一些包装功能,使文件上传开发更容易方便。 看下上传效果图: 项目运行效果: 项目源码地址,发布即可用: https://github.com/wuskyfantasy/fileupload.sys 项目使用spring mvc+mybatis实现,数据库采用mysql,具体参考README就可以发布起来。 一、实现普通文件上传 我们知道,类DispatcherServlet是SpringMVC的入口,在其doDispatch方法里面,我们可以看到它会先去检查有没配置multipartResolver 如果有的话会先执行它的resolveMultipart方法: 因此,我们在配置文件中添加: 则可使用SpringMVC自带的CommonsMultipartResolver实现多个文件上传的功能。 二、实现进度条 现在实现带进度条的文件上传一般都是在客户端用flash上传组件计算,或者是通过客户端插件的方式。前者上传组件有大小的限制,后者对于我们系统来说实现过于复杂,开发难度稍大。因此我们采用服务器端计算文件上传进度,客户端轮询的方式。 Commons-fileupload组件自带了文件上传进度的监听器

Spring MVC 入门指南(二):@RequestMapping用法详解

匆匆过客 提交于 2019-11-30 14:18:17
一、 @RequestMapping 简介 在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置 <servlet> <servlet-name>servletName</servlet-name> <servlet-class>ServletClass</servlet-class> </servlet> <servlet-mapping> <servlet-name>servletName</servlet-name> <url-pattern>url</url-pattern> </servlet-mapping> 的映射作用一致。让我们先看一下RequestMapping注解类的源码: @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String name() default ""; String[] value() default {}; String[] path() default {}; RequestMethod[]

解决Spring @MVC DispatcherServlet绑定多种URL模式时遇到的问题

和自甴很熟 提交于 2019-11-30 08:21:09
Spring MVC使用过程中遇到了这样一个问题,web.xml有如下的配置,注意两个url-pattern是两种不同的url模式,*.html主要是处理一般的页面请求,而/file/view/*主要是用于文件下载,因为通过response设置下载文件名和文件contentType太过麻烦,所以用了个取巧的方法把文件名作为url的一部分,由于文件后缀有很多种,就没法单靠*.html拦截。 <!-- Spring MVC前端处理器 --> <servlet> <servlet-name>Dispatcher Servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <description>Spring MVC定义Bean文件,该文件为空配置,所有配置交给上级WebApplicationContext来处理</description> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/servlet-empty-context.xml</param-value> </init-param> </servlet>

Spring MVC启动过程(1):ContextLoaderListener初始化

邮差的信 提交于 2019-11-30 08:15:03
Spring MVC启动过程 以Tomcat为例,想在Web容器中使用Spirng MVC,必须进行四项的配置: 修改web.xml,添加servlet定义、编写servletname-servlet.xml( servletname是在web.xm中配置DispactherServlet时使servlet-name的值 ) 、 配置contextConfigLocation初始化参数、配置ContextLoaderListerner。 <!-- servlet定义 --> <servlet> <servlet-name>court</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>court</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 配置contextConfigLocation初始化参数 --> <context-param> <param-name

Spring3.2 MVC 分析

一世执手 提交于 2019-11-30 08:14:47
Spring3.2 MVC 分析: SpringMVC现在应该用得很广泛了,其配置清晰,灵活度,定制能力等都是很强的,相比Struts2也是胜过一筹,还是从源码来分析一下,SpringMVC为我们做了什么。 先从配置文件开始,看web.xml,用过SpringMVC的同学应该都很熟悉: <web-app> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener<!-- Spring根容器在这里被建立起来 --> </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:configs/beans.xml</param-value> </context-param> <!-- SpringMVC子容器会在DispatherServlet初始化过程中被建立起来 --> <servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet

SSH框架中不为人知的细节(二)

隐身守侯 提交于 2019-11-30 07:50:05
Struts2之ValueStack 上一节在将阐述ModelDriven的机制时,常常提到一个名词ValueStack。也许你会毫不犹豫脱口而出,不就是值栈吗?对,就是它,那你知道Struts为什么需要引入它?它是如何工作的?它和OGNL有何私情?如果你对以上问题的答案很模糊,但是又确实想知道答案,那么本文将带你去看看ValueStack的世界。 Why ValueStack? 说Struts就不得不提MVC,所有的请求都是基于页面(View)提交,页面是数据最初的载体,然后提交给Controller,由Controller将数据做第一次处理,然后交给业务层做进一步的处理。下面,我们还是通过代码直观的体会一下。 JSP页面伪码: <form action="xxx/user-add.action" method="post"> username:<input type="text" name="username" /> age:<input type="text" name="age" /> groupName:<input type="text" name="group.name" /> <input type="submit" name="submit" value="添加" /> </form> VO伪码: public class UserVO { private

用 Hasor 谈一谈MVC设计模式

随声附和 提交于 2019-11-30 05:05:40
MVC 是一个老生常谈的东西早已不是什么稀罕物件,不过在这里还是扒一扒到底都有多少种 MVC。 一、经典 MVC 先说最经典的 MVC,一个请求控制器的请求,负责读取数据,然后将数据派发到试图上。如图: 在经典 MVC 中,可以看到我们请求的页面并不是真正的页面,而是一个控制器。具体显示的页面由这个控制器来决定,大名顶顶的 struts 框架就是这样一种模式。然而,通常为了记忆方便,基于这种经典模式的 MVC 我们通常是把 Controller 的名字起的和 View 一样。 这种模式下,Controller 的职责主要有两个:1、确定显示的最终页面。2、执行页面逻辑准备相关数据。 在 View 中使用的数据是来自 Controller 给予的。 例如“判断当前用户是否登录,如果登录则展现用户详细信息,如果未登录则展现登录界面”。这种场景比较适合这种模式。 二、视图前置 MVC 这是 MVC 的一个变版,在这种模式中 View 的地位被提升到 Controller 之前。也就是说请求是先得到了要显示的页面,而页面中的数据的获取逻辑被后置的 Controller 提供。 这种模式下,Controller 的职责变得只有一个,那就是:执行页面逻辑准备相关数据。视图前置这种模式在职责上更加清晰,但是它失去了对页面展现的控制。 通常在某个数据集中展现的地方会有这种模式的身影,例如:List