Spring MVC 配置文件dispatcher-servlet.xml 文件详解

2024-04-04 22:38

本文主要是介绍Spring MVC 配置文件dispatcher-servlet.xml 文件详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[html]  view plain copy
  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.   
  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.   
  84.     <!-- spring mvc +servlet3.0上传文件配置,文件上传插件uploadify的应用  
  85.      1)  在Web.xml的配置  
  86.      需要在web.xml添加multipart-config,如下所示  
  87.      <servlet>  
  88.         <servlet-name>AcrWeb</servlet-name>  
  89.         <servlet-class>  
  90.             org.springframework.web.servlet.DispatcherServlet  
  91.         </servlet-class>  
  92.         <load-on-startup>1</load-on-startup>  
  93.         <multipart-config>  
  94.             <max-file-size>52428800</max-file-size>  
  95.             <max-request-size>52428800</max-request-size>  
  96.             <file-size-threshold>0</file-size-threshold>  
  97.         </multipart-config>  
  98.     </servlet>  
  99.     2)  在spring的application.xml(名字不一定是application)的配置,需要在该配置文件下添加一个如下的bean  
  100.        spring mvc +servlet3.0上传文件配置  
  101.     <bean id="multipartResolver"  
  102.           class="org.springframework.web.multipart.support.StandardServletMultipartResolver">  
  103.     </bean>  
  104.     3)  在jsp页面中需要引入一些相关的该插件的包  
  105.      <script src="<c:url value="/asset/admin/js/uploadify/jquery.uploadify.min.js"/>"></script>  
  106.     4)   定义一个选择文件的input框  
  107.      <div class="box-body">  
  108.        <span class="label input g1">上传apk</span>  
  109.        <input id="apk_upload" name="apk_upload" type="file"/>  
  110.        <input id="apkUrl" type="hidden" name="apkUrl"/>  
  111.      </div>  
  112.     5)  Input file与插件进行绑定  
  113.     $("#apk_upload").uploadify({  
  114.             swf: "<c:url value='/asset/admin/js/uploadify/uploadify.swf'/>",  
  115.             //cancelImg : "<c:url value='/asset/admin/js/uploadify/uploadify-cancel.png'/>",  
  116.             uploader: "/acr/admin/app/apkupload",  
  117.             fileObjName: "file",//对应着文件输入框  
  118.             width:300,  
  119.             buttonText: '<img src="/acr/asset/admin/js/uploadify/upload.png" />',  
  120.             // onInit: function () { $(".uploadify-queue").hide();  },  
  121.             //removeCompleted : false,  
  122.             onUploadSuccess : function(file, data, response) {  
  123.                 $("#apkUrl").val(data);  
  124.             },  
  125.             onUploadError : function(file, errorCode, errorMsg, errorString) {  
  126.                 alert('文件 ' + file.name + ' 上传失败: ' + errorString);  
  127.             }  
  128.         });  
  129.          注意:该插件的uploadify.swf文件时放入到项目的某一个文件下面  
  130.          Uploader的值对应的是url,该值映射到了springmvc的一个方法,该方法是文件上传的核心,  
  131.          负责把文件写到指定位置的地方去。  
  132.          6)  Spring 后台代码的实现  
  133.          @RequestMapping(value = "/apkupload"method=RequestMethod.POST)  
  134.     public @ResponseBody String apkUpload(  
  135.             @RequestParam MultipartFile file,  
  136.             Model model,  
  137.             HttpServletRequest request) throws IOException {  
  138.         InputStream input = null;  
  139.         OutputStream output = null;  
  140.         String root = "H:/file";  
  141.         //生成了文件名字  
  142.         String filename = file.getOriginalFilename();  
  143.         //文件要上传的位置  
  144.         String fileFullName = buildUpPath(root, filename);  
  145.         try {  
  146.             File dir = new File(root);  
  147.             if(!dir.exists()){  
  148.                 dir.mkdirs();  
  149.             }  
  150.             input = file.getInputStream();  
  151.             output = new FileOutputStream(new File(fileFullName));  
  152.             //保存文件  
  153.             IOUtils.copy(input, output);  
  154.         } catch (Throwable e) {  
  155.             throw e;  
  156.         }finally{  
  157.             IOUtils.closeQuietly(input);  
  158.             IOUtils.closeQuietly(output);  
  159.         }  
  160.         return root+"/"+filename;  
  161.     }  
  162.        其中filename对应着步骤5的onUploadSuccess中的data  
  163.     -->  
  164.     <bean id="multipartResolver"  
  165.           class="org.springframework.web.multipart.support.StandardServletMultipartResolver">  
  166.     </bean>   copy
  1. </beans>  

这篇关于Spring MVC 配置文件dispatcher-servlet.xml 文件详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/876989

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置