您的位置:首页 > 编程语言 > Java开发

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

2017-06-10 16:02 706 查看
一、所用版本与步骤

三个框架所使用的版本:

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.csdn.net/detail/u011781521/9866657
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: