1。新建maven工程 pom文件增加spring-webmvc包 代码如下
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.2.RELEASE</version> </dependency>maven会自动帮你引入其他需要的包。 2。修改web.xml文件 增加代码如下:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:web_config/application.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/servlet_config/servlet_config.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>其中context-param可写多个(不写默认位置为/WEB-INF/applicationContext.xml),contextConfigLocation为上下文配置文件位置. classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. contextConfigLocation不可随意制定 参考http://blog.csdn.net/tiantiandjava/article/details/8964912
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>作用:在启动Web容器时,自动装配spring applicationContext.xml的配置信息。
因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成
参考http://blog.csdn.net/muzizhuben/article/details/9135275
3 spring-servlet.xml配置
spring-servlet这个名字是因为上面web.xml中标签配的值为spring(spring),再加上“-servlet”后缀而形成的spring-servlet.xml文件名,如果改为springMVC,对应的文件名则为springMVC-servlet.xml。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd "> <!-- scan the package and the sub package --> <context:component-scan base-package="ITS.hlh"/> <!-- configure the InternalResourceViewResolver --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean> </beans> <?xml version="1.0" encoding="UTF-8"?>xml文件的必要行
beans xmlns="http://www.springframework.org/schema/beans"beans —— xml文件的根节点。
xmlns ——是XML NameSpace的缩写,因为XML文件的标签名称都是自定义的,自己写的和其他人定义的标签很有可能会重复命名,而功能却不一样,所以需要加上一个namespace来区分这个xml文件和其他的xml文件,类似于java中的package。
xmlns:xsi ——是指xml文件遵守xml规范,xsi全名:xml schema instance,是指具体用到的schema资源文件里定义的元素所准守的规范。即/spring-beans-2.0.xsd这个文件里定义的元素遵守什么标准。
xsi:schemaLocation——是指,本文档里的xml元素所遵守的规范,schemaLocation 属性用来引用(schema)模式文档,解析器可以在需要的情况下使用这个文档对 XML 实例文档进行校验。它的值(URI)是成对出现的,第一个值表示命名空间,第二个值则表示描述该命名空间的模式文档的具体位置,两个值之间以空格分隔
参考http://blog.csdn.net/sccemstanford/article/details/9000447 http://www.cnblogs.com/coreyjk/p/6408638.html
实在不清楚可以全部写上
或者从spring-context-4.3.2.RELEASE.jar,spring-beans-4.3.2.RELEASE.jar等的web-inf文件夹下spring.schemas查看
<context:component-scan base-package="ITS.hlh"/>作用 Spring 容器初始化的时候,会扫描 com.eduoinfo.finances.bank.web下 标有 (@Component,@Service,@Controller,@Repository) 注解的 类 纳入spring容器管理写在applicationContext.xml也可以运行,具体不同以后再看
InternalResourceViewResolver类为了方便找到web页面的位置 applicationContext.xml会在程序启动时读取,而servlet的配置文件则在找到对应的servlet后读取。
最后碰到Cannot change version of project facet Dynamic web module to 3.1(如果是新建maven工程的配置文件中的jdk版本不对) 解决方法参考 http://blog.csdn.net/sunqing0316/article/details/43675837
AnnotationDrivenBeanDefinitionParser.addRequestBodyAdvice方法在jackson2Present为true时自动注册
jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader());Spring解析配置文件中用到的一些关键类的介绍: Resource:各种资源的抽象接口,包括xml文件,网络上的资源等。 BeanDefinitionRegistry:用于注册BeanDefinitionRegistry。 BeanDefinitionReader:用于读取解析Resource的抽象接口。 DefaultBeanDefinitionDocumentReader:实现了BeanDefinitionDocumentReader接口,DefaultBeanDefinitionDocumentReader并不负责任何具体的bean解析,它面向的是xml Document对象,根据其元素的命名空间和名称,起一个类似路由的作用((不过,命名空间的判断,也是委托给delegate来做的),它跟BeanDefinitionParserDelegate协同合作,把解析任务交接BeanDefinitionParserDelegate来做。 BeanDefinitionParserDelegate:完成具体Bean的解析(比如、、标签),对于扩展的标签会交给不同的NamespaceHandler跟BeanDefinitionParser来解析。 BeanDefinitionParser:解析配置文件成相应的BeanDefinition(,等标签都是又不同的BeanDefinitionParser来解析),一般在NamespaceHandler中使用。Spring也为自定义BeanDefinitionParser提供了很多支持,在一些抽象类的基础上添加少量功能即可满足大部分需求。 NamespaceHandler:要解析自定义的bean就要通过自己所实现的NamespaceHandler来进行解析。比如定义了http://www.springframework.org/schema/osgi=org.springframework.osgi.config.OsgiNamespaceHandler,那么在碰到osgi的scheme的时候就会去调用OsgiNamespaceHandler来进行解析; 在对于普通的扩展需求来说,只要让自己的Handler继承NamespaceHandlerSupport并实现 init()方法 就好了,对于特殊的扩展需求 则可以自己 来实现NamespaceHandler。