上文書說了Spring相關(guān)的知識,對Spring來了個淺入淺出,大家應(yīng)該了解到,Spring在三層架構(gòu)中主做Service層,那還有Web層,也就是Controller層,這個就由SpringMVC來解決了。SpringMVC是Web層的一個框架,...
上文書說了Spring相關(guān)的知識,對Spring來了個淺入淺出,大家應(yīng)該了解到,Spring在三層架構(gòu)中主做Service層,那還有Web層,也就是Controller層,這個就由SpringMVC來解決了。SpringMVC是Web層的一個框架,它是Spring的組成部分,可以先看看下面這張圖:
MVC模式在之前我已經(jīng)寫過博客了《Web開發(fā)模式》,學(xué)SpringMVC之前有必要先看一下MVC模式。
SpringMVC框架主要由DispatcherServlet、處理器映射、控制器、視圖解析器、視圖組成,其工作流程如下:
客戶端請求提交到DispatcherServlet;
由DispatcherServlet控制器尋找一個或多個HandlerMapping,找到處理請求的Controller;
DispatcherServlet將請求提交到Controller;
Controller調(diào)用業(yè)務(wù)邏輯處理后返回ModelAndView;
DispatcherServlet尋找一個或多個ViewResolver視圖解析器,找到ModelAndView指定的視圖;
視圖負(fù)責(zé)將結(jié)果顯示到客戶端。
在SpringMVC工作流程中包含4個SpringMVC接口,即DispatcherServlet、HandlerMapping、Controller和ViewResolver。SpringMVC所有的請求都經(jīng)過DispatcherServlet來統(tǒng)一分發(fā),在DispatcherServlet將請求分發(fā)給Controller之前需要借助SpringMVC提供的HandlerMapping定位到具體的Controller。
HandlerMapping接口負(fù)責(zé)完成客戶請求到Controller映射。
Controller接口將處理用戶請求,這和Java 中Servlet扮演的角色是一致的。一旦Controller處理完用戶請求,將返回ModelAndView對象給DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和視圖(View)。
從宏觀角度考慮,DispatcherServlet是整個Web應(yīng)用的控制器;從微觀考慮,Controller是單個Http請求處理過程中的控制器,而ModelAndView是Http請求過程中返回的模型(Model)和視圖(View)。
ViewResolver接口(視圖解析器)在Web應(yīng)用中負(fù)責(zé)查找View對象,從而將相應(yīng)結(jié)果渲染給客戶。
在使用Web應(yīng)用開發(fā)時Controller是Web應(yīng)用的核心,Controller實(shí)現(xiàn)類包含了對用戶請求的處理邏輯,是用戶請求和業(yè)務(wù)邏輯之間的橋梁就,是SpringMVC框架的核心部分,負(fù)責(zé)具體的業(yè)務(wù)邏輯處理。傳統(tǒng)風(fēng)格的控制器是實(shí)現(xiàn)Controller接口的類。傳統(tǒng)風(fēng)格的控制器不僅需要在配置文件中部署映射,而且只能編寫一個處理方法,不夠靈活。
基于注解的控制器具有以下兩個優(yōu)點(diǎn):
在基于注解的控制器類中可以編寫多個處理方法,進(jìn)而可以處理多個請求(動作),這就允許將相關(guān)的操作編寫在同一個控制器類中,從而減少控制器類的數(shù)量,方便以后的維護(hù)。
基于注解的控制器不需要在配置文件中部署映射,僅需要使用RequestMapping注釋類型注解一個方法進(jìn)行請求處理。
在SpringMVC中使用掃描機(jī)制找到應(yīng)用中所有基于注解的控制器類,所以,為了讓控制器類被SpringMVC框架掃描到,需要在配置文件中聲明spring-context,并使用<context:component-scan/>元素指定控制器類的基本包(確保所有控制類都在基本包及其子包下)。示例如下:
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 | <?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:tx= "http://www.springframework.org/schema/tx" xmlns:mvc= "http://www.springframework.org/schema/mvc" xsi:schemaLocation="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.xsd http: //www.springframework.org/schema/tx http: //www.springframework.org/schema/tx/spring-tx.xsd http: //www.springframework.org/schema/mvc http: //www.springframework.org/schema/mvc/spring-mvc.xsd "> <!--配置注解要掃描的包--> <context:component-scan base- package = "com.my" ></context:component-scan> <!--配置視圖解析器--> <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" > <!--配置前綴--> <property name= "prefix" value= "/" ></property> <!--配置后綴--> <property name= "suffix" value= ".jsp" ></property> </bean> </beans> |
說這么多,用實(shí)例說話吧
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 | <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version> 4.11 </version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version> 3.1 . 0 </version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version> 1.2 </version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version> 1.2 </version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version> 5.1 . 38 </version> </dependency> <!--spring核心依賴--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version> 5.1 . 5 .RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version> 5.1 . 5 .RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version> 5.1 . 5 .RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version> 5.1 . 5 .RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version> 5.1 . 5 .RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version> 5.1 . 5 .RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version> 5.1 . 5 .RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version> 5.1 . 5 .RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version> 5.1 . 5 .RELEASE</version> </dependency> </dependencies> |
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 | <?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:tx= "http://www.springframework.org/schema/tx" xmlns:mvc= "http://www.springframework.org/schema/mvc" xsi:schemaLocation="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.xsd http: //www.springframework.org/schema/tx http: //www.springframework.org/schema/tx/spring-tx.xsd http: //www.springframework.org/schema/mvc http: //www.springframework.org/schema/mvc/spring-mvc.xsd "> <!--配置注解要掃描的包--> <context:component-scan base- package = "com.my" ></context:component-scan> <mvc:annotation-driven></mvc:annotation-driven> <!--配置spring-jdbcTemplate--> <!--配置數(shù)據(jù)源--> <bean id= "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource" > <!--MySQL數(shù)據(jù)庫驅(qū)動--> <property name= "driverClassName" value= "com.mysql.jdbc.Driver" ></property> <!--連接數(shù)據(jù)庫的URL--> <property name= "url" value= "jdbc:mysql://localhost:3306/bbb?useUnicode=true&characterEncoding=UTF-8" ></property> <!--連接數(shù)據(jù)庫的用戶名--> <property name= "username" value= "root" ></property> <!--連接數(shù)據(jù)庫的密碼--> <property name= "password" value= "root" ></property> </bean> <!--配置JDBC模板--> <bean id= "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate" > <property name= "dataSource" ref= "dataSource" ></property> </bean> <!--配置事務(wù)--> <bean id= "txManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" > <property name= "dataSource" ref= "dataSource" ></property> </bean> <!--注冊事務(wù)注解驅(qū)動--> <tx:annotation-driven transaction-manager= "txManager" ></tx:annotation-driven> <!--配置視圖解析器--> <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" > <!--配置前綴--> <property name= "prefix" value= "/" ></property> <!--配置后綴--> <property name= "suffix" value= ".jsp" ></property> </bean> </beans> |
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 | <?xml version= "1.0" encoding= "UTF-8" ?> <web-app> <!--部署DispatcherServlet--> <servlet> <servlet-name>springmvc</servlet-name> <servlet- class >org.springframework.web.servlet.DispatcherServlet</servlet- class > <!--表示容器在啟動時立即加載servlet--> <load-on-startup> 1 </load-on-startup> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-config.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!--處理所有URL--> <url-pattern>/</url-pattern> </servlet-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> <init-param> <param-name>forceEncoding</param-name> <param-value> true </param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--設(shè)置訪問靜態(tài)資源--> <servlet-mapping> <servlet-name> default </servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> default </servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> default </servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> default </servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> default </servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> default </servlet-name> <url-pattern>*.mp3</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> default </servlet-name> <url-pattern>*.mp4</url-pattern> </servlet-mapping> </web-app> |
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 | package com.my.pojo; public class User { private int id; private String username; private String password; public User() { } public User( int id, String username, String password) { this .id = id; this .username = username; this .password = password; } public int getId() { return id; } public void setId( int id) { this .id = id; } public String getUsername() { return username; } public void setUsername(String username) { this .username = username; } public String getPassword() { return password; } public void setPassword(String password) { this .password = password; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\ '' + ", password='" + password + '\ '' + '}' ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package com.my.dao; public interface UserDao { public void add(); public void delete(); public void update(); public void query(); } |
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 | package com.my.dao.impl; import com.my.dao.UserDao; import com.my.pojo.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import java.util.List; @Repository ( "userDao" ) public class UserDaoImpl implements UserDao { @Autowired //使用配置文件中的JDBC模板 private JdbcTemplate jdbcTemplate; @Override public void add() { String insertSql = "insert into user values(null,?,?)" ; for ( int i= 0 ;i< 15 ;i++){ Object parem1[] = { "成功" , "123456" }; jdbcTemplate.update(insertSql,parem1); } System.out.println( "UserDao中的添加功能實(shí)現(xiàn)了" ); } @Override public void delete() { String deleteSql = "delete from user where id=?" ; Object parem2[] = { 5 }; jdbcTemplate.update(deleteSql,parem2); System.out.println( "UserDao中的刪除功能實(shí)現(xiàn)了" ); } @Override public void update() { String updateSql = "update user set username=? , password=? where id =?" ; Object parem3[] = { "修改" , "654321" , 3 }; jdbcTemplate.update(updateSql,parem3); System.out.println( "UserDao中的修改功能實(shí)現(xiàn)了" ); } @Override public void query() { String selectSql = "select * from user" ; RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User. class ); List<User> list = jdbcTemplate.query(selectSql,rowMapper, null ); System.out.println( "UserDao中的查詢功能實(shí)現(xiàn)了" ); for (User user : list){ System.out.println(user); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package com.my.service; public interface UserService { public void add(); public void delete(); public void update(); public void query(); } |
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 | package com.my.service.impl; import com.my.dao.UserDao; import com.my.dao.impl.UserDaoImpl; import com.my.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao ; @Override public void add() { userDao.add(); } @Override public void delete() { userDao.delete(); } @Override public void update() { userDao.update(); } @Override public void query() { userDao.query(); } } |
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 | package com.my.controller; import com.my.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping ( "/user" ) public class UserController { @Autowired private UserService userService; @RequestMapping ( "/add" ) public String add(){ userService.add(); return "index" ; } @RequestMapping ( "/delete" ) public String delete(){ userService.delete(); return "index" ; } @RequestMapping ( "/update" ) public String update(){ userService.update(); return "index" ; } @RequestMapping ( "/query" ) public String query(){ userService.query(); return "index" ; } } |
來源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺,并已注明來源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請聯(lián)系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點(diǎn)保持中立,對所包含內(nèi)容的準(zhǔn)確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點(diǎn)負(fù)責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。
Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺保留所有權(quán)利
蘇公網(wǎng)安備32010402000125
蘇ICP備14051488號-3技術(shù)支持:南京博盛藍(lán)睿網(wǎng)絡(luò)科技有限公司
南京思必達(dá)教育科技有限公司版權(quán)所有 百度統(tǒng)計