這里主要介紹SpringMVC的兩種配置文件的方式:
- 1版保、使用傳統(tǒng)的.xml配置文件耍群;
- 2、現(xiàn)在比較流行的使用代碼配置代碼的方式(用普通的Java類實(shí)現(xiàn)配置)找筝。
以下用代碼的方式表述詳細(xì)過程:
@Section one : .xml
- 1蹈垢、applicationContext.xml
該文件路徑應(yīng)為:根目錄"/"下,即:與package放在同一路徑下
<?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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"
default-autowire="byType">
<!-- 配置搜索組件的基礎(chǔ)包(父包) 將被注解的類的對(duì)象納入Spring IOC容器的管理 -->
<context:component-scan base-package="com.qfedu.dang"/>
<!-- 使用注釋來配置需要Spring IOC容器托管的對(duì)象以及對(duì)象之間的依賴關(guān)系 -->
<context:annotation-config />
<!-- 配置為切面自動(dòng)生成代理 -->
<aop:aspectj-autoproxy />
<!-- SessionFactory, DataSource, etc. omitted -->
<!-- 配置連接池袖裕,用空間換時(shí)間 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/dang?useUnicode=true&CharacterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="initialSize" value="10"/>
<property name="maxTotal" value="50"/>
<property name="maxWaitMillis" value="15000"/>
</bean>
<!-- 配置hibernate會(huì)話工廠 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.qfedu.dang.entity"/>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>
</bean>
<!-- 配置hibernate的事務(wù)管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven/>
</beans>
- 2曹抬、frontController-servlet.xml
該文件是配置視圖控制器的,在其中可以設(shè)置前綴后綴等
該文件路徑應(yīng)為:"/WEB-INF"下
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
default-autowire="byType">
<!-- 配置搜索組件的基礎(chǔ)包(父包) 將被注解的類的對(duì)象納入Spring IOC容器的管理 -->
<context:component-scan base-package="com.qfedu.dang.controller"/>
<!-- 使用注釋來配置需要Spring IOC容器托管的對(duì)象以及對(duì)象之間的依賴關(guān)系 -->
<context:annotation-config />
<!-- 配置Spring MVC 的視圖解析器 (渲染視圖完成模型和視圖的綁定)-->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
- 3急鳄、web.xml
這個(gè)文件尤其重要谤民,這是這個(gè)項(xiàng)目的配置文件,我們可以在里面配置很多東西疾宏,比如默認(rèn)頁面张足、前端控制器、過濾器坎藐、監(jiān)聽器等
該文件路徑為:"/WEB-INF"下为牍,這個(gè)文件可以在創(chuàng)建項(xiàng)目時(shí)勾選選項(xiàng)自動(dòng)生成,此處強(qiáng)烈建議留下這個(gè)web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="person" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.do</welcome-file>
</welcome-file-list>
<!-- 通過配置上下文參數(shù)來指定Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:app.xml</param-value>
</context-param>
<!-- 配置web項(xiàng)目的前端控制器(filter或者servlet) -->
<servlet>
<servlet-name>fc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>fc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 上下文監(jiān)聽器岩馍,創(chuàng)建Spring IOC容器 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
@Section two : .class
現(xiàn)在的開發(fā)者們大都比較喜歡使用代碼配置代碼的方式來給項(xiàng)目進(jìn)行配置碉咆,最新的springframework的官方文檔中最開始也是介紹如何使用該配置方法的,也是先推薦使用的方法蛀恩。但是在實(shí)際開發(fā)中疫铜,可能會(huì)遇到一些遺留項(xiàng)目,這些遺留項(xiàng)目大多都是使用.xml配置文件進(jìn)行配置的双谆,所以還是要掌握使用xml配置文件壳咕。
在寫這些文件的時(shí)候,我們可以單獨(dú)給它們創(chuàng)建一個(gè)包顽馋,把所有的配置文件類都集中在放在這個(gè)包底下谓厘,集中管理。
大體結(jié)構(gòu)如圖:
具體代碼如下:
- 1趣避、APPConfig.java
這個(gè)類和上面的applicationContext.xml文件的作用是一樣的庞呕,用于springIOC容器的配置,可以在其中創(chuàng)建bean,納入springIOC容器的管理住练,同時(shí)整合hibernate配置連接池(c3p0或者dbcp2地啰,只要加入相應(yīng)的jar包即可),創(chuàng)建數(shù)據(jù)源對(duì)象(DataSource)讲逛、會(huì)話工廠對(duì)象(SessionFactory)和事務(wù)管理器(TransactionManager)亏吝,以便業(yè)務(wù)管理處理時(shí)自動(dòng)注入這些需要的對(duì)象。
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableAspectJAutoProxy
@EnableTransactionManagement
@ComponentScan(basePackages = "com.qfedu.springmvc" )
public class AppConfig {
@Bean
public DataSource dataSource () {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/dang?useUnicode=true&CharacterEncoding=utf8");
dataSource.setUsername("root");
dataSource.setPassword("123456");
dataSource.setInitialSize(10);
dataSource.setMaxTotal(50);
dataSource.setMaxWaitMillis(15000);
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory (DataSource dataSource) {
LocalSessionFactoryBean bean = new LocalSessionFactoryBean();
bean.setDataSource(dataSource);
Properties props = new Properties();
props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQlDialect");
props.setProperty("hibernate.show_sql", "true");
props.setProperty("hibernate.format_sql", "true");
bean.setHibernateProperties(props);
return bean;
}
@Bean
public HibernateTransactionManager transactionManager (DataSource dataSource) {
HibernateTransactionManager tm = new HibernateTransactionManager();
tm.setDataSource(dataSource);
return tm;
}
}
- 2盏混、MyWebAppInitializer.java(名字可以自己決定蔚鸥,一般顧名思義)
這個(gè)Java類的主要作用是初始化webapp,拿到SpringIOC容器的類的類對(duì)象许赃、springMVC的類的類對(duì)象止喷、以及配置映射路徑等。
這個(gè)類必須繼承AbstractAnnotationConfigDispatcherServletInitializer這個(gè)類混聊,重寫回調(diào)方法弹谁。
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// 返回配置IOC容器的類的類對(duì)象
return new Class<?>[] { AppConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
// 返回配置SpringMVC的類的類對(duì)象
return new Class<?>[] { WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" }; //映射路徑
}
}
- 3、WebConfig .java
這是在配置視圖解析器句喜,用于配合前端控制器使用预愤,在這里可以配置view的前綴和后綴
package com.qfedu.springmvc.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.qfedu.springmvc.controller")
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver internalResourceViewResolver() {
InternalResourceViewResolver resolver =
new InternalResourceViewResolver();
resolver.setViewClass(JstlView.class);
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
// 為了保證靜態(tài)頁面不用做根路徑,做了以下處理
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}