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

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

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

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

SpringMVC工作原理

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

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

  1. 客戶端請(qǐng)求提交到DispatcherServlet;

  2. 由DispatcherServlet控制器尋找一個(gè)或多個(gè)HandlerMapping,找到處理請(qǐng)求的Controller;

  3. DispatcherServlet將請(qǐng)求提交到Controller;

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

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

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

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

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

實(shí)例解說(shuō)

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ù)庫(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>

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>
<!--表示容器在啟動(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>

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

測(cè)試結(jié)果

結(jié)束

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

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

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

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

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

主站蜘蛛池模板: 午夜黄色毛片 | 日本黄色片一级 | 曰曰摸天天摸人人看久久久 | 黄色短视频免费在线观看 | 看黄色一级毛片 | 国产高清freexxxx性 | 两个黑人一前一后好爽 | 被黄漫网站视频在线观看 | 在线播放国产麻豆 | 亚洲男女一区二区三区出奶水了 | 免费看黄网站大全 | 免费成人在线网站 | 免费高清一级欧美片在线观看 | 伊人精品影院一本到欧美 | 日韩免费专区 | 成人免费观看男女羞羞视频 | 丁香天五香天堂园 | 狠狠干欧美 | 亚洲欧美在线视频观看 | 国产91精品系列在线观看 | 99re视频在线观看 | 欧美成人一级片 | 一个人www免费看的视频 | 欧美激情αv一区二区三区 欧美激情xxxx | 国产成人91| 免费视频淫片aa毛片 | 在线天堂在线 | 欧美激情视频一区二区 | 在线看的黄色网址 | 大桥未久aⅴ一区二区 | 久爱www成人网免费视频 | 正品蓝导航永久福利在线视频 | 色黄网站成年女人色毛片 | 日韩三级在线免费观看 | 免费看v片网站 | 亚洲色图欧美 | 中文字幕日本一本二本三区 | 亚洲精品在线免费看 | 亚洲欧美94色 | 一区中文字幕 | 日韩在线 | 中文 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產(chǎn)品享最低成本,有需要聯(lián)系,
  • 卡爾蔡司鏡片優(yōu)惠店,鏡片價(jià)格低
  • 蘋(píng)果原裝手機(jī)殼