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

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

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

上文書說了Spring相關的知識,對Spring來了個淺入淺出,大家應該了解到,Spring在三層架構中主做Service層,那還有Web層,也就是Controller層,這個就由SpringMVC來解決了。SpringMVC是Web層的一個框架,...

前言

上文書說了Spring相關的知識,對Spring來了個淺入淺出,大家應該了解到,Spring在三層架構中主做Service層,那還有Web層,也就是Controller層,這個就由SpringMVC來解決了。SpringMVC是Web層的一個框架,它是Spring的組成部分,可以先看看下面這張圖:

SpringMVC工作原理

MVC模式在之前我已經寫過博客了《Web開發模式》,學SpringMVC之前有必要先看一下MVC模式。

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

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

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

  3. DispatcherServlet將請求提交到Controller;

  4. Controller調用業務邏輯處理后返回ModelAndView;

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

  6. 視圖負責將結果顯示到客戶端。

在SpringMVC工作流程中包含4個SpringMVC接口,即DispatcherServlet、HandlerMapping、Controller和ViewResolver。SpringMVC所有的請求都經過DispatcherServlet來統一分發,在DispatcherServlet將請求分發給Controller之前需要借助SpringMVC提供的HandlerMapping定位到具體的Controller。

HandlerMapping接口負責完成客戶請求到Controller映射。

Controller接口將處理用戶請求,這和Java 中Servlet扮演的角色是一致的。一旦Controller處理完用戶請求,將返回ModelAndView對象給DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和視圖(View)。

從宏觀角度考慮,DispatcherServlet是整個Web應用的控制器;從微觀考慮,Controller是單個Http請求處理過程中的控制器,而ModelAndView是Http請求過程中返回的模型(Model)和視圖(View)。

ViewResolver接口(視圖解析器)在Web應用中負責查找View對象,從而將相應結果渲染給客戶。

基于注解的控制器

在使用Web應用開發時Controller是Web應用的核心,Controller實現類包含了對用戶請求的處理邏輯,是用戶請求和業務邏輯之間的橋梁就,是SpringMVC框架的核心部分,負責具體的業務邏輯處理。傳統風格的控制器是實現Controller接口的類。傳統風格的控制器不僅需要在配置文件中部署映射,而且只能編寫一個處理方法,不夠靈活。

基于注解的控制器具有以下兩個優點:

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

  2. 基于注解的控制器不需要在配置文件中部署映射,僅需要使用RequestMapping注釋類型注解一個方法進行請求處理。

在SpringMVC中使用掃描機制找到應用中所有基于注解的控制器類,所以,為了讓控制器類被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>

說這么多,用實例說話吧

實例解說

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-->
<!--配置數據源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--MySQL數據庫驅動-->
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<!--連接數據庫的URL-->
<property name="url" value="jdbc:mysql://localhost:3306/bbb?useUnicode=true&characterEncoding=UTF-8"></property>
<!--連接數據庫的用戶名-->
<property name="username" value="root"></property>
<!--連接數據庫的密碼-->
<property name="password" value="root"></property>
</bean>
<!--配置JDBC模板-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置事務-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--注冊事務注解驅動-->
<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>
<!--設置訪問靜態資源-->
<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中的添加功能實現了");
}
@Override
public void delete() {
String deleteSql = "delete from user where id=?";
Object parem2[] = {5};
jdbcTemplate.update(deleteSql,parem2);
System.out.println("UserDao中的刪除功能實現了");
}
@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中的修改功能實現了");
}
@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中的查詢功能實現了");
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";
}
}

測試結果

結束

[我要糾錯]
[ 編輯:王振袢 &發表于江蘇 ]
關鍵詞: 前言 文書 說了 Spring 相關

來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。

點個贊
0
踩一腳
0

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

Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利

蘇公網安備32010402000125 蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司

南京思必達教育科技有限公司版權所有   百度統計

主站蜘蛛池模板: 操你啦在线 | 成年免费大片黄在线观看com | 一级毛片一级毛片免费毛片 | 国产成在线观看免费视频 | 9i9精品国产免费久久 | 波多野一区 | 黄色影院免费观看 | 欧美猛交xxxx免费看 | 欧美视频a| 免费看色片网站 | 怡春院院日本一区二区久久 | 天天躁天天弄天天爱 | 六月丁香啪啪六月激情 | 网站免费黄色 | 毛片在线网站 | 国产卡1卡2卡三卡网站免费 | 欧美美女被爆操 | 最近高清无吗免费看 | 成人免费夜片在线观看 | 上色天天综合网 | 色视频网站免费 | 高清中文字幕免费观在线 | 午夜手机福利视频 | 天天做日日爱 | 18勿进色禁网站永久免费 | 中国免费一级毛片 | 一区二区三区四区视频在线观看 | 久久精品最新免费国产成人 | 国产成人精品午夜二三区 | 国产天天射 | 一级特级毛片免费 | 亚洲va老文色欧美黄大片人人 | 天天操天天干天天做 | 成人免费专区 | 一级特级女人18毛片免费视频 | 国产不卡精品一区二区三区 | 一级欧美在线的视频 | 日日操夜夜操视频 | 亚洲网站在线看 | 久久伊人婷婷 | 欧美一级第一免费高清 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產品享最低成本,有需要聯系,
  • 卡爾蔡司鏡片優惠店,鏡片價格低
  • 蘋果原裝手機殼