SpringMVC轻松学习-注解的使用(三)
根据上一讲的例子,我们下面就注解的使用进行详细说明。
我们采用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; @Entity public 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轻松学习-注解的使用(三)的更多相关文章
- SpringMVC轻松学习-SpringMVC介绍(一)
Spring MVC 背景介绍 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 ...
- SpringMVC轻松学习-其他常用(四)
Spring MVC 3.0 深入 核心原理 1. 用户发送请求给服务器.url:user.do 2. 服务器收到请求.发现DispatchServlet可以处理.于是调用Disp ...
- SpringMVC轻松学习-环境搭建(二)
基于spring2.5的采用XML配置的spring MVC项目 注:本项目全部基于XML配置.同时,集成了hibernate.采用的是:spring MVC+hibernate+spring的开发架 ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- Spring+SpringMVC+mybatis整合以及注解的使用(三)
1.包结构:
- (三)SpringMVC之常用注解
SpringMVC的常用注解 注解 说明 @Controller 用于说明这个类是一个控制器 @RequestMapping 用于注释一个控制器类或者控制器类的方法 @RequestParam 用于将 ...
- SpringMVC入门学习(二)
SpringMVC入门学习(二) ssm框架 springMVC 在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...
- springMVC @ModelAttribute学习
springMVC @ModelAttribute学习 博客分类: Spring @ModelAttribute 绑定请求参数到命令对象 @ModelAttribute一个具有如下三个作用: ①绑 ...
- 轻松学习RSA加密算法原理 (转)
轻松学习RSA加密算法原理 (转) http://blog.csdn.net/q376420785/article/details/8557266 http://www.ruanyifeng.com/ ...
随机推荐
- 编译 wl18xx驱动源码
在做beagleboneblack移植的时候,wl18xx的驱动源码是自动编译的.但是移植到其他平台优越平台不一样,所以就不能自动编译 所以用其他方式编译.http://e2e.ti.com/supp ...
- swfupload在chrome中点击上传图片按钮无反应的解决办法
chrome 22.0.XXXXX dev版上传图片按钮点击无反应原因:是GOOGLE的内建Flash PPAPI外挂所导致的. 问题原因: 由于Google浏览器(Chrome),在最新测试版22. ...
- 解决oracle数据库连接不上的问题
今天打开部署好的java开发的网站系统,反应好慢,第一反应就是后台有问题. 查看tomcat一堆的报错信息,重启还是存在. 使用plSql连接数据库看看,登录提示如下:ORA-12514:TNS:监听 ...
- CGRect相关工具函数
NSStringFromCGRect(aCGRect): CGRectFromString(aString):如果把视图的框架以字符串的形式放在NSUserDefaults里面,那么该方法可以将其转回 ...
- shell 各种循环判断
shell支持的循环有 Shell if else Shell case esac Shell for循环 Shell while循环 Shell until循环
- Alert()与Redirect()同时使用失效的问题
例如以下代码: echo "<script>alert('跳转到博客园');</script>"; redirect(“www.cnblogs.com”); ...
- 学习笔记——Windows7下Android与Cocos2dx的安装配置
1.下载eclipse.安卓SDK.配置ADT等,android开发必备,略. 2.下载NDK.Cocos2dx.Cygwin 2.1NDK下载,请下载对应的32位或者64的较大的压缩包(较小的只有t ...
- for循环与foreach
注意点: for循环时,可以对集合进行操作,但foreach循环中,对集合进行操作会报错: for 循环可以获取下标 如下代码: package com.tt;imp ...
- 转:webdriver驱动未在默认目录安装的firefox
刚开始用webdriver的朋友一定会苦恼它时常不能启动firefox,很多时候是因为firefox安装在默认路径下.此时,我们有些常用方法,可以解决此问题. [1] System.setProper ...
- typedef void far *LPVOID 的具体定义
首先这里的far,在32位系统已经废除不用了.它是C/C++语言在16位系统中用以标明指针是个远指针的修饰符. 远指针是说指针所指向的地址已经超出了64K(2的十六次方),所以需要使用DS加偏移量的方 ...