免费在线a视频-免费在线观看a视频-免费在线观看大片影视大全-免费在线观看的视频-色播丁香-色播基地

Spring MVC淺入淺出—不吹牛逼不裝逼

:2019年09月10日 泰斗賢若如
分享到:

上文書說了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的組成部分,可以先看看下面這張圖:

SpringMVC工作原理

MVC模式在之前我已經(jīng)寫過博客了《Web開發(fā)模式》,學(xué)SpringMVC之前有必要先看一下MVC模式。

SpringMVC框架主要由DispatcherServlet、處理器映射、控制器、視圖解析器、視圖組成,其工作流程如下:

  1. 客戶端請求提交到DispatcherServlet;

  2. 由DispatcherServlet控制器尋找一個或多個HandlerMapping,找到處理請求的Controller;

  3. DispatcherServlet將請求提交到Controller;

  4. Controller調(diào)用業(yè)務(wù)邏輯處理后返回ModelAndView;

  5. DispatcherServlet尋找一個或多個ViewResolver視圖解析器,找到ModelAndView指定的視圖;

  6. 視圖負(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):

  1. 在基于注解的控制器類中可以編寫多個處理方法,進(jìn)而可以處理多個請求(動作),這就允許將相關(guān)的操作編寫在同一個控制器類中,從而減少控制器類的數(shù)量,方便以后的維護(hù)。

  2. 基于注解的控制器不需要在配置文件中部署映射,僅需要使用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í)例說話吧

實(shí)例解說

Pom.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
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>

spring-config.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
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>

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
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>

User

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 + '\'' +
'}';
}
}

UserDao

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();
}

UserDaoImpl

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);
}
}
}

UserService

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();
}

UserServiceImpl

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();
}
}

UserController

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";
}
}

測試結(jié)果

結(jié)束

[我要糾錯]
文:王振袢&發(fā)表于江蘇
關(guān)鍵詞: 前言 文書 說了 Spring 相關(guān)

來源:本文內(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)及插圖屬于原作者。

點(diǎn)個贊
0
踩一腳
0

您在閱讀:Spring MVC淺入淺出—不吹牛逼不裝逼

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)計

主站蜘蛛池模板: 久艹在线 | 一级黄色录像毛片 | 一级毛片在线免费看 | 一级全免费视频播放 | 毛片一级在线观看 | 精品国产一区二区三区免费 | 欧美一级久久久久久久久大 | 一级特黄性色生活片一区二区 | 成人网久久 | 黄网站www| 男女在线| 欧美国产精品 | 日本精品免费 | 超91视频| 日本一区欧美 | 亚洲成人高清在线观看 | 国产热视频 | 日一区二区三区 | 国产在线精品一区免费香蕉 | 中文字幕在线一区二区三区 | 思99re久久这里只有精品首页 | 久久精品久久精品国产大片 | 国产午夜影院 | 久久成人亚洲香蕉草草 | 免费人成网站7777视频 | 欧美激情αv一区二区三区 欧美激情xxxx | 国产初高中生粉嫩无套第一次 | 欧美一级第一免费高清 | 看片网站在线观看 | 亚洲日韩视频免费观看 | 久青草香蕉精品视频在线 | 日韩午夜在线视频不卡片 | 很很色在线视频 | 亚洲精品人成网线在线 | 最新国产精品亚洲二区 | 国产伦精品一区三区视频 | 亚洲一区二区视频在线观看 | 色综合色 | 本道久久综合88全国最大色 | 视频一区 在线 | 精品视频vs精品视频 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產(chǎn)品享最低成本,有需要聯(lián)系,
  • 卡爾蔡司鏡片優(yōu)惠店,鏡片價格低
  • 蘋果原裝手機(jī)殼