CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN SpringMVC này thực hiện phương pháp nhảy đơn giản (chủ đề đặc biệt) được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.
Đơn giản chỉ cần nhảy vào chủ đề.
Cá nhân tôi khuyên bạn nên thực hành lại quy trình xây dựng. Nếu thấy phiền phức, bạn có thể sao chép trực tiếp dự án trước đó, nhưng bạn cần sửa đổi một số thông tin trong pom.xml.
?
1
2
3
|
<
nhómId
>com.hanpang.springmvc
nhómId
>
<
hiện vậtId
>springmvc-demo01
hiện vậtId
>
<
phiên bản
>0.0.1-CHỤP ẢNH
phiên bản
>
|
1. Các lớp cấu hình lõi và các lớp tải.
?
1
2
3
4
5
6
7
8
9
10
|
bưu kiện
com.hanpang.config;
nhập khẩu
org.springframework.context.annotation.ComponentScan;
nhập khẩu
org.springframework.context.annotation.Configuration;
nhập khẩu
org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Cấu hình
@EnableWebMvc
@Thành phần quét
(gói cơ sở=
"com.hanpang.**.web"
)
công cộng
lớp học
Cấu hình Web {
}
|
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
bưu kiện
com.hanpang.config;
nhập khẩu
org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
công cộng
lớp học
Trình khởi tạo Web
mở rộng
Tóm tắtChú thíchCấu hìnhDispatcherServletInitializer {
@Ghi đè
được bảo vệ
Lớp>[] getRootConfigClasses() {
trở lại
mới
Lớp[] {WebConfig.
lớp học
};
}
@Ghi đè
được bảo vệ
Lớp>[] getServletConfigClasses() {
trở lại
vô giá trị
;
}
@Ghi đè
được bảo vệ
Chuỗi [] getServletMappings() {
trở lại
mới
Sợi dây[] {
"/"
};
}
}
|
2. Phương pháp nhảy giai đoạn JavaWeb.
Hãy chú ý đến các tham số chính thức trong phương thức SpringMVC. Framework hoàn thành thao tác khởi tạo cho chúng ta.
?
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
|
bưu kiện
com.hanpang.web;
nhập khẩu
java.io.IOException;
nhập khẩu
javax.servlet.ServletException;
nhập khẩu
javax.servlet.http.HttpServletRequest;
nhập khẩu
javax.servlet.http.HttpServletResponse;
nhập khẩu
org.springframework.stereotype.Controller;
nhập khẩu
org.springframework.web.bind.annotation.RequestMapping;
nhập khẩu
org.springframework.web.servlet.ModelAndView;
@Bộ điều khiển
công cộng
lớp học
Demo01Bộ điều khiển {
@Yêu cầu lập bản đồ
(đường dẫn=
"/test01"
)
công cộng
Chuyển tiếp jump_request theo cách truyền thống của ModelAndView (yêu cầu HttpServletRequest, phản hồi HttpServletResponse)
ném
Ngoại lệ Servlet, Ngoại lệ IO {
Hệ thống.out.println(
"Các tham số chính thức được khởi tạo theo mặc định"
);
yêu cầu.getRequestDispatcher(
"/WEB-INF/jsp/demo01.jsp"
).forward(yêu cầu, phản hồi);
trở lại
vô giá trị
;
}
@Yêu cầu lập bản đồ
(đường dẫn=
"/test02"
)
công cộng
ModelAndView jump_redirect truyền thống (yêu cầu HttpServletRequest, phản hồi HttpServletResponse)
ném
Ngoại lệ IO {
Hệ thống.out.println(
"Các tham số chính thức được khởi tạo theo mặc định"
);
phản hồi.gửiChuyển hướng(yêu cầu.getContextPath()+
"/xem/result01.jsp"
);
trở lại
vô giá trị
;
}
}
|
LƯU Ý: Chúng ta gần như không sử dụng phương pháp này nữa mà chỉ là minh họa và đánh giá đơn giản, ít nhất chúng ta có thể sử dụng phương pháp này để lấy Servlet API!!.
3. Minh họa cách Controller nhảy tới JSP.
Ở cuối ví dụ, chúng tôi sẽ thêm trình phân tích cú pháp khung nhìn JSP. Lúc đầu, chúng tôi sẽ làm theo phương pháp truyền thống và có quy trình từng bước.
?
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
|
bưu kiện
com.hanpang.web;
nhập khẩu
java.io.IOException;
nhập khẩu
javax.servlet.ServletException;
nhập khẩu
javax.servlet.http.HttpServletRequest;
nhập khẩu
javax.servlet.http.HttpServletResponse;
nhập khẩu
org.springframework.stereotype.Controller;
nhập khẩu
org.springframework.web.bind.annotation.RequestMapping;
nhập khẩu
org.springframework.web.servlet.ModelAndView;
@Bộ điều khiển
công cộng
lớp học
Demo01Bộ điều khiển {
@Yêu cầu lập bản đồ
(đường dẫn=
"/test03"
)
công cộng
ModelAndView theo mặc định là chuyển tiếp yêu cầu(){
ModelAndView mav =
mới
Mô hình và chế độ xem();
mav.setViewName(
"/WEB-INF/jsp/demo01.jsp"
);
trở lại
mẹ ơi;
}
@Yêu cầu lập bản đồ
(đường dẫn=
"/test04"
)
công cộng
ModelAndView đặt phương thức chuyển hướng(){
ModelAndView mav =
mới
Mô hình và chế độ xem();
mav.setViewName(
"chuyển hướng:/view/result01.jsp"
);
trở lại
mẹ ơi;
}
}
|
Nó có cảm giác tương tự như giai đoạn Web Java, ngoại trừ việc một tiền tố đơn giản được đặt khi chuyển hướng.
4. Minh họa cách Controller chuyển sang Controller.
Tương tự như việc chuyển từ Servlet này sang Servlet khác.
?
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
|
bưu kiện
com.hanpang.web;
nhập khẩu
java.io.IOException;
nhập khẩu
javax.servlet.ServletException;
nhập khẩu
javax.servlet.http.HttpServletRequest;
nhập khẩu
javax.servlet.http.HttpServletResponse;
nhập khẩu
org.springframework.stereotype.Controller;
nhập khẩu
org.springframework.web.bind.annotation.RequestMapping;
nhập khẩu
org.springframework.web.servlet.ModelAndView;
@Bộ điều khiển
công cộng
lớp học
Demo01Bộ điều khiển {
@Yêu cầu lập bản đồ
(đường dẫn=
"/test05"
)
công cộng
ModelAndView có thể trực tiếp đặt đường dẫn ánh xạ (){
ModelAndView mav =
mới
Mô hình và chế độ xem();
mav.setViewName(
"/test03"
);
trở lại
mẹ ơi;
}
@Yêu cầu lập bản đồ
(đường dẫn=
"/test06"
)
công cộng
ModelAndView đặt chuyển hướng () {
ModelAndView mav =
mới
Mô hình và chế độ xem();
mav.setViewName(
"chuyển hướng:/test04"
);
trở lại
mẹ ơi;
}
}
|
5. Thêm trình phân tích cú pháp khung nhìn JSP.
Trong phần trình diễn ở trên, chúng tôi nhận thấy rằng setViewName trong ModelAndView được sử dụng để hoàn thành bước nhảy. Dữ liệu được truyền ở đây là một chuỗi, nhưng phương thức xử lý sẽ khác. Khi đường dẫn nhảy có tiền tố chuyển hướng: thì phương thức xử lý không giống nhau. .
Ngoài ra, nếu chúng ta có nhiều chuỗi ở dạng /WEB-INF/jsp/demo01.jsp, chúng ta thấy rằng có nhiều phần chung. SpringMVC cung cấp cho chúng ta một lớp xử lý cụ thể các yêu cầu của Bộ điều khiển và chuyển tiếp các trang JSP.
Vui lòng chú ý đến mô tả của tôi: Nếu phát hiện thấy chuỗi bạn chuyển không có bất kỳ bộ nhận dạng tiền tố nào, thì theo mặc định, trình phân tích cú pháp chế độ xem JSP đã định cấu hình sẽ được sử dụng để xử lý chuỗi đó và thao tác chuyển tiếp yêu cầu sẽ hoàn tất.
Lưu ý: Cấu hình lớp cấu hình lõi.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
bưu kiện
com.hanpang.config;
nhập khẩu
org.springframework.context.annotation.Bean;
nhập khẩu
org.springframework.context.annotation.ComponentScan;
nhập khẩu
org.springframework.context.annotation.Configuration;
nhập khẩu
org.springframework.web.servlet.ViewResolver;
nhập khẩu
org.springframework.web.servlet.config.annotation.EnableWebMvc;
nhập khẩu
org.springframework.web.servlet.view.InternalResourceViewResolver;
nhập khẩu
org.springframework.web.servlet.view.JstlView;
@Cấu hình
@EnableWebMvc
@Thành phần quét
(gói cơ sở=
"com.hanpang.**.web"
)
công cộng
lớp học
Cấu hình Web {
@Đậu
công cộng
Trình xemResolver viewResolver() {
InternalResourceViewResolver jspViewResolver =
mới
Trình giải quyết chế độ xem nguồn tài nguyên nội bộ();
jspViewResolver.setViewClass(JstlView.
lớp học
);
jspViewResolver.setPrefix(
"/WEB-INF/"
);
jspViewResolver.setSuffix(
".jsp"
);
trở lại
Trình giải quyết jspView;
}
}
|
**LƯU Ý:** Vui lòng chú ý đến chú thích @Bean trên phương thức.
Phương thức này tương đương với mã trong XML như sau.
?
1
2
3
4
5
|
<
đậu
nhận dạng
=
"jspResourceViewResolver"
lớp học
=
"org.springframework.web.servlet.view.InternalResourceViewResolver"
>
<
tài sản
tên
=
"tiền tố"
giá trị
=
"/WEB-INF/"
/>
<
tài sản
tên
=
"hậu tố"
giá trị
=
".jsp"
/>
<
tài sản
tên
=
"Lớp xem"
giá trị
=
"org.springframework.web.servlet.view.JstlView"
/>
đậu
>
|
Cải thiện trình điều khiển nhảy mã JSP.
Trình phân tích cú pháp chế độ xem này chỉ có thể chuyển tiếp các yêu cầu JSP và không hợp lệ đối với các chuyển hướng. Vui lòng chú ý đến các nhận xét trong mã.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@Yêu cầu lập bản đồ
(đường dẫn=
"/test03"
)
công cộng
ModelAndView theo mặc định là chuyển tiếp yêu cầu(){
ModelAndView mav =
mới
Mô hình và chế độ xem();
mav.setViewName(
"jsp/demo01"
);
trở lại
mẹ ơi;
}
@Yêu cầu lập bản đồ
(đường dẫn=
"/test04"
)
công cộng
ModelAndView đặt phương thức chuyển hướng(){
ModelAndView mav =
mới
Mô hình và chế độ xem();
mav.setViewName(
"chuyển hướng:/view/result01.jsp"
);
trở lại
mẹ ơi;
}
|
Cải thiện mã điều khiển nhảy Bộ điều khiển.
?
1
2
3
4
5
6
|
@Yêu cầu lập bản đồ
(đường dẫn=
"/test05"
)
công cộng
ModelAndView có thể trực tiếp đặt đường dẫn ánh xạ (){
ModelAndView mav =
mới
Mô hình và chế độ xem();
mav.setViewName(
"/test03"
);
trở lại
mẹ ơi;
}
|
Sau khi định cấu hình trình phân tích cú pháp khung nhìn JSP, hãy kiểm tra lại đoạn mã trên và thấy rằng kết quả truy cập thật đáng ngạc nhiên.

Đúng như những gì chúng tôi đã nói trước đây, "/test03" là một chuỗi. Theo mặc định, nó sẽ được xử lý bằng trình phân tích cú pháp khung nhìn JSP Vậy làm cách nào để cải thiện nó?
Bạn có thể đặt tiền tố "chuyển tiếp:" và mã được cải tiến như sau
?
1
2
3
4
5
6
7
8
|
@Yêu cầu lập bản đồ
(đường dẫn=
"/test05"
)
công cộng
ModelAndView có thể trực tiếp đặt đường dẫn ánh xạ (){
ModelAndView mav =
mới
Mô hình và chế độ xem();
mav.setViewName(
"chuyển tiếp:/test03"
);
trở lại
mẹ ơi;
}
|
Khi phát hiện thấy chuỗi được sửa đổi bằng Forward:, tình huống xử lý sẽ thay đổi thành chuyển đổi yêu cầu từ Bộ điều khiển sang Bộ điều khiển khác. Nếu đạt được chuyển hướng, mã sẽ như sau.
?
1
2
3
4
5
6
|
@Yêu cầu lập bản đồ
(đường dẫn=
"/test06"
)
công cộng
ModelAndView đặt chuyển hướng () {
ModelAndView mav =
mới
Mô hình và chế độ xem();
mav.setViewName(
"chuyển hướng:/test04"
);
trở lại
mẹ ơi;
}
|
6.InternalResourceViewResolver Phụ lục.
InternalResourceViewResolver: Nó là một lớp con của URLBasedViewResolver, vì vậy nó hỗ trợ tất cả các tính năng được URLBasedViewResolver hỗ trợ.
Trong các ứng dụng thực tế, InternalResourceViewResolver cũng là trình phân giải chế độ xem được sử dụng rộng rãi nhất. Vậy các tính năng độc đáo của InternalResourceViewResolver là gì?
Từ góc độ nghĩa đen, chúng ta có thể hiểu InternalResourceViewResolver là trình phân giải chế độ xem tài nguyên nội bộ, đây là một tính năng của InternalResourceViewResolver.
InternalResourceViewResolver sẽ phân tích tên chế độ xem được trả về thành các đối tượng InternalResourceView sẽ lưu trữ các thuộc tính mô hình được phương thức bộ xử lý Bộ điều khiển trả về vào các thuộc tính yêu cầu tương ứng, sau đó chuyển hướng yêu cầu đến URL mục tiêu ở phía máy chủ thông quaRequestDispatcher.
Ví dụ: prefix=/WEB-INF/, suffix=.jsp được xác định trong InternalResourceViewResolver, sau đó tên dạng xem được trả về bởi phương thức bộ xử lý Bộ điều khiển được yêu cầu là test, thì tại thời điểm này InternalResourceViewResolv er sẽ phân tích cú pháp kiểm tra thành một đối tượng InternalResourceView, trước tiên lưu trữ các thuộc tính mô hình được trả về trong các thuộc tính HttpServletRequest tương ứng, sau đó sử dụngRequestDispatcher để chuyển tiếp yêu cầu tới /WEB-INF/test.jsp ở phía máy chủ. Đây là một tính năng rất quan trọng của InternalResourceViewResolver. Chúng ta đều biết rằng nội dung được lưu trữ trong /WEB-INF/ không thể được yêu cầu trực tiếp thông qua các yêu cầu yêu cầu. Vì lý do bảo mật, chúng tôi thường đặt các tệp jsp trong thư mục WEB-INF và cách nhảy của InternalResourceView. về phía máy chủ có thể giải quyết vấn đề này rất tốt. Sau đây là định nghĩa của InternalResourceViewResolver. Theo định nghĩa này, khi tên chế độ xem logic được trả về là test, InternalResourceViewResolver sẽ thêm tiền tố và hậu tố đã xác định vào nó để tạo thành dạng "/WEB-INF/test.jsp", sau đó put Nó tạo một đối tượng InternalResourceView mới và trả về nó dưới dạng URL của InternalResourceView.
Trên đây là toàn bộ nội dung bài viết này hi vọng nó sẽ giúp ích cho việc học của mọi người và cũng mong mọi người ủng hộ mình.
Link gốc: https://juejin.im/post/5aa8706ff265da239b411d59.
Cuối cùng, bài viết về Spring MVC triển khai các phương pháp nhảy đơn giản (các chủ đề đặc biệt) kết thúc tại đây. Nếu bạn muốn biết thêm về Spring MVC triển khai các phương pháp nhảy đơn giản (các chủ đề đặc biệt), vui lòng tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt các bài viết liên quan. tất cả sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!