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

xiaoxiao2021-02-28  115

一、所用版本与步骤

三个框架所使用的版本:

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

转载请注明原文地址: https://www.6miu.com/read-22893.html

最新回复(0)