SpringMVC配置文件l文件详解
SpringMVC配置⽂件l⽂件详解
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:mvc="/schema/mvc"
xmlns:context="/schema/context"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-3.2.xsd
/schema/context
/schema/context/spring-context-3.2.xsd
/schema/mvc
/schema/mvc/spring-mvc-3.2.xsd">
<!-- 使⽤spring提供的PropertyPlaceholderConfigurer读取数据库配置信息.properties
1、这⾥的classpath可以认为是项⽬中的src-
2、属性名是 locations,使⽤⼦标签<list></list>可以指定多个数据库的配置⽂件,这⾥指定了⼀个
其中order属性代表其加载顺序,⽽ignoreUnresolvablePlaceholders为是否忽略不可解析的 Placeholder,
如配置了多个PropertyPlaceholderConfigurer,则需设置为true
<bean id="propertyConfigurerForProject2" class="org.springframework.fig.PropertyPlaceholderConfigurer">
<property name="order" value="2" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="locations">
<list>
<value>classpath:/spring/include/jdbc-parms.properties</value>
<value>classpath:/spring/include/base-config.properties</value>
</list>
</property>
</bean>-->
<bean id="propertyConfigurer"
class="org.springframework.fig.PropertyPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="location" value="classpath:/application.properties"/>
</bean>
<!--注解探测器,在xml配置了这个标签后,spring可以⾃动去扫描base-pack下⾯或者⼦包下⾯的java⽂件,
如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean
注意:如果配置了<context:component-scan>那么<context:annotation-config/>标签就可以不⽤再xml中配置了,因为前者包含了后者。
另外<context:annotation-config/>还提供了两个⼦标签
1. <context:include-filter>
2.<context:exclude-filter>
<context:component-scan>有⼀个use-default-filters属性,改属性默认为true,这就意味着会扫描指定包下的全部的标有@Component的类,
并注册成bean.也就是@Component的⼦注解@Service,@Reposity等。所以如果仅仅是在配置⽂件中这么写
<context:component-scan base-package="app.web"/>
Use-default-filter此时为true,那么会对base-package包或者⼦包下的jun所有的进⾏java类进⾏扫描,并把匹配的java类注册成bean。
可以发现这种扫描的粒度有点太⼤,如果你只想扫描指定包下⾯的Controller,该怎么办?此时⼦标签<context:incluce-filter>就起到了勇武之地。如下所⽰
<context:component-scan base-package="app.web.Controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
这样就会只扫描base-package指定下的有@Controller下的java类,并注册成bean.
但是因为use-dafault-filter在上⾯并没有指定,默认就为true,所以当把上⾯的配置改成如下所⽰的时候,就会产⽣与你期望相悖的结果(注意base-package包值得    <context:component-scan base-package="app.web ">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
此时,spring不仅扫描了@Controller,还扫描了指定包所在的⼦包service包下注解@Service的java类
此时指定的include-filter没有起到作⽤,只要把use-default-filter设置成false就可以了。这样就可以避免在base-packeage配置多个包名这种不是很优雅的⽅法来解决另外在我参与的项⽬中可以发现在base-package指定的包中有的⼦包是不含有注解了,所以不⽤扫描,此时可以指定<context:exclude-filter>来进⾏过滤,说明此包    Use-dafault-filters=”false”的情况下:<context:exclude-filter>指定的不扫描,<context:include-filter>指定的扫描-->
<context:component-scan base-package="app">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 视图解析器,根据视图的名称new ModelAndView(name),在配置⽂件查对应的bean配置
这个视图解析器跟XmlViewResolver有点类似,也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象。
不同点有⼆,⼀是BeanNameViewResolver要求视图bean对象都定义在Spring的application context中,
⽽XmlViewResolver是在指定的配置⽂件中寻视图bean对象,⼆是BeanNameViewResolver不会进⾏视图缓存。
如果没有设置viewResolver,spring使⽤InternalResourceViewResolver进⾏解析。
如果没有设置viewResolver,spring使⽤InternalResourceViewResolver进⾏解析。
Spring实现ViewResolver的⾮抽象类且我们经常使⽤的viewResolver有以下四种:
1、InternalResourceViewResolver  将逻辑视图名字解析为⼀个路径
2、BeanNameViewResolver  将逻辑视图名字解析为bean的Name属性,从⽽根据name属性,定义View的bean
3、ResourceBundleResolver  和BeanNameViewResolver⼀样,只不过定义的view-bean都在⼀个properties⽂件中,⽤这个类进⾏加载这个properties⽂件
4、XmlViewResolver  和ResourceBundleResolver⼀样,只不过定义的view-bean在⼀个xml⽂件中,⽤这个类来加载xml⽂件
DispatcherServlet会加载所有的viewResolver到⼀个list中,并按照优先级进⾏解析。
行政拘留和刑事拘留的区别我们不想只使⽤⼀种视图解析器的话,可以在[spring-dispatcher-name]-l定义多个viewResolver:
注意order中的值越⼩,优先级越⾼。⽽id为viewResolver 的viewResolver的优先级是最低的。
-->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1"/>
</bean>
<!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->辞职理由怎么写
<!--<property name="prefix" value="/WEB-INF/"/>-->
<!--<property name="suffix" value=".html"/>-->
<!--</bean>-->
<!--基于json格式的mvc交互-->
<bean name="jsonView" class="app.MappingFastJsonJsonView">
<property name="contentType" value="application/json;charset=UTF-8"/>
</bean>
<!-- spring mvc +servlet3.0上传⽂件配置,⽂件上传插件uploadify的应⽤
1)在l的配置名人的小故事
需要在l添加multipart-config,如下所⽰
<servlet>
<servlet-name>AcrWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
<multipart-config>
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
2)在spring的l(名字不⼀定是application)的配置,需要在该配置⽂件下添加⼀个如下的bean
spring mvc +servlet3.0上传⽂件配置
<bean id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>
3)在jsp页⾯中需要引⼊⼀些相关的该插件的包
<script src="<c:url value="/asset/admin/js/uploadify/jquery.uploadify.min.js"/>"></script>
4)定义⼀个选择⽂件的input框
<div class="box-body">
<span class="label input g1">上传apk</span>
<input id="apk_upload" name="apk_upload" type="file"/>
<input id="apkUrl" type="hidden" name="apkUrl"/>
</div>
5)  Input file与插件进⾏绑定
$("#apk_upload").uploadify({
可爱的网游名字
swf: "<c:url value='/asset/admin/js/uploadify/uploadify.swf'/>",
//cancelImg : "<c:url value='/asset/admin/js/uploadify/uploadify-cancel.png'/>",
uploader: "/acr/admin/app/apkupload",
fileObjName: "file",//对应着⽂件输⼊框
width:300,
buttonText: '<img src="/acr/asset/admin/js/uploadify/upload.png" />',
// onInit: function () { $(".uploadify-queue").hide();  },
//removeCompleted : false,
onUploadSuccess : function(file, data, response) {
$("#apkUrl").val(data);
},
onUploadError : function(file, errorCode, errorMsg, errorString) {
alert('⽂件 ' + file.name + ' 上传失败: ' + errorString);
}
}
});
注意:该插件的uploadify.swf⽂件时放⼊到项⽬的某⼀个⽂件下⾯
Uploader的值对应的是url,该值映射到了springmvc的⼀个⽅法,该⽅法是⽂件上传的核⼼,负责把⽂件写到指定位置的地⽅去。
彼岸花的花语是什么6)  Spring 后台代码的实现
@RequestMapping(value = "/apkupload", method=RequestMethod.POST)
public @ResponseBody String apkUpload(
@RequestParam MultipartFile file,
Model model,
HttpServletRequest request) throws IOException {
InputStream input = null;
OutputStream output = null;
String root = "H:/file";
//⽣成了⽂件名字
String filename = OriginalFilename();
//⽂件要上传的位置
String fileFullName = buildUpPath(root, filename);
try {
File dir = new File(root);
if(!ists()){
dir.mkdirs();
}
input = InputStream();
output = new FileOutputStream(new File(fileFullName));
//保存⽂件
} catch (Throwable e) {
猜灯谜中秋节throw e;
}finally{
IOUtils.closeQuietly(input);
IOUtils.closeQuietly(output);
}
return root+"/"+filename;
}
其中filename对应着步骤5的onUploadSuccess中的data
-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver">    </bean>
</beans>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。