上文書(shū)說(shuō)了Spring相關(guān)的知識(shí),對(duì)Spring來(lái)了個(gè)淺入淺出,大家應(yīng)該了解到,Spring在三層架構(gòu)中主做Service層,那還有Web層,也就是Controller層,這個(gè)就由SpringMVC來(lái)解決了。SpringMVC是Web層的一個(gè)框架,...
上文書(shū)說(shuō)了Spring相關(guān)的知識(shí),對(duì)Spring來(lái)了個(gè)淺入淺出,大家應(yīng)該了解到,Spring在三層架構(gòu)中主做Service層,那還有Web層,也就是Controller層,這個(gè)就由SpringMVC來(lái)解決了。SpringMVC是Web層的一個(gè)框架,它是Spring的組成部分,可以先看看下面這張圖:
MVC模式在之前我已經(jīng)寫(xiě)過(guò)博客了《Web開(kāi)發(fā)模式》,學(xué)SpringMVC之前有必要先看一下MVC模式。
SpringMVC框架主要由DispatcherServlet、處理器映射、控制器、視圖解析器、視圖組成,其工作流程如下:
客戶端請(qǐng)求提交到DispatcherServlet;
由DispatcherServlet控制器尋找一個(gè)或多個(gè)HandlerMapping,找到處理請(qǐng)求的Controller;
DispatcherServlet將請(qǐng)求提交到Controller;
Controller調(diào)用業(yè)務(wù)邏輯處理后返回ModelAndView;
DispatcherServlet尋找一個(gè)或多個(gè)ViewResolver視圖解析器,找到ModelAndView指定的視圖;
視圖負(fù)責(zé)將結(jié)果顯示到客戶端。
在SpringMVC工作流程中包含4個(gè)SpringMVC接口,即DispatcherServlet、HandlerMapping、Controller和ViewResolver。SpringMVC所有的請(qǐng)求都經(jīng)過(guò)DispatcherServlet來(lái)統(tǒng)一分發(fā),在DispatcherServlet將請(qǐng)求分發(fā)給Controller之前需要借助SpringMVC提供的HandlerMapping定位到具體的Controller。
HandlerMapping接口負(fù)責(zé)完成客戶請(qǐng)求到Controller映射。
Controller接口將處理用戶請(qǐng)求,這和Java 中Servlet扮演的角色是一致的。一旦Controller處理完用戶請(qǐng)求,將返回ModelAndView對(duì)象給DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和視圖(View)。
從宏觀角度考慮,DispatcherServlet是整個(gè)Web應(yīng)用的控制器;從微觀考慮,Controller是單個(gè)Http請(qǐng)求處理過(guò)程中的控制器,而ModelAndView是Http請(qǐng)求過(guò)程中返回的模型(Model)和視圖(View)。
ViewResolver接口(視圖解析器)在Web應(yīng)用中負(fù)責(zé)查找View對(duì)象,從而將相應(yīng)結(jié)果渲染給客戶。
在使用Web應(yīng)用開(kāi)發(fā)時(shí)Controller是Web應(yīng)用的核心,Controller實(shí)現(xiàn)類包含了對(duì)用戶請(qǐng)求的處理邏輯,是用戶請(qǐng)求和業(yè)務(wù)邏輯之間的橋梁就,是SpringMVC框架的核心部分,負(fù)責(zé)具體的業(yè)務(wù)邏輯處理。傳統(tǒng)風(fēng)格的控制器是實(shí)現(xiàn)Controller接口的類。傳統(tǒng)風(fēng)格的控制器不僅需要在配置文件中部署映射,而且只能編寫(xiě)一個(gè)處理方法,不夠靈活。
基于注解的控制器具有以下兩個(gè)優(yōu)點(diǎn):
在基于注解的控制器類中可以編寫(xiě)多個(gè)處理方法,進(jìn)而可以處理多個(gè)請(qǐng)求(動(dòng)作),這就允許將相關(guān)的操作編寫(xiě)在同一個(gè)控制器類中,從而減少控制器類的數(shù)量,方便以后的維護(hù)。
基于注解的控制器不需要在配置文件中部署映射,僅需要使用RequestMapping注釋類型注解一個(gè)方法進(jìn)行請(qǐng)求處理。
在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> |
說(shuō)這么多,用實(shí)例說(shuō)話吧
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ù)庫(kù)驅(qū)動(dòng)--> <property name= "driverClassName" value= "com.mysql.jdbc.Driver" ></property> <!--連接數(shù)據(jù)庫(kù)的URL--> <property name= "url" value= "jdbc:mysql://localhost:3306/bbb?useUnicode=true&characterEncoding=UTF-8" ></property> <!--連接數(shù)據(jù)庫(kù)的用戶名--> <property name= "username" value= "root" ></property> <!--連接數(shù)據(jù)庫(kù)的密碼--> <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> <!--注冊(cè)事務(wù)注解驅(qū)動(dòng)--> <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 > <!--表示容器在啟動(dòng)時(shí)立即加載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è)置訪問(wèn)靜態(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" ; } } |
來(lái)源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺(tái),并已注明來(lái)源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)聯(lián)系小編,我們會(huì)及時(shí)審核處理。
聲明:江蘇教育黃頁(yè)對(duì)文中觀點(diǎn)保持中立,對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或者完整性不提供任何明示或暗示的保證,不對(duì)文章觀點(diǎn)負(fù)責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。
Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺(tái)保留所有權(quán)利
蘇公網(wǎng)安備32010402000125
蘇ICP備14051488號(hào)-3技術(shù)支持:南京博盛藍(lán)睿網(wǎng)絡(luò)科技有限公司
南京思必達(dá)教育科技有限公司版權(quán)所有 百度統(tǒng)計(jì)