一直用的是ssh,因為公司要用到SpringMVC,以前也沒接觸過,所以今天來和大家一起學習一下這個框架,以便工作需要。
首先我們先來了解一下什么是模式,模式就是解決某一類問題的方法論,把解決這類問題的解決方法歸總到理論的高度,這就是模式。模式是一種指導,在一個良好的指導下,有助于開發(fā)人員完成任務。做出一個優(yōu)秀的設計方案,能達到事半功倍的效果。而且會得到解決問題的最佳辦法。
mvc模式起源于Smalltalk語言,mvc是Model-View-Controller的簡寫。mvc減弱了業(yè)務邏輯接口和數(shù)據(jù)接口之間的耦合。使用MVC模式的好處有很多,可靠性強,高重用和可適應性,較低的生命周期成本,快速的部署,可維護性強等。里面的細節(jié)在這兒就不作過多的講解。
SpringMVC的特點:
1、清晰的角色劃分,spring在Model、View和Controller方面提供了一個非常清晰的劃分,這3個方面真正是各司其職,各負其責。
2、靈活的配置功能,因為Spring的核心是IOC,同樣在實現(xiàn)MVC上,也可以把各種類當做Bean來通過XML進行配置。
3、提供了大量的控制器接口和實現(xiàn)類,這樣開發(fā)人員可以使用Spring提供的控制器實現(xiàn)類,也可以自己實現(xiàn)控制器接口。
4、SpringMVC是真正的View層實現(xiàn)無關的,它不會強制開發(fā)員使用JSP,我們可以使用其他View技術,比如Velocity,Xskt等。
5、國際化支持,Spring的ApplicationContext提供了對國際化的支持,在這里可以很方便的使用。
6、面向接口編程,其實這不僅是springMVC的特點,整個Spring來看,這個特點都是很明顯的,因為它使開發(fā)人員對程序易于進行測試,并且很方便的進行管理。
7、Spring提供了Web應用開發(fā)的一整套流程,而不僅僅是MVC,他們之間可以很方便的結合在一起。下面有一個自己做得例子,做完這個例子后真的體會到了SpringMVC的強大。
下面開始配置我們的Springmvc工程:
首先我們配置WEB-INF目錄下的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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<? xml version = "1.0" encoding = "UTF-8" ?> < web-app version = "2.5" 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_2_5.xsd"> < servlet > <!--springmvc的核心是DispatcherServlet,它負責控制整個頁面的請求路徑--> < servlet-name >dispatcherServlet</ servlet-name > < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class > <!--初始化參數(shù)>/WEB-INF/classes/相當于src目錄--> < init-param > <!-- 這個param-name必須是contextConfigLocation--> < param-name >contextConfigLocation</ param-name > < param-value >/WEB-INF/classes/applicationContext.xml</ param-value > </ init-param > < load-on-startup >2</ load-on-startup > </ servlet > <!--攔截所有以do結尾的請求--> < servlet-mapping > < servlet-name >dispatcherServlet</ servlet-name > < url-pattern >*.do</ url-pattern > </ servlet-mapping > <!--處理從頁面?zhèn)鬟f中文到后臺而出現(xiàn)的中文亂碼問題--> < 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 > < welcome-file-list > < welcome-file >index.jsp</ welcome-file > </ welcome-file-list > </ web-app > |
每次配置好一個文件后建議先啟動服務器看看是否產(chǎn)生異常,不然到后期會很難調(diào)試和找到異常所在。
WEB.XML配置好以后我們還需要在SRC目錄下創(chuàng)建一個db-config.properties文件來存放我們的數(shù)據(jù)源配置信息:
內(nèi)容如下:
1
2
3
4
5
6
7
|
db.url= jdbc:MySQL: ///springmvcdb?useUnicode=true&characterEncoding=utf8 db.username=root db.password=root db.dirverClass= com.mysql.jdbc.Driver |
db-config.properties配置好以后就開始配置applicationContext.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
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" ?> < beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd" > <!-- 定義個缺省的控制適配器 --> < bean class = "org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!-- 獲取配置文件 --> < bean id = "config" class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" > < property name = "locations" > < list > < value >classpath:db-config.properties</ value > </ list > </ property > </ bean > <!-- 獲取數(shù)據(jù)源 --> < bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource" > < property name = "driverClassName" > < value >${db.dirverClass}</ value > </ property > < property name = "url" > < value >${db.url}</ value > </ property > < property name = "username" > < value >${db.username}</ value > </ property > < property name = "password" > < value >${db.password}</ value > </ property > </ bean > <!-- URL到處理器的映射列表可以配置多個 mappings屬性健值為URL程序文件地址,而值為處理器的Bean名字,URL程序文件地址可采用路徑匹配的模式,如: com/mvc/t?st.jsp:匹配com/mvc/test.jsp、com/mvc/tast.jsp等 com/mvc /*.jsp :匹配所有com/mvc/下帶jsp后綴的URL com/mvc /**/test.jsp:匹配所有在com/mvc路徑下或子孫路徑下的test.jsp com/mvc /**/*.jsp:匹配所有com/mvc路徑下或子孫路徑下帶.jsp后綴的URL cn/**/web/bla.jsp:匹配 cn/option/web/dog.jsp cn/option/test/web/dog.jsp cn/web/dog.jsp的請求 --> < bean class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" > < property name = "mappings" > < value > user.do=userAction </ value > </ property > </ bean > <!--定義視圖通過internalResourceView來表示使用的是Servlet/jsp技術--> < bean id = "viewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver" > < property name = "viewClass" > < value >org.springframework.web.servlet.view.InternalResourceView </ value > </ property > <!--jsp存放的目錄--> < property name = "prefix" > < value >/jsp/</ value > </ property > <!--jsp文件的后綴--> < property name = "suffix" > < value >.jsp</ value > </ property > </ bean > < bean id = "userDao" class = "com.yjde.springmvc.UserDao" > < property name = "dataSource" ref = "dataSource" ></ property > </ bean > <!--定義控制器--> < bean id = "userAction" class = "com.yjde.springmvc.UserController" > < property name = "dao" > < ref bean = "userDao" /> </ property > < property name = "commandClass" > < value >com.yjde.springmvc.UserDao</ value > </ property > < property name = "viewpage" > < value >userInfo</ value > </ property > </ bean > </ beans > |
ApplicationContext.xml文件配置好以后我們開始編寫具體的Java類,我們需要一個Dao類,一個controller類和一個PO
我們在MySql中創(chuàng)建了一張USERMBO表,里面有三個字段 USERID,USERNAME,USERAGE
UserDao類:
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.yjde.springmvc; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; import java.util.List; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.support.JdbcDaoSupport; @SuppressWarnings ( "all" ) public class UserDao extends JdbcDaoSupport { private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this .msg = msg; } // 此方法把USEMBO表對應的字段查詢出來依次放入userPO中 public Collection<UserPO> doquery() { String sql = "SELECT T.USERID,T.USERNAME,T.USERAGE FROM USERMBO T" ; return super .getJdbcTemplate().query(sql, new RowMapper() { public Object mapRow(ResultSet rs, int num) throws SQLException { UserPO user = new UserPO(); user.setUserId(rs.getInt( "USERID" )); user.setUserName(rs.getString( "USERNAME" )); user.setUserAge(rs.getInt( "USERAGE" )); return user; } }); } } |
JdbcTemplate是core包的核心類。它替我們完成了資源的創(chuàng)建以及釋放工作,從而簡化了我們對JDBC的使用。它還可以幫助我們避免一些常見的錯誤,比如忘記關閉數(shù)據(jù)庫連接。具體請參閱API
Controller類:
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
package com.yjde.springmvc; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.validation.BindException; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.SimpleFormController; @SuppressWarnings ( "all" ) // SimpleFormController是spring提供的表單控制器,把頁面中Form中的元素名稱設定為和bean中的一樣,當傳入的時候Spring會自動抓取form中和Bean名稱一樣的元素值,把它轉換成一個bean,使得開發(fā)人員可以很方便的使用。 public class UserController extends SimpleFormController { private String viewpage; private UserDao dao; public String getViewpage() { return viewpage; } public void setViewpage(String viewpage) { this .viewpage = viewpage; } @Override protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { UserDao tmp = (UserDao) command; Collection<UserPO> list = dao.doquery(); List<UserPO> users = new ArrayList<UserPO>(); UserPO user; for (UserPO userPO : list) { user = new UserPO(); user.setUserId(userPO.getUserId()); user.setUserName(userPO.getUserName()); user.setUserAge(userPO.getUserAge()); users.add(user); } Map mp = new HashMap(); mp.put( "list" , users); return new ModelAndView(getViewpage(), mp); } public void setDao(UserDao dao) { this .dao = dao; } } package com.yjde.springmvc; public class UserPO { private Integer userId; private String userName; private Integer userAge; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this .userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this .userName = userName; } public Integer getUserAge() { return userAge; } public void setUserAge(Integer userAge) { this .userAge = userAge; } } </pre><br> <p align= "left" ><span style= "color:teal" >類創(chuàng)建完成以后我們編寫兩個</span><span style= "color:teal" >JSP</span><span style= "color:teal" >進行測試:</span></p> <p align= "left" ><span style= "color:teal" >Index.jsp:</span></p> <p align= "left" ><span style= "color:#bf5f3f" ></span></p> <pre name= "code" class = "html" ><%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %> <% 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" method= "post" > 請輸入<input name= "msg" type= "text" /> <input type= "submit" value= "提交" > </form> </body> </html> </pre><p align= "left" ><span style= "color:teal" > </span></p> <p align= "left" ><span style= "color:teal" >最終運行結果:</span></p> <p align= "left" ><span style= "color:teal" > <img src= "http://my.csdn.net/uploads/201204/24/1335237733_4732.png" alt= "" ></span></p> <p align= "left" ><span style= "color:teal" >數(shù)據(jù)庫建表語句:</span></p> <p align= "left" ><span style= "color:#008080" ></span></p> <pre name= "code" class = "sql" > /* Navicat MySQL Data Transfer Source Server : mysql Source Server Version : 50145 Source Host : localhost:3306 Source Database : springmvcdb Target Server Type : MYSQL Target Server Version : 50145 File Encoding : 65001 Date: 2012-04-24 10:34:25 */ SET FOREIGN_KEY_CHECKS= 0 ; -- ---------------------------- -- Table structure for `usermbo` -- ---------------------------- DROP TABLE IF EXISTS `usermbo`; CREATE TABLE `usermbo` ( `USERID` int ( 11 ) NOT NULL DEFAULT '0' , `USERNAME` varchar( 50 ) DEFAULT NULL, `USERAGE` int ( 11 ) DEFAULT NULL, PRIMARY KEY (`USERID`) ) ENGINE=InnoDB DEFAULTCHARSET=utf8; -- ---------------------------- -- Records of usermbo -- ---------------------------- INSERT INTO `usermbo` VALUES( '1' , '李曉紅' , '25' ); INSERT INTO `usermbo` VALUES( '2' , '柳夢璃' , '27' ); INSERT INTO `usermbo` VALUES( '3' , '韓菱紗' , '26' );</pre> |
實例下載:demo
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://blog.csdn.net/tjcyjd/article/details/7492805