sprinMVC spring4 hibernate4基于 Java 的配置

这里主要说基于 Java 的配置bean 以及 web.xml的改变,解释都在代码里

数据库配置 jdbc.properties:

jdbc.username=root
jdbc.password=123456
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/tt
jdbc.initPoolSize=5
jdbc.maxPoolSize=10

springMVC配置 springMVC.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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
		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-4.1.xsd">
  
	<!-- 开启springmvc注解驱动 -->
	<mvc:annotation-driven/>
	
	<!-- 扫描器 -->
	<context:component-scan base-package="com.pan.studySpring"/>
	
	
	<!-- 配置视图解析器 -->
	<bean name="Talk" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 配置前缀 -->
		<property name="prefix" value="WEB-INF/views/"></property>
		<!-- 配置后缀 -->
		<property name="suffix" value=".jsp"></property>
	</bean>
	
	<!-- 从请求和响应读取/编写字符串 -->
	<bean id="stringHttpMessage" class="org.springframework.http.converter.StringHttpMessageConverter">
		
		<property name="supportedMediaTypes">
			<list>
				<value>text/plain;charset=UTF-8</value>
			</list>
		</property>
	</bean>
	
	<!-- 支持上传文件 -->  
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    	<property name="defaultEncoding" value="utf-8"></property>   
        <property name="maxUploadSize" value="10485760000"></property>
        <property name="resolveLazily" value="true" ></property> 
    </bean> 
    
     <!--定义异常处理页面-->
    <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="java.sql.SQLException">exception</prop>
                <prop key="java.io.IOException">exception</prop>
            </props>
        </property>
    </bean>
</beans>

spring的配置文件中只要打开注解扫描和引入数据库配置文件即可如:

spring.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:aop="http://www.springframework.org/schema/aop" 
    xmlns:cache="http://www.springframework.org/schema/cache"  
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:jms="http://www.springframework.org/schema/jms" 
    xmlns:lang="http://www.springframework.org/schema/lang"  
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:oxm="http://www.springframework.org/schema/oxm" 
    xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:task="http://www.springframework.org/schema/task" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:util="http://www.springframework.org/schema/util"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
        http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.1.xsd    
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd    
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd    
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.1.xsd    
        http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.1.xsd    
        http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.1.xsd    
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd    
        http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-4.1.xsd    
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd    
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd    
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd"  
    > 

	<!-- 开启注解扫描 -->
	<context:component-scan base-package="com.pan.studySpring" />
    <!-- 导入资源文件 -->
    <context:property-placeholder location="classpath:jdbc.properties" />
     
</beans>

对于bean的生成由SpringConfig.java来完成

SpringConfig.java:

package com.pan.studySpring.config;

import java.beans.PropertyVetoException;
import java.io.IOException;
import java.util.Properties;
import javax.sql.DataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ImportResource;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.pan.studySpring.bean.Student;

@Configurable
@ImportResource("classpath:spring.xml")
public class SpringConfig {

	//从配置文件获取属性值
	@Value("${jdbc.username}")
	private String username;
	@Value("${jdbc.password}")
	private String password;
	@Value("${jdbc.url}")
	private String url;
	@Value("${jdbc.driver}")
	private String driver;
	@Value("${jdbc.initPoolSize}")
	private int initPoolSize;
	@Value("${jdbc.maxPoolSize}")
	private int maxPoolSize;
	
	
	
	@Bean(name="student")
	public Student student(){
		Student student = new Student();
		student.setName("ccc");
		student.setCode("126");
		
		return student;
	}
	
	/**
	 * 将DataSource注册为bean
	 * @return DataSource
	 */
	@Bean
	public DataSource dataSource(){
		//数据库连接池
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		//数据库用户名
		dataSource.setUser(username);
		//数据库密码
		dataSource.setPassword(password);
		//数据库连接URL
		dataSource.setJdbcUrl(url);
		
		dataSource.setInitialPoolSize(initPoolSize);
		dataSource.setMaxPoolSize(maxPoolSize);
		try{
			dataSource.setDriverClass(driver);
		}catch(PropertyVetoException e ){
			//throw e;
		}
		
		return dataSource;
	}
	
	/**
	 * SessionFactory注册为bean
	 * @return SessionFactory
	 */
	@Bean
	public SessionFactory sessionFactory(){
		//LocalSessionFactoryBean 本身不是一个session factory
		//LocalSessionFactoryBean有一个SessionFactory属性可通过getObject()方法得到
		LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
		
		//设置dataSource
		localSessionFactoryBean.setDataSource(dataSource());
		
		
		Properties properties = new Properties();
		properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
		properties.setProperty("hibernate.show_sql", "true");
		properties.setProperty("hibernate.format_sql", "true");
		properties.setProperty("hibernate.hbm2ddl.auto", "update");
		
		//设置Hibernate属性
		localSessionFactoryBean.setHibernateProperties(properties);
		//设置自动扫描注解的包,可设置多个包
		localSessionFactoryBean.setPackagesToScan("com.pan.studySpring");
		try {
			
			//调用属性设置后方法以生成SessionFactory
			localSessionFactoryBean.afterPropertiesSet();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//返回SessionFactory
		return localSessionFactoryBean.getObject();
		
	}
	
}

关于SessionFactory的生成我也是刚学不知道有没有更好的方法。

然后是web.xml的配置

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>javaSpring</display-name>

	<welcome-file-list>
		<welcome-file>/index.jsp</welcome-file>
	</welcome-file-list>


	<!-- 设置字符过滤器 -->
	<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>
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<!-- 配置Spring -->
	<!-- 该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数 -->
	<!-- 
    基于 配置文件(spring.xml)时的 的配置:
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring.xml</param-value>
	</context-param>
	 -->
	
	
	<!-- 
	基于 Java 的配置:
	
	过去,通常要利用 XmlWebApplicationContext 上下文来配置 Spring Web 应用程序,
	即在 Web 部署描述符文件 web.xml 中指定外部 XML 上下文文件的路径。XMLWebApplicationContext 是 Web 应用程序使用的默认上下文类。
	以下代码描述了 web.xml 中指向将由 ContextLoaderListener 监听器类载入的外部 XML 上下文文件的元素。
	
	现在,要将 web.xml 中的上述代码更改为使用 AnnotationConfigApplicationContext 类。
	切记,XmlWebApplicationContext 是 Spring 为 Web 应用程序使用的默认上下文实现,因此您永远不必在您的 web.xml 文件中显式指定这个上下文类。
	现在,您将使用基于 Java 的配置,因此在配置 Web 应用程序时,需要在 web.xml 文件中指定 AnnotationConfigApplicationContext 类。
	
	修改后的 web.xml 现在定义了 AnnotationConfigWebApplicationContext 上下文类,并将其作为上下文参数和 servlet 元素的一部分。
	上下文配置位置现在指向 AppContext 配置类。这非常简单。
	
	 -->
	<context-param>
		<param-name>contextClass</param-name>
		<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
	</context-param>
	<!--  -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>com.pan.studySpring.config.SpringConfig</param-value><!-- 配置bean的类 -->
	</context-param>
	
	
	
	<listener>
	<!-- 该元素用来注册一个监听器类。可以收到事件什么时候发生以及用什么作为响应的通知。
	事件监听程序在建立、修改和删除会话或servlet环境时得到通知。常与context-param联合使用。 -->
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!--如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对*.js,*.jpg等静态文件的访问也就被拦截了。-->  
    <!--方案一:激活Tomcat的defaultServlet来处理静态文件-->  
    <!--要写在DispatcherServlet的前面, 让 defaultServlet先拦截请求,这样请求就不会进入Spring了,我想性能是最好的吧。-->  
	<servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.css</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.swf</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.gif</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.jpg</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.png</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.js</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.html</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.xml</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.json</url-pattern>  
    </servlet-mapping>  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.map</url-pattern>  
    </servlet-mapping>
    
    <!-- 配置SpringMVC -->
    <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.xml</param-value>
    	</init-param>
    	<load-on-startup>1</load-on-startup>
    </servlet>
    <!--Servlet拦截匹配规则可以自已定义,当映射为@RequestMapping("/user/add")时,为例,拦截哪种URL合适?-->  
    <!--1、拦截*.do、*.htm, 例如:/user/add.do,这是最传统的方式,最简单也最实用。不会导致静态文件(jpg,js,css)被拦截。-->  
    <!--2、拦截/,例如:/user/add,可以实现现在很流行的REST风格。很多互联网类型的应用很喜欢这种风格的URL。弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。 -->
    <servlet-mapping>
		<servlet-name>springMVC</servlet-name>
		<url-pattern>/</url-pattern><!--会拦截URL中带“/”的请求。-->  
	</servlet-mapping>
	
</web-app>

Dao和Service就不多说了。最后要提醒的是小心包冲突时报错。我用的是maven ,pom.xml是这样的:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.pan.spring</groupId>
  <artifactId>javaSpring</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>javaSpring Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
  	<!-- 通用属性 -->
  	<java.version>1.7</java.version>
  	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  	
  	<!-- Web -->
  	<jsp.version>2.2</jsp.version>
  	<jstl.version>1.2</jstl.version>
  	<servlet.version>3.0.0</servlet.version>
  	
  	<!-- Spring -->
  	<spring-framework.version>4.1.5.RELEASE</spring-framework.version>
  	
  	<!-- Hibernate -->
  	<hibernate.version>4.3.11.Final</hibernate.version>
  	
  	<!-- Logging -->
  	<logback.version>1.0.13</logback.version>
  	<slf4j.version>1.7.5</slf4j.version>
  	
  	
  </properties>
  
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    
    <!-- 其他Web依赖 -->
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>jstl</artifactId>
    	<version>1.2</version>
	</dependency>
    <dependency>
		<!-- 添加servlet依赖 -->
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.0.1</version>
		<!-- 只在编译和测试时运行 -->
		<scope>test</scope>
	</dependency>
    <dependency>
    	<groupId>javax.servlet.jsp</groupId>
    	<artifactId>jsp-api</artifactId>
    	<version>${jsp.version}</version>
    	<!-- 只在编译和测试时运行 -->
		<scope>test</scope>
    </dependency>
    
    <!-- SpringMVC -->
     <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-webmvc</artifactId>
    	<version>${spring-framework.version}</version>
    </dependency>
    
    <!-- Spring and Transactions -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-tx</artifactId>
    	<version>${spring-framework.version}</version>
    </dependency>
    
    <dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-orm</artifactId>
		<version>${spring-framework.version}</version>
	</dependency>
    
    <!-- Spring Test -->
    <dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>${spring-framework.version}</version>
	</dependency>
	
	
	
	<!-- 文件上传 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.2.2</version>
		</dependency>

		<!-- fastJson json数据有关的 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.16</version>
		</dependency>
		<!-- 使用 Jackson 把 Java 对象转换成 JSON 字串 -->
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>
	<!-- mysql驱动包 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.29</version>
	</dependency>
		
	<!-- hibernate4 -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
		<version>${hibernate.version}</version>
	</dependency>
    
    <!-- c3p0连接池 -->
	<dependency>
		<groupId>com.mchange</groupId>
		<artifactId>c3p0</artifactId>
		<version>0.9.5.1</version>
	</dependency>
	<!-- Commons,是项目中用来处理常用的编码方法的工具类包,例如DES、SHA1、MD5、Base64,URL,Soundx等等 -->
	<dependency>
		<groupId>commons-codec</groupId>
		<artifactId>commons-codec</artifactId>
		<version>1.10</version>
	</dependency>
    
    <!-- 使用SLF4J和LogBack作为日志 -->
    <dependency>
    	<groupId>org.slf4j</groupId>
    	<artifactId>slf4j-api</artifactId>
    	<version>${slf4j.version}</version>
    </dependency>
    <dependency>
    	<groupId>log4j</groupId>
    	<artifactId>log4j</artifactId>
    	<version>1.2.16</version>
    </dependency>
    <dependency>
    	<groupId>org.slf4j</groupId>
    	<artifactId>jcl-over-slf4j</artifactId>
    	<version>${slf4j.version}</version>
    </dependency>
    <dependency>
    	<groupId>ch.qos.logback</groupId>
    	<artifactId>logback-classic</artifactId>
    	<version>${logback.version}</version>
    </dependency>
    <dependency>
    	<groupId>ch.qos.logback</groupId>
    	<artifactId>logback-core</artifactId>
    	<version>${logback.version}</version>
    </dependency>
    <dependency>
    	<groupId>ch.qos.logback</groupId>
    	<artifactId>logback-access</artifactId>
    	<version>${logback.version}</version>
    </dependency>
    
  </dependencies>
  <build>
    <finalName>javaSpring</finalName>
    <plugins>
    	<plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-compiler-plugin</artifactId>  
            <version>3.0</version>  
            <configuration>  
                <source>${java.version}</source>  
                <target>${java.version}</target>  
            </configuration>  
        </plugin>
    	
    	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
    		<artifactId>maven-war-plugin</artifactId>
    		<version>2.6</version>
    		<configuration>
    			<failOnMissingWebXml>false</failOnMissingWebXml>
    		</configuration>
    	</plugin>
    </plugins>
  </build>
</project>

日志文件也不说了,毕竟我也是看网上的,就这样了。

转载于:https://my.oschina.net/u/2489205/blog/872404

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值