我们采用sprng MVC开发项目时,通常都会采用注解的方式,这样可以大大提高我们的开发效率。实现零配置。下面我们从零开始重新做一个spring MVC的配置。这个项目完全采用注解的方式开发。同时,我们以后的spring MVC项目也都会采用注解的方式。
修改web.xml,文件内容如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |
<?xml
version="1.0"
encoding="UTF-8"?><web-app
version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee <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/hib-config.xml,/WEB-INF/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> |
springmvc-servlet.xml配置内容如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
<?xml
version="1.0"
encoding="UTF-8"?><beans xsi:schemaLocation="http://www.springframework.org/schema/beans <!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --> <context:component-scan
base-package="com.sxt"/> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> <!--对模型视图名称的解析,即在模型视图名称添加前后缀 --> <bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:suffix=".jsp"/></beans> |
hib-config.xml(配置了spring集成hibernate)
|
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 |
<?xml
version="1.0"
encoding="UTF-8"?> xsi:schemaLocation=""> <context:component-scan
base-package="com.sxt"/> <!-- 支持aop注解 --> <aop:aspectj-autoproxy
/> <bean
id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property
name="driverClassName" value="com.mysql.jdbc.Driver"> </property> <property
name="username"
value="root"></property> <property
name="password"
value="123456"></property> </bean> <bean
id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property
name="dataSource"> <ref
bean="dataSource"
/> </property> <property
name="hibernateProperties"> <props> <!-- key的名字前面都要加hibernate. --> <prop
key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop
key="hibernate.show_sql">true</prop> <prop
key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <property
name="packagesToScan"> <value>com.sxt.po</value> </property> </bean> <bean
id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate"
> <property
name="sessionFactory"
ref="sessionFactory"></property></bean><!--配置一个JdbcTemplate实例--> <bean
id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate"> <property
name="dataSource"
ref="dataSource"/> </bean> <!-- 配置事务管理 --><bean
id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
> <property
name="sessionFactory"
ref="sessionFactory"></property></bean><tx:annotation-driven
transaction-manager="txManager"
/><aop:config> <aop:pointcut
expression="execution(public * com.sxt.service.impl.*.*(..))"
id="businessService"/> <aop:advisor
advice-ref="txAdvice"
pointcut-ref="businessService"
/> </aop:config> <tx:advice
id="txAdvice"
transaction-manager="txManager"
> <tx:attributes> <tx:method
name="find*"
read-only="true"
propagation="NOT_SUPPORTED"
/> <!-- get开头的方法不需要在事务中运行 。 有些情况是没有必要使用事务的,比如获取数据。开启事务本身对性能是有一定的影响的--> <tx:method
name="*"/> <!-- 其他方法在实务中运行 --> </tx:attributes> </tx:advice> </beans> |
reg.jsp如下
|
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 |
<%@ page language="java"
import="java.util.*"
pageEncoding="gbk"%><%String
path = request.getContextPath();String
basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP ‘index.jsp‘
starting page</title> <meta http-equiv="pragma"
content="no-cache"> <meta http-equiv="cache-control"
content="no-cache"> <meta http-equiv="expires"
content="0"> <meta http-equiv="keywords"
content="keyword1,keyword2,keyword3"> <meta http-equiv="description"
content="This is my page"> <!-- <link rel="stylesheet"
type="text/css"
href="styles.css"> --> </head> <body><form action="user.do"> 用户名:<input type=text name=uname /><br/><input type=hidden name=method value=reg /><input type=submit value=注册 /></form> </body></html> |
index.jsp 如下:
|
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 |
<%@ page language="java"
import="java.util.*"
pageEncoding="gbk"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP ‘index.jsp‘
starting page</title> <meta http-equiv="pragma"
content="no-cache"> <meta http-equiv="cache-control"
content="no-cache"> <meta http-equiv="expires"
content="0"> <meta http-equiv="keywords"
content="keyword1,keyword2,keyword3"> <meta http-equiv="description"
content="This is my page"> <!-- <link rel="stylesheet"
type="text/css"
href="styles.css"> --> </head> <body> <h1>**********${params.uname}</h1> <h1>**********${requestScope.u}</h1> <h1>**********${requestScope.user}</h1> </body></html> |
User.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 |
package
com.sxt.po;import
javax.persistence.Entity;import
javax.persistence.GeneratedValue;import
javax.persistence.GenerationType;import
javax.persistence.Id;@Entitypublic
class User { @Id @GeneratedValue(strategy=GenerationType.AUTO) private
int
id; private
String uname; private
String pwd; public
String getPwd() { return
pwd; } public
void setPwd(String pwd) { this.pwd = pwd; } public
int getId() { return
id; } public
void setId(int
id) { this.id = id; } public
String getUname() { return
uname; } public
void setUname(String uname) { this.uname = uname; } } |
UserDao.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 |
package
com.sxt.dao;import
javax.annotation.Resource;import
org.springframework.orm.hibernate3.HibernateTemplate;import
org.springframework.stereotype.Repository;import
com.sxt.po.User;@Repository("userDao")public
class UserDao { @Resource private
HibernateTemplate hibernateTemplate; public
void add(User u){ System.out.println("UserDao.add()"); hibernateTemplate.save(u); } public
HibernateTemplate getHibernateTemplate() { return
hibernateTemplate; } public
void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } } |
UserService.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 |
package
com.sxt.service;import
javax.annotation.Resource;import
org.springframework.stereotype.Service;import
com.sxt.dao.UserDao;import
com.sxt.po.User;@Service("userService")public
class UserService { @Resource private
UserDao userDao; public
void add(String uname){ System.out.println("UserService.add()"); User u = new
User(); u.setUname(uname); userDao.add(u); } public
UserDao getUserDao() { return
userDao; } public
void setUserDao(UserDao userDao) { this.userDao = userDao; } } |
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 |
package
com.sxt.web;import
javax.annotation.Resource;import
org.springframework.stereotype.Controller;import
org.springframework.ui.ModelMap;import
org.springframework.web.bind.annotation.RequestMapping;import
org.springframework.web.bind.annotation.RequestParam;import
org.springframework.web.bind.annotation.SessionAttributes;import
com.sxt.po.User;import
com.sxt.service.UserService;@Controller("userController")//这里的@RequestMapping("/user.do") public
class UserController { @Resource private
UserService userService; @RequestMapping(params="method=reg") public
String reg(String uname) { System.out.println("HelloController.handleRequest()"); userService.add(uname); return
"index"; } public
UserService getUserService() { return
userService; } public
void setUserService(UserService userService) { this.userService = userService; } } |
说明:
- @Controller("userController")这里也可以使用component进行注解,这里的controller和component一样,但是一般不用component,而这样的注解还@Repository、@Service、@Controller大家估计都知道怎么使用了,不会的话看我的之前发的blog:http://www.cnblogs.com/wang3680/p/0f4eea023d8eb01b097c732fddba5725.html
- @RequestMapping("/user.do")
注解说明:这个注解是页面提交到user.dao中进行操作的controller,之前我们的controller还需要进行实现controller接口,而现在不需要实现此接口了,而且controller里面的函数也不需要去复写handleRequest方法了,这里我们就可以自己写自己的方法了,但是我们怎么知道页面提交给那个方法了呢?
- @RequestMapping(params="method=reg")说明:这个注解就是去解释页面提交的给了那个方法的,就是提交来的带有method=reg的就会调转到此方法中,我们上面的页面中是这样定义传值的<input type=hidden name=method value=reg />
- 问题又来啦,struts2中我们是根据属性的set和get方法得到我们传递来的值得,这里怎么办呢?我们在controller方法中添加参数将传递的值传递来,public String reg(String uname)
这里的命名必须和页面传来的对应上。
上面的controller中,我们传递的是uname,我们这样呢,将参数改成User user为public String reg(User user)
|
1
2
3
4
5
6 |
@RequestMapping(params="method=reg2") public
String reg(User user) { System.out.println("HelloController.handleRequest()"); userService.add(user.getUname()); return
"index"; } |
说明:
这里呢其实是将User模型中的属性拿来用了,我们必须保证页面定义的名称和模型中的一样才行,这一点类此与struts2里面的模型驱动
SpringMVC轻松学习-注解的使用(三),布布扣,bubuko.com
原文:http://www.cnblogs.com/wang3680/p/7025c11249d00de8b99433a458c715b4.html