Maven学习笔记(九)-Maven整合SSH(Spring+SpringMVC+Hibernate)框架

一、所用版本与步骤


三个框架所使用的版本:


Spring ---- 4.3.3.RELEASE

Spring mvc ---- 4.3.3.RELEASE

Hibernate ---- 5.2.10.Final

Hibernate-validator---- 5.4.0.Final



其它:


junit ---- 4.12
MySQL ---- 5.1.39
log4j ---- 1.2.17
c3p0 ---- 0.9.2.1
jstl ---- 1.2



SSH框架整合的一般步骤:



1.新建一个Maven WEB项目

2.导入mysql与Hiberante5依赖

3.写Hibernate配置文件及实体类和映射文件

4.测试(Hibernate)


**************


5.导入Spring 依赖
6.写Spring 配置文件applicationContext(引入db,c3p0DataSource,SessionFactory,事物)
7.测试(Spring与Hibernate)

**************

8.整合Spring MVC
9.写Controller包与IndexController类
10.写Spring MVC配置文件(spring-mvc.xml)
11.web.xml中加载配置文件(Spring,SpringMVC)
12.功能测试


二、整合框架



项目结构:




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>FrameworkStudy</groupId>
  <artifactId>SSH_Demo</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>SSH_Demo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  
  <properties>
    <junit.version>4.12</junit.version>
    <jstl.version>1.2</jstl.version>
    <commons.version>1.2</commons.version>
    <mysql.version>5.1.39</mysql.version>
    <c3p0.version>0.9.2.1</c3p0.version>
  	<hibernate.version>5.2.10.Final</hibernate.version>
  	<hibernate.validator.version>5.4.0.Final</hibernate.validator.version>
  	<spring.version>4.3.3.RELEASE</spring.version>
  	<log.version>1.2.17</log.version>
  </properties>
 
  <dependencies>
  
	<dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>${junit.version}</version>

	</dependency>
	
	<dependency>
	    <groupId>jstl</groupId>
	    <artifactId>jstl</artifactId>
	    <version>${jstl.version}</version>
	</dependency>

	
	<dependency>
	    <groupId>commons-logging</groupId>
	    <artifactId>commons-logging</artifactId>
	    <version>${commons.version}</version>
	</dependency>


	<!-- Hibernate start -->
	<dependency>
	    <groupId>org.hibernate</groupId>
	    <artifactId>hibernate-core</artifactId>
	    <version>${hibernate.version}</version>
	</dependency>
	
	 <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-validator</artifactId>
          <version>${hibernate.validator.version}</version>
      </dependency>
      
      <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
      </dependency>
      
	<!-- Hibernate end -->

     <!-- 引用c3p0 依赖  start-->  
     <dependency>  
         <groupId>com.mchange</groupId>  
         <artifactId>c3p0</artifactId>  
         <version>${c3p0.version}</version>  
     </dependency> 
	<!-- 引用c3p0 依赖  end-->  

	<!-- Mysql start -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>${mysql.version}</version>
	</dependency>
	<!-- Mysql end -->
	
	   <!-- Spring start -->
	    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
       
	<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
        <dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-context</artifactId>
		    <version>${spring.version}</version>
	</dependency>
		
	<dependency>  
		    <groupId>org.springframework</groupId>  
		    <artifactId>spring-aop</artifactId>  
		    <version>${spring.version}</version>  
	</dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
        
       <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
       <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
	<!-- Spring end -->
    
        <!-- Log4j start -->  
	<dependency>  
	      <groupId>log4j</groupId>  
	      <artifactId>log4j</artifactId>  
	      <version>${log.version}</version>  
	</dependency>  
	<!-- Log4j end -->
    
     <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.4.3</version>
    </dependency>    
   
  </dependencies>
  <build>
    <finalName>SSH_Demo</finalName>
  </build>
</project>



1.新建一个Maven WEB项目


在eclipse菜单栏中选择“File”---“News”---“Other”菜单项,就会打开如下对话窗口,在窗口中选择“Maven”节点下“Maven Project”条目,如下图所示:




点击Next




点击Next




点击Next,然后输入一些必要的信息,就会生成一个web项目.


2.导入mysql与Hiberante5依赖


	<dependency>
	    <groupId>commons-logging</groupId>
	    <artifactId>commons-logging</artifactId>
	    <version>${commons.version}</version>
	</dependency>
	<!-- Hibernate start -->
	<dependency>
	    <groupId>org.hibernate</groupId>
	    <artifactId>hibernate-core</artifactId>
	    <version>${hibernate.version}</version>
	</dependency>
	
	 <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-validator</artifactId>
          <version>${hibernate.validator.version}</version>
      </dependency>
      
      <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
      </dependency>
      <!-- Hibernate end -->
	
	<!-- Mysql start -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>5.1.39</version>
	</dependency>
	<!-- Mysql end -->


3.写Hibernate配置文件及实体类和映射文件


新建三个包:


com.fendo.entity   ----实体包

com.fendo.dao     ----方法包

com.fendo.dao.imp ----方法实现包




实体类: User.Java

package com.fendo.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@DiscriminatorColumn
@Table(name="USER_TABLE")
public class User implements Serializable{

	    @Id 
	    @GeneratedValue(strategy=GenerationType.IDENTITY)
	    private Integer id;

	    @Column(name="NAME")
	    private String name;

	    public Integer getId() {
	        return id;
	    }

	    public void setId(Integer id) {
	        this.id = id;
	    }

	    public String getName() {
	        return name;
	    }

	    public void setName(String name) {
	        this.name = name;
	    }

	    @Override
	    public String toString() {
	        return "User:[id="+id+",name="+name+"]";
	    }
}

在resources下新建hibernate配置文件hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 指定连接数据库所用的驱动 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 指定连接数据库的url,其中hibernate是本应用连接的数据库名 -->
        <property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8</property>
        <!-- 指定连接数据库的用户名 -->
        <property name="connection.username">root</property>
        <!-- 指定连接数据库的密码 -->
        <property name="connection.password">123</property>
        <!-- 指定连接池里最大连接数 -->
        <property name="hibernate.c3p0.max_size">20</property>
        <!-- 指定连接池里最小连接数 -->
        <property name="hibernate.c3p0.min_size">1</property>
        <!-- 指定连接池里连接的超时时长 -->
        <property name="hibernate.c3p0.timeout">5000</property>
        <!-- 指定连接池里最大缓存多少个Statement对象 -->
        <property name="hibernate.c3p0.max_statements">100</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>
        <property name="hibernate.c3p0.validate">true</property>
        <!-- 指定数据库方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <!-- 根据需要自动创建数据表 -->
        <property name="hbm2ddl.auto">update</property><!--①-->
        <!-- 显示Hibernate持久化操作所生成的SQL -->
        <property name="show_sql">true</property>
        <!-- 将SQL脚本进行格式化后再输出 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 避免这个错误信息Disabling contextual LOB creation as createClob() method threw error :java.lang.reflect.InvocationTargetException -->
        <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
        <!-- 罗列所有持久化类的类名 -->
        <mapping class="com.fendo.entity.User"/>
    </session-factory>
</hibernate-configuration>

方法接口基类BaseDao: 

package com.fendo.dao;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import javax.annotation.Resource;
import javax.transaction.Transactional;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;

import com.fendo.entity.User;

/**
 * dao层基类,实现增,删,改,查等常用功能。
 * 
 * @param <T>
 */
@Repository
public class BaseDao<T> {
	
	
    @Resource
    private SessionFactory sessionFactory;

	private Session currentSession() {
		return sessionFactory.getCurrentSession();
	}
    
    /**
     * 保存数据
     * 
     * @return void 返回类型
     */
    @Transactional
    public void save(T t) {
        sessionFactory.getCurrentSession().save(t);
    }

    /**
     * 删除数据
     * 
     * @return void 返回类型
     */
    @Transactional
    public void delete(Serializable id, Class<T> clazz) {
        T t = get(id, clazz);
        if (t != null)
            sessionFactory.getCurrentSession().delete(t);
        else
            new RuntimeException("你要删除的数据不存在").printStackTrace();
        ;
    }

    /**
     * 更新数据
     * 
     * @return void 返回类型
     */
    @Transactional
    public void update(T t) {
        sessionFactory.getCurrentSession().update(t);
    }

    /**
     * 根据ID查找数据
     * 
     * @return T 返回类型
     */
    @SuppressWarnings("unchecked")
    public T get(Serializable id, Class<T> clazz) {
        return (T) sessionFactory.getCurrentSession().get(clazz, id);
    }

    /**
     * 查找所有数据
     * 
     * @return List<T> 返回类型
     */
    @SuppressWarnings("unchecked")
    public List<T> getAll(Class<T> clazz) {
        return sessionFactory.getCurrentSession().createQuery(" from "+clazz.getSimpleName()).list();
    }
}

基类实现类BaseServiceImpl:

package com.fendo.dao.imp;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import javax.annotation.Resource;
import javax.transaction.Transactional;

import com.fendo.dao.BaseDao;
import com.fendo.service.BaseService;


/**
 * Service层基类实现类。该类是一个抽象类。ࡣ
 * @param <T>
 */
public abstract class BaseServiceImpl<T> implements BaseService<T> {
	
	
    @Resource
    private BaseDao<T> baseDao;

    private Class<T> clazz;

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public BaseServiceImpl() {
    	 // 子类
        Class cla = getClass();
        // 通过子类获取到父类 
        // 泛型参数
        Type type = cla.getGenericSuperclass();
        if (type instanceof ParameterizedType) {
            ParameterizedType pType = (ParameterizedType) type;
            clazz = (Class<T>) pType.getActualTypeArguments()[0];
        }
    }

    /*
     * 保存数据
     * @see cn.mylife.service.user.BaseService#save(java.lang.Object)
     */
    @Override
    public void save(T t) {
        baseDao.save(t);
    }

    /*
     * 根据ID删除数据
     * @see cn.mylife.service.user.BaseService#delete(java.io.Serializable)
     */
    @Override
    public void delete(Serializable id) {
        baseDao.delete(id, clazz);
    }

    /*
     * 更新数据
     * @see cn.mylife.service.user.BaseService#update(java.lang.Object)
     */
    @Override
    public void update(T t) {
        baseDao.update(t);
    }

    /*
     * 根据ID获得数据
     * @see cn.mylife.service.user.BaseService#get(java.io.Serializable)
     */
    @Override
    public T get(Serializable id) {
        return baseDao.get(id, clazz);
    }

    /*
     * 获取所有的数据
     * @see cn.mylife.service.user.BaseService#getAll()
     */
    @Override
    public List<T> getAll() {
        return baseDao.getAll(clazz);
    }

}

User操作实现类UserServiceImpl

package com.fendo.dao.imp;

import org.springframework.stereotype.Service;

import com.fendo.entity.User;
import com.fendo.service.UserService;

@Service
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService{

}

测试类HibernateTest: 


package com.fendo.test;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.fendo.entity.User;

public class HibernateTest {
	
	StandardServiceRegistry registry =  null;
    SessionFactory sessionFactory = null;
    Session session = null;
    Transaction transaction = null;
    
	@Before
    public void init() {

        registry = new StandardServiceRegistryBuilder()
                .configure() // configures settings from hibernate.cfg.xml
                .build();
        sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        session = sessionFactory.openSession();
        //开始事务
        transaction = session.getTransaction();
        transaction.begin();
    }
	
	@Test
    public void testSaveUser() {
         User user = new User();
        user.setName("fendo");
        session.save(user);
    }

    @After 
    public void destroy(){
        transaction.commit();
        session.close();
        sessionFactory.close();
        StandardServiceRegistryBuilder.destroy(registry);
    }

}



4.测试(Hibernate)


由于这里开启了Hibernate自动建表功能,所以启动项目时,他会自动根据映射关系,创建表,testSaveUser方法右键junit执行,输出如下:


Hibernate: 
    
    create table USER_TABLE (
       DTYPE varchar(31) not null,
        id integer not null auto_increment,
        NAME varchar(255),
        primary key (id)
    ) engine=InnoDB
Hibernate: 
    insert 
    into
        USER_TABLE
        (NAME, DTYPE) 
    values
        (?, 'User')
Hibernate: 
    select
        last_insert_id()

先创建表,然后插入数据,数据库如下




5.导入Spring 依赖


      <!-- Spring start -->
       <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
       
	<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
        <dependency>
	     <groupId>org.springframework</groupId>
	     <artifactId>spring-context</artifactId>
	     <version>${spring.version}</version>
	</dependency>
		
	<dependency>  
	     <groupId>org.springframework</groupId>  
	     <artifactId>spring-aop</artifactId>  
	     <version>${spring.version}</version>  
	</dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
        
       <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
       <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
	<!-- Spring end -->

然后在加入C3P0数据源

     <!-- 引用c3p0 依赖  start-->  
     <dependency>  
         <groupId>com.mchange</groupId>  
         <artifactId>c3p0</artifactId>  
         <version>0.9.2.1</version>  
     </dependency> 
     <!-- 引用c3p0 依赖  end-->  


6.写Spring 配置文件applicationContext(引入db,c3p0DataSource,SessionFactory,事物)


在src/main/resources下新建applicationContext.xml,以及config.properties配置文件

applicationContext.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"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.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.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">


		<!-- 自动扫描 -->
<!--         <context:component-scan base-package="com.fendo">
            扫描时跳过 @Controller 注解的JAVA类(控制器)
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan> -->
        
        
     <!-- 自动扫描与装配bean -->
 	<context:component-scan base-package="com.fendo"></context:component-scan>

	<!-- 读取properties配置文件 -->
    <bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:config.properties</value>
            </list>

        </property>
    </bean> 
    

	<!-- 配置数据源c3p0 -->  
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
        <property name="user" value="${username}"></property>  
        <property name="password" value="${password}"></property>  
        <property name="jdbcUrl" value="${url}"></property>  
        <property name="driverClass" value="${driver_class}"></property>  
          
        <!-- 初始化池子大小 -->  
        <property name="initialPoolSize" value="${initPoolSize}"></property>  
          
        <!-- 池子最大数 -->  
        <property name="maxPoolSize" value="${maxPoolSize}"></property>  
    </bean>  

    <!-- Hibernate session factory -->
     <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
       <property name="dataSource" ref="dataSource"/>
		<property name="packagesToScan" value="com.fendo" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>

                <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
                <prop key="hibernate.enable_lazy_load_no_trans">${hibernate.enable_lazy_load_no_trans}</prop>
            </props>
        </property>
     </bean>   

    <!-- 配置事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean> 

    <!-- 事务扫描开始(开启@Tranctional) -->
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> 
    
</beans>



config.properties内容如下


#Mysql
driver_class=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssh?characterEncoding=UTF-8
username=root
password=123

initPoolSize=5
maxPoolSize=10

#Hibernate config
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=false
#hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
hibernate.current_session_context_class=thread

hibernate.jdbc.batch_size=50
hibernate.enable_lazy_load_no_trans=true



7.测试(Spring与Hibernate)


新建SpringJunit4测试类

package com.fendo.test;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.fendo.entity.User;
import com.fendo.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class)
//加载spring配置文件
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
public class SpringJunit4 {
	
@Resource
private UserService userService;

@Test
public void testUser() throws Exception {
   User user = new User();
   user.setName("9632147");
   userService.save(user);
   
   user.setName("9999");
   userService.save(user);
}
}

运行输出结果如下:




数据就会多出两条数据




8.整合Spring MVC


先写一个简单的注册页面与一个注册成功页面index.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"  
    pageEncoding="utf-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
<title>注册页面</title>  
</head>  
<body>  
    <form action="addUser" method="post">  
        name:<input type="text" name="name"/><br/>  
        <input type="submit" value="添加"/><br/>  
    </form>  
</body>  
</html>  


与一个success.jsp文件:


<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>      
<!-- EL表达式生效 -->  
<%@ page isELIgnored="false" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    <table border="1">  
        <tr>  
            <th>姓名</th>  
        </tr> 
       <c:forEach items="${user}" var="p">  
            <tr>  
                <td>${p.name}</td>  
            </tr>  
        </c:forEach>
    </table>  
</body>  
</html>  


这里导入了JSTL所以要在pom.xml中引入依赖

	<dependency>
	    <groupId>jstl</groupId>
	    <artifactId>jstl</artifactId>
	    <version>${jstl.version}</version>
	</dependency>

9.写Controller包与IndexController


新建一个Controler包和一个IndexController类


package com.fendo.controller;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.fendo.entity.User;
import com.fendo.service.UserService;

@Controller
public class IndexController {

	@Resource
	private UserService userService;
	
	 @RequestMapping("/addUser")  
	    public ModelAndView addPerson(User user){  
	        System.out.println("页面数据:"+user.toString());  
	          
	        //加入数据  
	        userService.save(user);  
	          
	        //查数据  
	        User users=userService.get(1);
	        System.out.println(users.toString()); 
	        
	        List<User> ls=userService.getAll();
	        
	        //存起来  
	        ModelAndView modelAndView=new ModelAndView();  
	        modelAndView.setViewName("success");  
	        modelAndView.addObject("user", ls);
	        return modelAndView;  
	    }
}

10.写Spring MVC配置文件(spring-mvc.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:p="http://www.springframework.org/schema/p"    
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"
default-lazy-init="true">

	<!-- 开启MVC注解,表示SpringMVC支持注解功能 做了很多事情,不包括添加自己定义的拦截器 -->
    <mvc:annotation-driven />

	<!-- 只扫描Controller,不扫描Service -->
<!--     <context:component-scan base-package="com.fendo">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan> -->
    
   <!-- 扫描器已经有了上面这个mvc注解驱动的功能了,所有不需要了 -->
  <context:component-scan base-package="com.fendo.controller" />

    <!-- <context:component-scan /> -->
    <!-- 扫描指定的包中的类上的注解,常用的注解有: -->
    <!-- @Controller 声明Action组件 -->
    <!-- @Service 声明Service组件 @Service("xxxService") -->
    <!-- @Repository 声明Dao组件 -->
    <!-- @Component 泛指组件, 当不好归类时. -->
    <!-- @RequestMapping("/menu") 请求映射 -->
    <!-- @Resource 用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") -->
    <!-- @Autowired 用于注入,(spring提供的) 默认按类型装配 -->
    <!-- @Transactional( rollbackFor={Exception.class}) 事务管理 -->
    <!-- @ResponseBody将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流 -->
    <!-- @Scope("prototype") 设定bean的作用域 -->


   <!-- 通过mvc:resources设置静态资源,这样servlet就会处理这些静态资源,而不通过控制器 -->  
    <!-- 设置不过滤内容,比如:css,jquery,img 等资源文件 -->  
    <mvc:resources location="/*.html" mapping="/**.html" />  
    <mvc:resources location="/css/*" mapping="/css/**" />  
    <mvc:resources location="/js/*" mapping="/js/**" />  
    <mvc:resources location="/images/*" mapping="/images/**" />  
        
    <!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 -->
   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/" />      <!-- 前缀 -->
        <property name="suffix" value=".jsp" />   <!-- 后缀 -->
    </bean>
    
</beans>


11.web.xml中加载配置文件(Spring,SpringMVC)


<web-app version="3.0" 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">  
    
    
    
    <!-- 配置web.xml,使其具有springmvc特性,主要配置两处,一个是ContextLoaderListener,一个是DispatcherServlet -->

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
   
    <!-- 配置ContextLoaderListener表示,该工程要以spring的方式启动。启动时会默认在/WEB-INF目录下查找applicationContext.xml
作为spring容器的配置文件,该文件里可以初始化一些bean -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- spring mvc 配置 -->
    <!-- 配置DispatcherServlet表示,该工程将采用springmvc的方式。启动时也会默认在/WEB-INF目录下查找XXX-servlet.xml作为配置文件,
        XXX就是DispatcherServlet的名字,该文件中将配置两项重要的mvc特性:HandlerMapping,负责为DispatcherServlet这个前端控制器的请求查找Controller;
        ViewResolver,负责为DispatcherServlet查找ModelAndView的视图解析器。
        此处使用指定的配置文件spring-mvc.xml -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <!--<param-value>/WEB-INF/classes/spring-mvc-servlet.xml</param-value>-->
            <param-value>classpath*:/spring-mvc.xml</param-value>
        </init-param>  
        <load-on-startup>1</load-on-startup>  
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


    <filter>
       <filter-name>SpringOpenSessionInViewFilter</filter-name>
       <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
     </filter>
  <filter-mapping>
    <filter-name>SpringOpenSessionInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
    <!-- 字符集过滤器 -->  
    <filter>
        <filter-name>encodingFilter</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>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
</web-app>


12.功能测试


然后把项目加入到Tomcat中去,访问: http://localhost:8099/SSH_Demo/index.jsp




输入用户名,然后点击添加,添加成功后,他就会跳转到列表页




完整示例: http://download.youkuaiyun.com/detail/u011781521/9866657

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值