Spring框架最初由Rod Johnson撰写,并于2003年6月根据Apache许可证首次发布.
Spring web MVC框架提供了模型(模型-视图-控制器)架构用于开发灵活和松散耦合的web应用程序的组件.MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同事提供这些元素之间的松散耦合.
- 模型(Model)封装了应用程序数据,通常它们由pojo类组成.
- 视图(View)复制渲染模型数据,一般来说它生成客户端浏览器可以解释html输出.
- 控制器(Controller) 负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染.
1.
通过使用文件中的URL映射来映射希望DispatcherServlet处理的请求.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!--配置前端控制器-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--表示希望DispatcherServlet处理以.do做后缀名的url-->
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 中文乱码-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--HiddernHttpMethodFilter:浏览器表单只支持GET与POST请求,
而DELETE、PUT等method并不支持,Spring3.0添加了一个过滤器,
可以将这些请求转发为标砖的http方法,支持GET、POST、PUT、DELETE请求-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<!--定义资源找不到时显示哪个页面-->
<error-page>
<error-code>404</error-code>
<location>/config/404.jsp</location>
</error-page>
<!--定义服务器内部错误显示哪个页面-->
<error-page>
<error-code>500</error-code>
<location>/config/500.jsp</location>
</error-page>
- load-on-startup该元素标记是否在容器启动的时候就加载这个servlet
- 值>=0表示容器在应用启动时就加载并且初始化这个servlet
- 值<0或者没有指定表示该servlet被选择时才会被加载
- 正数的值越小,该servlet优先级越高,应用启动时越先被加载
- 值相同,servlet按照自己选择的顺序加载
2.
该文件用于创建定义的bean,它会覆盖在全局范围中使用相同名称定义的任何bean的定义
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置扫描-->
<context:component-scan base-package="test"/>
<!--启动mvc注解驱动-->
<mvc:annotation-driven/>
<!--开启定时器-->
<task:annotation-driven/>
<!--静态资源管理-->
<mvc:default-servlet-handler/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--配置文件上传-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--上传文件大小限制-->
<property name="maxUploadSize">
<value>10485760</value>
</property>
<!--请求的编码格式 和jsp的一致-->
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
</beans>
- <context:component-scan>和<mvc:annotation-driven/>区别:参考多汁的西瓜
- InternalResourceViewResolver将定义用于解析视图名称的规则.
应用上下文,全局的配置.其启动配置一般在web.xml的Listener节点中,加载优先级Listener大于Servlet,两者性质不同,Listener的操作是对一个事件对象的监听,Servlet和filter比较类似,是对url的一种匹配拦截.
// web.xml中的配置
//spring配置文件信息
<!--ContextLoaderListener监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
session工厂的配置及mapper扫描(applicationContext.xml)
<!--加载配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--数据库连接池配置-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- Session工厂-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- mybatis核心配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!-- mapper扫描-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ff.dao"/>
</bean>
jdbc.properties
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.username=scott
jdbc.password=123
jdbc.url=jdbc:mysql://94.191.97.133:3306/ttms
其他
<!-- 拦截器-->
// springMVC-servlet.xml
<mvc:interceptors>
<mvc:interceptor>
<!--拦截哪些方法-->
<mvc:mapping path="/admin/**"/>
<!--放行哪些方法-->
<mvc:exclude-mapping path="/test/*"/>
<bean class="com.ff.utils.SecurityInterceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/seat/ticket.do"/>
<bean class="com.ff.utils.SecurityInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
log4j.properties
log4j.rootLogger=debug,stdout
#log4j.logger.org.hibernate.type=TRACE
#log4j.logger.org.hibernate.hql=debug
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n
属性文件加载
<!--属性文件加载-->
<context:property-placeholder location="classpath:config.properties" ignore-unresolvable="true" />
<context:property-placeholder location="classpath:rsa.properties" ignore-unresolvable="true"/>