SpringMVC基础

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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值