Spring MVC 配置文件dispatcher

  1. <?xml version\="1.0" encoding\="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"

  3. xmlns:mvc="http://www.springframework.org/schema/mvc"

  4. xmlns:context="http://www.springframework.org/schema/context"

  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  6. xsi:schemaLocation="http://www.springframework.org/schema/beans

  7. http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

  8. http://www.springframework.org/schema/context

  9. http://www.springframework.org/schema/context/spring-context-3.2.xsd

  10. http://www.springframework.org/schema/mvc

  11. http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"\>

  12. <!-- 使用spring提供的PropertyPlaceholderConfigurer读取数据库配置信息.properties
  13. 1、这里的classpath可以认为是项目中的src-

  14. 2、属性名是 locations,使用子标签<list></list>可以指定多个数据库的配置文件,这里指定了一个

  15. 其中order属性代表其加载顺序,而ignoreUnresolvablePlaceholders为是否忽略不可解析的 Placeholder,

  16. 如配置了多个PropertyPlaceholderConfigurer,则需设置为true

  17. <bean id="propertyConfigurerForProject2" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

  18. <property name="order" value="2" />

  19. <property name="ignoreUnresolvablePlaceholders" value="true" />

  20. <property name="locations">

  21. <list>

  22. <value>classpath:/spring/include/jdbc-parms.properties</value>

  23. <value>classpath:/spring/include/base-config.properties</value>

  24. </list>

  25. </property>

  26. </bean>-->

  27. <bean id="propertyConfigurer"

  28. class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

  29. <property name="ignoreUnresolvablePlaceholders" value="true"/>

  30. <property name="location" value="classpath:/application.properties"/>

  31. </bean>

  32. <!--注解探测器,在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,
  33. 如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean

  34. 注意:如果配置了context:component-scan\那么context:annotation-config/标签就可以不用再xml中配置了,因为前者包含了后者。

  35. 另外context:annotation-config/还提供了两个子标签

  36. 1. context:include-filter\ 2.context:exclude-filter\

  37. context:component-scan\有一个use-default-filters属性,改属性默认为true,这就意味着会扫描指定包下的全部的标有@Component的类,

  38. 并注册成bean.也就是@Component的子注解@Service,@Reposity等。所以如果仅仅是在配置文件中这么写

  39. <context:component-scan base-package="com.test.myapp.web"/>

  40. Use-default-filter此时为true,那么会对base-package包或者子包下的jun所有的进行java类进行扫描,并把匹配的java类注册成bean。

  41. 可以发现这种扫描的粒度有点太大,如果你只想扫描指定包下面的Controller,该怎么办?此时子标签context:incluce-filter\就起到了勇武之地。如下所示

  42. <context:component-scan base-package="com.test.myapp.web.Controller">

  43. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

  44. </context:component-scan>

  45. 这样就会只扫描base-package指定下的有@Controller下的java类,并注册成bean.

  46. 但是因为use-dafault-filter在上面并没有指定,默认就为true,所以当把上面的配置改成如下所示的时候,就会产生与你期望相悖的结果(注意base-package包值得变化)

  47. <context:component-scan base-package="com.test.myapp.web ">

  48. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

  49. </context:component-scan>

  50. 此时,spring不仅扫描了@Controller,还扫描了指定包所在的子包service包下注解@Service的java类

  51. 此时指定的include-filter没有起到作用,只要把use-default-filter设置成false就可以了。这样就可以避免在base-packeage配置多个包名这种不是很优雅的方法来解决这个问题了。

  52. 另外在我参与的项目中可以发现在base-package指定的包中有的子包是不含有注解了,所以不用扫描,此时可以指定context:exclude-filter\来进行过滤,说明此包不需要被扫描。综合以上说明

  53. Use-dafault-filters=”false”的情况下:context:exclude-filter\指定的不扫描,context:include-filter\指定的扫描-->

  54. <context:component-scan base-package="com.test.myapp">

  55. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

  56. </context:component-scan>

  57. <!-- 视图解析器,根据视图的名称new ModelAndView(name),在配置文件查找对应的bean配置
  58. 这个视图解析器跟XmlViewResolver有点类似,也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象。

  59. 不同点有二,一是BeanNameViewResolver要求视图bean对象都定义在Spring的application context中,

  60. 而XmlViewResolver是在指定的配置文件中寻找视图bean对象,二是BeanNameViewResolver不会进行视图缓存。

  61. 如果没有设置viewResolver,spring使用InternalResourceViewResolver进行解析。

  62. Spring实现ViewResolver的非抽象类且我们经常使用的viewResolver有以下四种:

  63. 1、InternalResourceViewResolver  将逻辑视图名字解析为一个路径

  64. 2、BeanNameViewResolver  将逻辑视图名字解析为bean的Name属性,从而根据name属性,找定义View的bean

  65. 3、ResourceBundleResolver   和BeanNameViewResolver一样,只不过定义的view-bean都在一个properties文件中,用这个类进行加载这个properties文件

  66. 4、XmlViewResolver  和ResourceBundleResolver一样,只不过定义的view-bean在一个xml文件中,用这个类来加载xml文件

  67. DispatcherServlet会加载所有的viewResolver到一个list中,并按照优先级进行解析。

  68. 我们不想只使用一种视图解析器的话,可以在[spring-dispatcher-name]-servlet.xml定义多个viewResolver:

  69. 注意order中的值越小,优先级越高。而id为viewResolver 的viewResolver的优先级是最低的。

  70. -->

  71. <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">

  72. <property name="order" value="1"/>

  73. </bean>

  74. <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
  75. <!--<property name="prefix" value="/WEB-INF/"/>-->
  76. <!--<property name="suffix" value=".html"/>-->
  77. <!--</bean>-->
  78. <!--基于json格式的mvc交互-->
  79. <bean name="jsonView" class="com.test.myapp.MappingFastJsonJsonView">

  80. <property name="contentType" value="application/json;charset=UTF-8"/>

  81. </bean>

  82. <!-- spring mvc +servlet3.0上传文件配置,文件上传插件uploadify的应用
  83. 1)  在Web.xml的配置

  84. 需要在web.xml添加multipart-config,如下所示

  85. <servlet>

  86. <servlet-name>AcrWeb</servlet-name>

  87. <servlet-class>

  88. org.springframework.web.servlet.DispatcherServlet

  89. </servlet-class>

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

  91. <multipart-config>

  92. <max-file-size>52428800</max-file-size>

  93. <max-request-size>52428800</max-request-size>

  94. <file-size-threshold>0</file-size-threshold>

  95. </multipart-config>

  96. </servlet>

  97. 2)  在spring的application.xml(名字不一定是application)的配置,需要在该配置文件下添加一个如下的bean

  98. spring mvc +servlet3.0上传文件配置

  99. <bean id="multipartResolver"

  100. class="org.springframework.web.multipart.support.StandardServletMultipartResolver">

  101. </bean>

  102. 3)  在jsp页面中需要引入一些相关的该插件的包

  103. <script src\="<c:url value="/asset/admin/js/uploadify/jquery.uploadify.min.js"/>"\></script\>
  104. 4)   定义一个选择文件的input框

  105. <div class\="box-body"\>
  106. <span class="label input g1">上传apk</span>

  107. <input id="apk_upload" name="apk_upload" type="file"/>

  108. <input id="apkUrl" type="hidden" name="apkUrl"/>

  109. </div>

  110. 5)  Input file与插件进行绑定

  111. $("#apk_upload").uploadify({

  112. swf: "<c:url value='/asset/admin/js/uploadify/uploadify.swf'/>",

  113. //cancelImg : "<c:url value='/asset/admin/js/uploadify/uploadify-cancel.png'/>",

  114. uploader: "/acr/admin/app/apkupload",

  115. fileObjName: "file",//对应着文件输入框

  116. width:300,

  117. buttonText: '<img src="/acr/asset/admin/js/uploadify/upload.png" />',

  118. // onInit: function () { $(".uploadify-queue").hide();  },

  119. //removeCompleted : false,

  120. onUploadSuccess : function(file, data, response) {

  121. $("#apkUrl").val(data);

  122. },

  123. onUploadError : function(file, errorCode, errorMsg, errorString) {

  124. alert('文件 ' + file.name + ' 上传失败: ' + errorString);

  125. }

  126. });

  127. 注意:该插件的uploadify.swf文件时放入到项目的某一个文件下面

  128. Uploader的值对应的是url,该值映射到了springmvc的一个方法,该方法是文件上传的核心,

  129. 负责把文件写到指定位置的地方去。

  130. 6)  Spring 后台代码的实现

  131. @RequestMapping(value = "/apkupload", method=RequestMethod.POST)

  132. public @ResponseBody String apkUpload(

  133. @RequestParam MultipartFile file,

  134. Model model,

  135. HttpServletRequest request) throws IOException {

  136. InputStream input = null;

  137. OutputStream output = null;

  138. String root = "H:/file";

  139. //生成了文件名字

  140. String filename = file.getOriginalFilename();

  141. //文件要上传的位置

  142. String fileFullName = buildUpPath(root, filename);

  143. try {

  144. File dir = new File(root);

  145. if(!dir.exists()){

  146. dir.mkdirs();

  147. }

  148. input = file.getInputStream();

  149. output = new FileOutputStream(new File(fileFullName));

  150. //保存文件

  151. IOUtils.copy(input, output);

  152. } catch (Throwable e) {

  153. throw e;

  154. }finally{

  155. IOUtils.closeQuietly(input);

  156. IOUtils.closeQuietly(output);

  157. }

  158. return root+"/"+filename;

  159. }

  160. 其中filename对应着步骤5的onUploadSuccess中的data

  161. -->

  162. <bean id="multipartResolver"

  163. class="org.springframework.web.multipart.support.StandardServletMultipartResolver">

  164. </bean>

[html]  view plain copy

  1. </beans>

  2. <?xml version\="1.0" encoding\="UTF-8"?>
  3. <beans xmlns="http://www.springframework.org/schema/beans"

  4. xmlns:mvc="http://www.springframework.org/schema/mvc"

  5. xmlns:context="http://www.springframework.org/schema/context"

  6. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  7. xsi:schemaLocation="http://www.springframework.org/schema/beans

  8. http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

  9. http://www.springframework.org/schema/context

  10. http://www.springframework.org/schema/context/spring-context-3.2.xsd

  11. http://www.springframework.org/schema/mvc

  12. http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"\>

  13. <!-- 使用spring提供的PropertyPlaceholderConfigurer读取数据库配置信息.properties
  14. 1、这里的classpath可以认为是项目中的src-

  15. 2、属性名是 locations,使用子标签<list></list>可以指定多个数据库的配置文件,这里指定了一个

  16. 其中order属性代表其加载顺序,而ignoreUnresolvablePlaceholders为是否忽略不可解析的 Placeholder,

  17. 如配置了多个PropertyPlaceholderConfigurer,则需设置为true

  18. <bean id="propertyConfigurerForProject2" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

  19. <property name="order" value="2" />

  20. <property name="ignoreUnresolvablePlaceholders" value="true" />

  21. <property name="locations">

  22. <list>

  23. <value>classpath:/spring/include/jdbc-parms.properties</value>

  24. <value>classpath:/spring/include/base-config.properties</value>

  25. </list>

  26. </property>

  27. </bean>-->

  28. <bean id="propertyConfigurer"

  29. class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

  30. <property name="ignoreUnresolvablePlaceholders" value="true"/>

  31. <property name="location" value="classpath:/application.properties"/>

  32. </bean>

  33. <!--注解探测器,在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,
  34. 如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean

  35. 注意:如果配置了context:component-scan\那么context:annotation-config/标签就可以不用再xml中配置了,因为前者包含了后者。

  36. 另外context:annotation-config/还提供了两个子标签

  37. 1. context:include-filter\ 2.context:exclude-filter\

  38. context:component-scan\有一个use-default-filters属性,改属性默认为true,这就意味着会扫描指定包下的全部的标有@Component的类,

  39. 并注册成bean.也就是@Component的子注解@Service,@Reposity等。所以如果仅仅是在配置文件中这么写

  40. <context:component-scan base-package="com.test.myapp.web"/>

  41. Use-default-filter此时为true,那么会对base-package包或者子包下的jun所有的进行java类进行扫描,并把匹配的java类注册成bean。

  42. 可以发现这种扫描的粒度有点太大,如果你只想扫描指定包下面的Controller,该怎么办?此时子标签context:incluce-filter\就起到了勇武之地。如下所示

  43. <context:component-scan base-package="com.test.myapp.web.Controller">

  44. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

  45. </context:component-scan>

  46. 这样就会只扫描base-package指定下的有@Controller下的java类,并注册成bean.

  47. 但是因为use-dafault-filter在上面并没有指定,默认就为true,所以当把上面的配置改成如下所示的时候,就会产生与你期望相悖的结果(注意base-package包值得变化)

  48. <context:component-scan base-package="com.test.myapp.web ">

  49. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

  50. </context:component-scan>

  51. 此时,spring不仅扫描了@Controller,还扫描了指定包所在的子包service包下注解@Service的java类

  52. 此时指定的include-filter没有起到作用,只要把use-default-filter设置成false就可以了。这样就可以避免在base-packeage配置多个包名这种不是很优雅的方法来解决这个问题了。

  53. 另外在我参与的项目中可以发现在base-package指定的包中有的子包是不含有注解了,所以不用扫描,此时可以指定context:exclude-filter\来进行过滤,说明此包不需要被扫描。综合以上说明

  54. Use-dafault-filters=”false”的情况下:context:exclude-filter\指定的不扫描,context:include-filter\指定的扫描-->

  55. <context:component-scan base-package="com.test.myapp">

  56. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

  57. </context:component-scan>

  58. <!-- 视图解析器,根据视图的名称new ModelAndView(name),在配置文件查找对应的bean配置
  59. 这个视图解析器跟XmlViewResolver有点类似,也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象。

  60. 不同点有二,一是BeanNameViewResolver要求视图bean对象都定义在Spring的application context中,

  61. 而XmlViewResolver是在指定的配置文件中寻找视图bean对象,二是BeanNameViewResolver不会进行视图缓存。

  62. 如果没有设置viewResolver,spring使用InternalResourceViewResolver进行解析。

  63. Spring实现ViewResolver的非抽象类且我们经常使用的viewResolver有以下四种:

  64. 1、InternalResourceViewResolver  将逻辑视图名字解析为一个路径

  65. 2、BeanNameViewResolver  将逻辑视图名字解析为bean的Name属性,从而根据name属性,找定义View的bean

  66. 3、ResourceBundleResolver   和BeanNameViewResolver一样,只不过定义的view-bean都在一个properties文件中,用这个类进行加载这个properties文件

  67. 4、XmlViewResolver  和ResourceBundleResolver一样,只不过定义的view-bean在一个xml文件中,用这个类来加载xml文件

  68. DispatcherServlet会加载所有的viewResolver到一个list中,并按照优先级进行解析。

  69. 我们不想只使用一种视图解析器的话,可以在[spring-dispatcher-name]-servlet.xml定义多个viewResolver:

  70. 注意order中的值越小,优先级越高。而id为viewResolver 的viewResolver的优先级是最低的。

  71. -->

  72. <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">

  73. <property name="order" value="1"/>

  74. </bean>

  75. <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
  76. <!--<property name="prefix" value="/WEB-INF/"/>-->
  77. <!--<property name="suffix" value=".html"/>-->
  78. <!--</bean>-->
  79. <!--基于json格式的mvc交互-->
  80. <bean name="jsonView" class="com.test.myapp.MappingFastJsonJsonView">

  81. <property name="contentType" value="application/json;charset=UTF-8"/>

  82. </bean>

  83. <!-- spring mvc +servlet3.0上传文件配置,文件上传插件uploadify的应用
  84. 1)  在Web.xml的配置

  85. 需要在web.xml添加multipart-config,如下所示

  86. <servlet>

  87. <servlet-name>AcrWeb</servlet-name>

  88. <servlet-class>

  89. org.springframework.web.servlet.DispatcherServlet

  90. </servlet-class>

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

  92. <multipart-config>

  93. <max-file-size>52428800</max-file-size>

  94. <max-request-size>52428800</max-request-size>

  95. <file-size-threshold>0</file-size-threshold>

  96. </multipart-config>

  97. </servlet>

  98. 2)  在spring的application.xml(名字不一定是application)的配置,需要在该配置文件下添加一个如下的bean

  99. spring mvc +servlet3.0上传文件配置

  100. <bean id="multipartResolver"

  101. class="org.springframework.web.multipart.support.StandardServletMultipartResolver">

  102. </bean>

  103. 3)  在jsp页面中需要引入一些相关的该插件的包

  104. <script src\="<c:url value="/asset/admin/js/uploadify/jquery.uploadify.min.js"/>"\></script\>
  105. 4)   定义一个选择文件的input框

  106. <div class\="box-body"\>
  107. <span class="label input g1">上传apk</span>

  108. <input id="apk_upload" name="apk_upload" type="file"/>

  109. <input id="apkUrl" type="hidden" name="apkUrl"/>

  110. </div>

  111. 5)  Input file与插件进行绑定

  112. $("#apk_upload").uploadify({

  113. swf: "<c:url value='/asset/admin/js/uploadify/uploadify.swf'/>",

  114. //cancelImg : "<c:url value='/asset/admin/js/uploadify/uploadify-cancel.png'/>",

  115. uploader: "/acr/admin/app/apkupload",

  116. fileObjName: "file",//对应着文件输入框

  117. width:300,

  118. buttonText: '<img src="/acr/asset/admin/js/uploadify/upload.png" />',

  119. // onInit: function () { $(".uploadify-queue").hide();  },

  120. //removeCompleted : false,

  121. onUploadSuccess : function(file, data, response) {

  122. $("#apkUrl").val(data);

  123. },

  124. onUploadError : function(file, errorCode, errorMsg, errorString) {

  125. alert('文件 ' + file.name + ' 上传失败: ' + errorString);

  126. }

  127. });

  128. 注意:该插件的uploadify.swf文件时放入到项目的某一个文件下面

  129. Uploader的值对应的是url,该值映射到了springmvc的一个方法,该方法是文件上传的核心,

  130. 负责把文件写到指定位置的地方去。

  131. 6)  Spring 后台代码的实现

  132. @RequestMapping(value = "/apkupload", method=RequestMethod.POST)

  133. public @ResponseBody String apkUpload(

  134. @RequestParam MultipartFile file,

  135. Model model,

  136. HttpServletRequest request) throws IOException {

  137. InputStream input = null;

  138. OutputStream output = null;

  139. String root = "H:/file";

  140. //生成了文件名字

  141. String filename = file.getOriginalFilename();

  142. //文件要上传的位置

  143. String fileFullName = buildUpPath(root, filename);

  144. try {

  145. File dir = new File(root);

  146. if(!dir.exists()){

  147. dir.mkdirs();

  148. }

  149. input = file.getInputStream();

  150. output = new FileOutputStream(new File(fileFullName));

  151. //保存文件

  152. IOUtils.copy(input, output);

  153. } catch (Throwable e) {

  154. throw e;

  155. }finally{

  156. IOUtils.closeQuietly(input);

  157. IOUtils.closeQuietly(output);

  158. }

  159. return root+"/"+filename;

  160. }

  161. 其中filename对应着步骤5的onUploadSuccess中的data

  162. -->

  163. <bean id="multipartResolver"

  164. class="org.springframework.web.multipart.support.StandardServletMultipartResolver">

  165. </bean>

[html]  view plain copy

  1. </beans>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )