想和你們分享我眼里的代碼世界???? 優(yōu)選系列持續(xù)更新中??
![[Java優(yōu)選系列第2彈]SpringMVC入門教程:從零開始搭建一個(gè)Web應(yīng)用程序,Java,java,開發(fā)語言,SpringMVC,mvc,spring](https://imgs.yssmx.com/Uploads/2023/08/658636-1.jpg)
?????????????????????????? 綠色代表解釋說明? ??????????? ??黃色代表重點(diǎn)??????????? ? ??紅色代表精髓
????????SpringMVC是一個(gè)基于Java的Web框架,它使用了MVC(模型-視圖-控制器)的設(shè)計(jì)模式,將Web應(yīng)用程序分為三個(gè)層次:模型層負(fù)責(zé)封裝業(yè)務(wù)邏輯和數(shù)據(jù),視圖層負(fù)責(zé)展示用戶界面,控制器層負(fù)責(zé)處理用戶請求和調(diào)用模型層和視圖層。
????????本文將詳細(xì)介紹如何使用SpringMVC來開發(fā)一個(gè)簡單而優(yōu)雅的Web應(yīng)用程序。我們將從創(chuàng)建一個(gè)Maven項(xiàng)目開始,然后配置SpringMVC所需的依賴和文件,接著編寫控制器類和視圖頁面,最后運(yùn)行我們的應(yīng)用程序。通過本文,你將能夠快速入門和掌握SpringMVC的核心概念和功能。
目錄
一、Maven簡介及安裝
二、 SpringMVC的基本使用
(一)SpringMVC簡介
(二)SpringMVC項(xiàng)目的基礎(chǔ)搭建
1.引入坐標(biāo)
2.編寫一個(gè)初始化類
3.編寫配置類,SpringConfig.java
4.編寫配置類,WebConfig.java
5.編寫Controller類
三、SpringMVC框架提供的高效功能
(一)請求參數(shù)及其屬性
(二)bean對象自動(dòng)生成get、set、構(gòu)造器
(三)數(shù)據(jù)校驗(yàn)
(四)異常處理
(五)攔截器
1??常用注解大全
2??常用配置文件方法大全
3??常用坐標(biāo)配置大全
一、Maven簡介及安裝
????????maven是用于管理項(xiàng)目所依賴的jar包。以前我們用到別人開發(fā)的jar包,需要自己去找jar包,并且手動(dòng)導(dǎo)入到項(xiàng)目中。通過Maven,我們只需要在Web項(xiàng)目中的pom.xml文件中導(dǎo)入坐標(biāo)(告訴Maven這個(gè)包在哪),就會(huì)自動(dòng)導(dǎo)入jar包。使用maven的jar包時(shí),maven先中本地倉庫中去查找,如果找不到,再去中央倉庫中去查找。
????????坐標(biāo)格式如下:
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
? ? ? ? maven配置和安裝非本文重點(diǎn),可以參考這個(gè)博客:史上最全安裝Maven教程_mvnw 按照_小Du猿的博客-CSDN博客
二、 SpringMVC的基本使用
(一)SpringMVC簡介
????????SpringMVC是一個(gè)表現(xiàn)層(Servlet層)框架,主要用于處理前端發(fā)來的請求。它代替了第1彈中([Java優(yōu)選系列第1彈]如何優(yōu)化Java三層架構(gòu)開發(fā)效率?三個(gè)實(shí)用技巧分享_高垚淼的博客-CSDN博客),我們所說的使用單純Servlet來進(jìn)行開發(fā)的模型,極大的提高了開發(fā)效率。
???????使用SpringMVC有以下幾個(gè)優(yōu)點(diǎn):
??????????它與Spring框架完美集成,可以利用Spring的依賴注入、事務(wù)管理、安全等特性。
??????????它支持多種視圖技術(shù),如JSP、Thymeleaf、Freemarker等,可以靈活地選擇適合的視圖渲染方式。
??????????它提供了豐富的注解和接口,可以方便地實(shí)現(xiàn)請求映射、參數(shù)綁定、數(shù)據(jù)校驗(yàn)、異常處理等功能。
??????????它采用前端控制器模式,通過一個(gè)DispatcherServlet來統(tǒng)一處理所有的HTTP請求,并將它們分發(fā)給相應(yīng)的處理器,從而簡化了Web開發(fā)流程。(將在第三彈專門發(fā)布一篇文章,解析SpringMVC的底層實(shí)現(xiàn)機(jī)制)
????????在實(shí)際開發(fā)中,使用注解進(jìn)行SpringMVC項(xiàng)目的創(chuàng)建更廣泛,因此,本文基于注解開發(fā)的方式進(jìn)行講解,基于xml方式不進(jìn)行贅述。
(二)SpringMVC項(xiàng)目的基礎(chǔ)搭建
1.引入坐標(biāo)
打開pom.xml文件,并添加以下語句,引入構(gòu)建SpringMVC項(xiàng)目的jar包。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.24</version>
</dependency>
2.編寫一個(gè)初始化類
????????單獨(dú)新建一個(gè)類,繼承AbstractAnnotationConfigDispatcherServletInitializer類并實(shí)現(xiàn)其三個(gè)默認(rèn)方法。
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* 配置spring的配置類
* @return
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
/**
* 配置一個(gè)springmvc的配置類
* @return
*/
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
/**
* 配置一個(gè)路徑,告訴tomcat哪些請求要交給springmvc來處理
* / 所有的請求都交給springmvc處理
* @return
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
3.編寫配置類,SpringConfig.java
創(chuàng)建一個(gè)config包,在包中編寫配置類,SpringConfig.java(名字可以隨便取)。
//@Configuration標(biāo)識(shí)這是一個(gè)配置類
@Configuration
public class SpringConfig {
}
4.編寫配置類,WebConfig.java
在config包中編寫配置類,WebConfig.java。
//@Configuration標(biāo)識(shí)這是一個(gè)配置類
@Configuration
//配置一個(gè)要掃描的包
@ComponentScan("com.woniu.springmvc")
public class WebConfig {
}
5.編寫Controller類
創(chuàng)建一個(gè)controller包,編寫處理請求的Controller類。
//這是一個(gè)控制器類,用于處理前端發(fā)來的請求
@Controller
public class HelloController {
//把返回的內(nèi)容直接返回給瀏覽器(默認(rèn)情況下,會(huì)去找相應(yīng)的文件)
@ResponseBody
//指定處理哪個(gè)路徑的請求
@RequestMapping("/test")
public String test(){
System.out.println("請求來了");
return "woniu蝸牛";
}
}
????????這樣我們就完成了一個(gè)最基本的SpringMVC項(xiàng)目的創(chuàng)建,只需要在 Controller類中編寫接收請求的各種方法即可。
三、SpringMVC框架提供的高效功能
(一)請求參數(shù)及其屬性
@RequestParam注解標(biāo)識(shí)獲取前端傳過來的參數(shù)
@ResponseBody注解標(biāo)識(shí)直接返回?cái)?shù)據(jù)的內(nèi)容給前端(不加,默認(rèn)是返回網(wǎng)頁資源)
@ResponseBody
@RequestMapping("/test")
public String test(
//@RequestParam指定要獲取哪一個(gè)參數(shù)
//value/name指定參數(shù)名稱
//required是否為必須傳的參數(shù),默認(rèn)是true
//defaultValue在沒傳參數(shù)的情況下,指定一個(gè)默認(rèn)值。
@RequestParam(value = "name",required = false) String name,
@RequestParam(value = "age",required = false,defaultValue = "100") Integer age){
System.out.println(name+":"+age);
return "woniu蝸牛";
}
//大多數(shù)情況下
@ResponseBody
@RequestMapping("/test1")
public String test1(String name,Integer age){//簡寫,要求形參名必須和參數(shù)名一樣
System.out.println(name);
System.out.println(age);
return "test1";
}
(二)bean對象自動(dòng)生成get、set、構(gòu)造器
-
導(dǎo)入坐標(biāo),lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
-
給bean對象加上注釋@get、@set、@ToString、@NoArgsConsturctor(以上可以用@Data替換)、@AllArgsConsturctor
(三)數(shù)據(jù)校驗(yàn)
- 引入坐標(biāo)
- 在驗(yàn)證的實(shí)體類的屬性上,標(biāo)注相應(yīng)注解如@min(value = 10)
-
在方法的參數(shù)中為要驗(yàn)證的實(shí)體類,標(biāo)注相應(yīng)注解@valid
-
獲取錯(cuò)誤消息,添加參數(shù)BindingResault,這個(gè)參數(shù)必須放在驗(yàn)證類參數(shù)的后面一個(gè)
- ?可以自定義錯(cuò)誤信息,在注解中寫 ?
(四)異常處理
- 加上注解@EsceptionHandler,處理當(dāng)前類。出異常會(huì)自動(dòng)運(yùn)行
?文章來源地址http://www.zghlxwxcb.cn/news/detail-658636.html
-
全局異常處理:單獨(dú)創(chuàng)建一個(gè)處理異常類并加上@RestControlleAdvice注解標(biāo)識(shí),放入同一個(gè)異常處理方法(別忘記注解)
-
全局異常和局部異常處理,依舊遵循就近原則
(五)攔截器
-
編寫攔截器類實(shí)現(xiàn)HandlerInterceptor接口,并實(shí)現(xiàn)其中的三個(gè)方法?
????????PreHandle() 返回true才會(huì)繼續(xù)執(zhí)行postHandl()和afterCompletion();postHandl()執(zhí)行完才會(huì)繼續(xù)執(zhí)行afterCompletion()??梢杂糜谶M(jìn)行登錄檢查、權(quán)限驗(yàn)證等操作
????????PostHandl() 可以給請求綁定數(shù)據(jù)??梢杂糜趯δP蛿?shù)據(jù)或視圖進(jìn)行處理或修改。該方法的參數(shù)modelAndView是一個(gè)模型和視圖對象,包含了控制器方法返回的數(shù)據(jù)和視圖名稱。?
????????afterCompletion() ,可以接收異常。用于進(jìn)行一些資源清理、性能監(jiān)控等操作。該方法的參數(shù)ex是一個(gè)異常對象,表示控制器方法或視圖渲染過程中拋出的異常,如果沒有異常,則為null。
- 在配置類中,添加攔截器
附錄:
1??常用注解大全
- @AllArgsConstructor 標(biāo)識(shí)bean對象生成全參構(gòu)造器
- @NoArgsConstructor 標(biāo)識(shí)bean對象生成無參構(gòu)造器
- @Configuration 標(biāo)識(shí)是配置類
- @Controller 標(biāo)識(shí)是控制層
- @ComponentScan("全類名") 標(biāo)識(shí)作用的控制層
- @Data 標(biāo)識(shí)bean對象自動(dòng)生成get、set、toStirng、無參構(gòu)造器方法(注意:如果@Data和@AllArgsConstructor一起使用,無參構(gòu)造器會(huì)被覆蓋,需要手動(dòng)再創(chuàng)建一次@NoArgsConstructor)
- @ExceptionHandler 用于處理控制器中發(fā)生的異常,可以指定異常類型和返回值
- @RestControllerAdvice 標(biāo)識(shí)該類中的異常方法作用于全局(類似于RestController,等價(jià)于@ResponseBody+ControllerAdvice)
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 標(biāo)識(shí)自動(dòng)轉(zhuǎn)成指定格式(注意,前端的格式需要與此對應(yīng),可用value-format)
- @ModelAttribute 用于綁定請求參數(shù)到模型屬性上,可以在方法或參數(shù)上使用
- @PathVariable 標(biāo)識(shí)將(形如:/xx/1 )請求中的參數(shù)綁定到方法參數(shù)上
- @RequestBody 標(biāo)識(shí)將接收的Json字符串轉(zhuǎn)為Java對象
- @RequestMapping(value = "路徑" , Method = RequestMethod.post) 標(biāo)識(shí)訪問的url路徑(使用@getMapping、@postMapping代替)
- @ResponseBody 標(biāo)識(shí)將該變量直接返回給頁面
- @RestController 作用等于@ResponseBody+@Controller
- @RequestParam 標(biāo)識(shí)將(形如:/xx?name=1 )請求中的參數(shù)綁定到方法參數(shù)上(如果請求參數(shù)和方法參數(shù)相同,可以省略)
- @SessionAttributes(value = "xx") 標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)到Map(Request請求域)中時(shí),同時(shí)放入到Session域中
2??常用配置文件方法大全
- 打開頁面網(wǎng)頁資源的訪問權(quán)限
@Override
protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
? ? ?2.添加自定義格式化器和轉(zhuǎn)換器
protected void addFormatters(FormatterRegistry registry) {
super.addFormatters(registry);
registry.addConverter(new DateConverter());
}
????3.?后端中,將對象轉(zhuǎn)為Json字符串。用于擴(kuò)展或修改已有的消息轉(zhuǎn)換器列表
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//添加一個(gè)消息轉(zhuǎn)換器,可以把對象自動(dòng)轉(zhuǎn)換成json
converters.add(new MappingJackson2HttpMessageConverter());
}
(這里想和大家分享的是,前端使用Axios發(fā)送攜帶對象的請求,會(huì)自動(dòng)轉(zhuǎn)為Json字符串發(fā)送;接收攜帶Json字符串的相應(yīng),會(huì)自動(dòng)轉(zhuǎn)為對象。這真的很好用,都不用轉(zhuǎn)來轉(zhuǎn)去了)?
3??常用坐標(biāo)配置大全
? ?1.使用SpringMVC框架
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.24</version>
</dependency>
? ?2.后端對象轉(zhuǎn)為Json字符串
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.1</version>
</dependency>
? ? 3.Bean對象生成set、get等方法
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
? ?4.處理LocalDateTime
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.14.2</version>
</dependency>
? ?5.數(shù)據(jù)校驗(yàn)
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.5.Final</version>
</dependency>
? ?6.文件上傳
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
????????????????????????????????以上就是本文的全部內(nèi)容啦,確定不來個(gè)點(diǎn)贊??和收藏??嘛~?文章來源:http://www.zghlxwxcb.cn/news/detail-658636.html
?
到了這里,關(guān)于[Java優(yōu)選系列第2彈]SpringMVC入門教程:從零開始搭建一個(gè)Web應(yīng)用程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!