一、准备工作
开始之前,先参考上一篇:
struts2.3.24 + spring4.1.6 + hibernate4.3.11 + mysql5.5.25 开发环境搭建及相关说明
思路都是一样的,只不过把struts2替换成了spring mvc
二、不同的地方
工程目录及jar包:
action包改成controller;
删除struts2 jar包,添加spring mvc包(已有的话,不需添加);
web.xml配置:
跟之前不同的地方是把struts2的过滤器替换成了一个servlet,主要目的是路由url,交给spring mvc处理;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<? 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 >SSH</ display-name >
< context-param >
< param-name >contextConfigLocation</ param-name >
< param-value >classpath:applicationContext.xml</ param-value >
</ context-param >
< listener >
< listener-class >org.springframework.web.context.ContextLoaderListener</ listener-class >
</ listener >
< welcome-file-list >
< welcome-file >index.jsp</ welcome-file >
</ welcome-file-list >
< 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-servlet.xml</ param-value >
</ init-param >
< load-on-startup >1</ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name >springmvc</ servlet-name >
< url-pattern >*.do</ url-pattern >
</ servlet-mapping >
</ web-app >
|
applicationContext.xml配置:
不同的地方主要是配置自动扫描的时候,要排除@Controller组件,这些bean是由spring mvc 去生成的;
其它配置跟前一篇一样;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<? xml version = "1.0" encoding = "UTF-8" ?>
< beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:p = "http://www.springframework.org/schema/p"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:tx = "http://www.springframework.org/schema/tx"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop = "http://www.springframework.org/schema/aop"
xmlns:jdbc = "http://www.springframework.org/schema/jdbc"
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.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-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/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<!-- scans the classpath for annotated components (including @Repostory
and @Service that will be auto-registered as Spring beans -->
< context:component-scan base-package = "ssh" >
<!--排除@Controller组件,该组件由SpringMVC配置文件扫描 -->
< context:exclude-filter type = "annotation" expression = "org.springframework.stereotype.Controller" />
</ context:component-scan >
<!--配数据源 -->
< bean name = "dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method = "close" >
< property name = "driverClass" value = "com.mysql.jdbc.Driver" />
< property name = "jdbcUrl" value = "jdbc:mysql://localhost:3306/demo" />
< property name = "user" value = "root" />
< property name = "password" value = "root" />
< property name = "acquireIncrement" value = "1" ></ property >
< property name = "initialPoolSize" value = "80" ></ property >
< property name = "maxIdleTime" value = "60" ></ property >
< property name = "maxPoolSize" value = "80" ></ property >
< property name = "minPoolSize" value = "50" ></ property >
< property name = "acquireRetryDelay" value = "1000" ></ property >
< property name = "acquireRetryAttempts" value = "60" ></ property >
< property name = "breakAfterAcquireFailure" value = "false" ></ property >
<!-- 如出现Too many connections, 注意修改mysql的配置文件my.ini,增大最多连接数配置项,(查看当前连接命令:show processlist) -->
</ bean >
< bean id = "sessionFactory" class = "org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
< property name = "dataSource" ref = "dataSource" />
< property name = "hibernateProperties" >
< props >
< prop key = "hibernate.dialect" >org.hibernate.dialect.MySQLDialect</ prop >
< prop key = "hibernate.show_sql" >true</ prop >
< prop key = "hibernate.hbm2ddl.auto" >update</ prop >
< prop key = "connection.pool_size" >10</ prop >
< prop key = "current_session_context_class" >thread</ prop >
< prop key = "hibernate.cache.use_second_level_cache" >true</ prop >
< prop key = "hibernate.cache.region.factory_class" >org.hibernate.cache.ehcache.EhCacheRegionFactory</ prop >
< prop key = "hibernate.cache.use_query_cache" >true</ prop >
< prop key = "hibernate.cache.provider_configuration_file_resource_path" >ehcache.xml</ prop >
</ props >
</ property >
< property name = "mappingLocations" >
< list >
< value >classpath:ssh/model/User.hbm.xml</ value >
</ list >
</ property >
<!--
<property name="annotatedClasses">
<list>
<value>ssh.model.User</value>
</list>
</property>
-->
</ bean >
<!-- 配置事务管理器 -->
< bean id = "transactionManager"
class = "org.springframework.orm.hibernate4.HibernateTransactionManager" >
< property name = "sessionFactory" ref = "sessionFactory" />
</ bean >
<!-- 事务的传播特性 -->
< tx:advice id = "txadvice" transaction-manager = "transactionManager" >
< tx:attributes >
< tx:method name = "add*" propagation = "REQUIRED" read-only = "false" rollback-for = "java.lang.Exception" />
< tx:method name = "delete*" propagation = "REQUIRED" read-only = "false" rollback-for = "java.lang.Exception" />
< tx:method name = "update*" propagation = "REQUIRED" read-only = "false" rollback-for = "java.lang.Exception" />
< tx:method name = "save*" propagation = "REQUIRED" read-only = "false" rollback-for = "java.lang.Exception" />
</ tx:attributes >
</ tx:advice >
< aop:config >
< aop:pointcut id = "pcMethod" expression = "execution(* ssh.service..*.*(..))" />
< aop:advisor pointcut-ref = "pcMethod" advice-ref = "txadvice" />
</ aop:config >
<!-- 自定义aop处理 测试 -->
< bean id = "aopTest" class = "ssh.aop.AopTest" ></ bean >
< bean id = "myAop" class = "ssh.aop.MyAop" ></ bean >
< aop:config proxy-target-class = "true" >
< aop:aspect ref = "myAop" >
< aop:pointcut id = "pcMethodTest" expression = "execution(* ssh.aop.AopTest.test*(..))" />
< aop:before pointcut-ref = "pcMethodTest" method = "before" />
< aop:after pointcut-ref = "pcMethodTest" method = "after" />
</ aop:aspect >
</ aop:config >
</ beans >
|
springmvc-servlet.xml配置:
配置自动扫描ssh.controller包下的@Controller,这里要恢复applicationContext.xml中配置的exclude-filter;
配置视图解析器,有很多解析器,这里以InternalResourceViewResolver为例;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<? xml version = "1.0" encoding = "UTF-8" ?>
< beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:mvc = "http://www.springframework.org/schema/mvc"
xmlns:p = "http://www.springframework.org/schema/p"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx = "http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-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/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
">
<!-- 启动自动扫描该包下所有的Bean(例如@Controller) -->
< context:component-scan base-package = "ssh.controller" >
<!-- 恢复父容器设置的 exclude-filter,注意包扫描路径ssh.controller-->
< context:include-filter type = "annotation" expression = "org.springframework.stereotype.Controller" />
</ context:component-scan >
<!-- 定义视图解析器 -->
< bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" >
< property name = "prefix" >
< value >/WEB-INF/jsp/</ value >
</ property >
< property name = "suffix" >
< value >.jsp</ value >
</ property >
</ bean >
</ beans >
|
编写controller:
由于使用spring mvc替换struts2,也就没有了action包了,删除,并新建controller包,在包下新建UserController类;
@RequestMapping:映射url;
@ResponseBody:内容直接作为body返回;
UserController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
package ssh.controller;
import java.io.PrintWriter;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import ssh.aop.AopTest;
import ssh.model.User;
import ssh.service.UserService;
import com.google.gson.Gson;
@Controller
@RequestMapping ( "/user" )
public class UserController {
Logger logger = Logger.getLogger(UserController. class );
@Resource
private UserService userService;
@Resource
private AopTest aopTest;
@RequestMapping (value= "/addUser" )
@ResponseBody
public void addUser(HttpServletRequest request, HttpServletResponse response){
PrintWriter out = null ;
try {
response.setContentType( "text/html;charset=UTF-8" );
String account = request.getParameter( "account" );
String name = request.getParameter( "name" );
String address = request.getParameter( "address" );
User user = new User();
user.setAccount(account);
user.setAddress(address);
user.setName(name);
userService.add(user);
out = response.getWriter();
out.write( new Gson().toJson( "success" ));
} catch (Exception e){
e.printStackTrace();
logger.error(e.getMessage());
if (out != null )
out.write( new Gson().toJson( "fail" ));
} finally {
out.flush();
out.close();
}
}
@RequestMapping (value= "/queryUser" )
@ResponseBody
public void queryAllUser(HttpServletRequest request, HttpServletResponse response){
PrintWriter out = null ;
aopTest.test1();
aopTest.test2();
try {
response.setContentType( "text/html;charset=UTF-8" );
Gson gson = new Gson();
List<User> userList= userService.queryAllUser();
String gsonStr = gson.toJson(userList);
out = response.getWriter();
out.write(gsonStr);
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
if (out != null )
out.write( new Gson().toJson( "fail" ));
} finally {
out.flush();
out.close();
}
}
}
|
三、运行程序
运行程序,添加用户、查询用户功能正常;
另外二级缓存也正常工作,第二次查询已经没有操作数据库了;
@author 风一样的码农
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/chenpi/p/5155252.html