一、web介紹
Web(World Wide Web)是由英國(guó)物理學(xué)家蒂姆·伯納斯-李于1989年發(fā)明的一個(gè)基于互聯(lián)網(wǎng)的信息系統(tǒng),也是互聯(lián)網(wǎng)最為知名和常用的應(yīng)用之一。它通過(guò)一種名為超文本傳輸協(xié)議(HTTP)的協(xié)議來(lái)傳輸數(shù)據(jù),并且使用統(tǒng)一資源定位符(URL)來(lái)標(biāo)識(shí)網(wǎng)絡(luò)上的資源。
Web的基本組成部分包括網(wǎng)頁(yè)(web pages)、超鏈接(hyperlinks)和瀏覽器(browser)。網(wǎng)頁(yè)通常采用HTML(Hypertext Markup Language)編寫(xiě),其中包含文本、圖像、視頻、音頻等內(nèi)容。超鏈接則可以將不同的網(wǎng)頁(yè)相互連接起來(lái),使得用戶可以方便地跳轉(zhuǎn)瀏覽不同的內(nèi)容。瀏覽器是用來(lái)訪問(wèn)和顯示網(wǎng)頁(yè)的軟件,用戶可以通過(guò)瀏覽器輸入U(xiǎn)RL來(lái)請(qǐng)求特定的網(wǎng)頁(yè),并且點(diǎn)擊超鏈接以跳轉(zhuǎn)到其他網(wǎng)頁(yè)。
除了靜態(tài)的網(wǎng)頁(yè)內(nèi)容外,現(xiàn)代的Web還支持動(dòng)態(tài)網(wǎng)頁(yè)和交互式Web應(yīng)用程序。動(dòng)態(tài)網(wǎng)頁(yè)可以根據(jù)用戶的請(qǐng)求或其他條件生成不同的內(nèi)容,而交互式Web應(yīng)用程序能夠與用戶進(jìn)行實(shí)時(shí)的交互和數(shù)據(jù)交換,從而提供更加豐富和便捷的功能。
二、注解
@Override | 這是Java語(yǔ)言中的一個(gè)注解,用于在子類中重寫(xiě)父類的方法。在Web開(kāi)發(fā)中,可以使用此注解來(lái)確保方法的正確覆蓋 |
@Entity | 這是JPA(Java Persistence API)中的一個(gè)注解,用于表示一個(gè)實(shí)體類,即映射到數(shù)據(jù)庫(kù)表中的對(duì)象。在Web開(kāi)發(fā)中,使用@Entity注解將Java類映射為數(shù)據(jù)庫(kù)表,方便進(jìn)行持久化操作。 |
@Data | 這是Lombok庫(kù)中的一個(gè)注解,用于自動(dòng)生成Java類的常用方法(如getter、setter、toString等)。在Web開(kāi)發(fā)中,可以使用@Data注解來(lái)簡(jiǎn)化實(shí)體類的定義。 |
@Transient | 這是JPA中的一個(gè)注解,用于指示某個(gè)字段不需要被持久化到數(shù)據(jù)庫(kù)。在Web開(kāi)發(fā)中,有些字段可能只是用于臨時(shí)計(jì)算或展示,并不需要存儲(chǔ)到數(shù)據(jù)庫(kù)中,通過(guò)@Transient注解可以排除這些字段。 |
@ManyToOne | 這是JPA中的一個(gè)注解,用于建立多對(duì)一的關(guān)系映射。在Web開(kāi)發(fā)中,當(dāng)實(shí)體類之間存在多對(duì)一的關(guān)系時(shí)(即一個(gè)實(shí)體對(duì)象關(guān)聯(lián)多個(gè)其他實(shí)體對(duì)象),可以使用@ManyToOne注解來(lái)定義關(guān)系映射。 |
@OneToMany | 表示關(guān)聯(lián)關(guān)系中的一端,即一個(gè)實(shí)體對(duì)象對(duì)應(yīng)多個(gè)實(shí)體對(duì)象的關(guān)系。在JPA中使用,表示一個(gè)實(shí)體對(duì)象對(duì)應(yīng)多個(gè)實(shí)體對(duì)象的關(guān)系。這個(gè)注解常用于關(guān)系表的實(shí)現(xiàn)。 |
@NoArgsConstructor | 表示無(wú)參構(gòu)造函數(shù)。在類定義中添加該注解可以自動(dòng)生成無(wú)參構(gòu)造函數(shù),方便代碼編寫(xiě)。 |
@MappedSuperclass | 表示該類是一個(gè)映射的超類,在JPA中使用,不會(huì)生成對(duì)應(yīng)的數(shù)據(jù)庫(kù)表,但是子類可以繼承該類的屬性和方法。這個(gè)注解常用于實(shí)現(xiàn)公共屬性或方法的復(fù)用。 |
@GeneratedValue | 表示主鍵策略,用于指定主鍵生成策略,例如自增長(zhǎng)、UUID等。 |
@GenericGenerator | @GenericGenerator是Hibernate框架所提供的一個(gè)注解。它用于定義實(shí)體類的主鍵生成策略,它可以與@Id注解一起使用,用于標(biāo)記實(shí)體類的主鍵字段或?qū)傩?。通過(guò)@GenericGenerator注解,我們可以指定主鍵生成策略的名稱、生成器類以及其他參數(shù)。常見(jiàn)的生成策略包括UUID、雪花算法等。 |
@GeneratedValue | @GeneratedValue 注解通常與 @Id 注解一起使用,用于指定實(shí)體類的主鍵生成策略。它可以應(yīng)用于數(shù)據(jù)庫(kù)表的主鍵字段,并由 JPA 框架自動(dòng)處理主鍵的生成。 |
@Column | 表示該字段與數(shù)據(jù)庫(kù)表中的列之間的映射關(guān)系,在JPA中使用,可以指定列名、數(shù)據(jù)類型、長(zhǎng)度、是否允許為空等屬性。 |
@Table | 表示該類與數(shù)據(jù)庫(kù)表之間的映射關(guān)系,在JPA中使用,可以指定表名、索引等屬性。 |
@Temporal | 表示時(shí)間類型的映射,在JPA中使用,可以將Java的Date、Calendar等時(shí)間類型映射到數(shù)據(jù)庫(kù)中的日期或時(shí)間類型。 |
@RestControllerAdvice | 表示全局異常處理器,用于處理控制器拋出的異常。在類定義上添加該注解,然后在類中編寫(xiě)異常處理方法即可。 |
@ExceptionHandler | 表示異常處理方法,在控制器中使用,用于處理特定異常類型的異常。 |
@Service | 表示服務(wù)層組件,在MVC架構(gòu)中使用,用于處理業(yè)務(wù)邏輯。 |
@Autowired | 表示依賴注入,在MVC架構(gòu)中使用,自動(dòng)裝配一個(gè)組件或Bean。 |
@Component | 表示普通組件,在Spring框架中使用,表示一個(gè)普通的JavaBean。 |
@Value | 表示屬性值,用于注入配置文件中的屬性值。 |
@RestController | 表示RESTful風(fēng)格的控制器,在MVC架構(gòu)中使用,用于處理HTTP請(qǐng)求和響應(yīng)。 |
@RequestMapping | 表示請(qǐng)求映射,在控制器中使用,用于指定URL路徑與控制器方法之間的對(duì)應(yīng)關(guān)系。 @PostMapping:表示POST請(qǐng)求映射,在控制器中使用,用于指定POST請(qǐng)求的URL路徑。 |
@GetMapping | 表示GET請(qǐng)求映射,在控制器中使用,用于指定GET請(qǐng)求的URL路徑。 |
@Getter | 表示生成getter方法,在類定義中添加該注解可以自動(dòng)生成getter方法, |
@Setter | 表示生成setter方法,在類定義中添加該注解可以自動(dòng)生成setter方法, |
@SpringBootApplication | @SpringBootApplication注解是Spring Boot框架中的核心注解之一,用于標(biāo)識(shí)一個(gè)主程序類,并且啟用了自動(dòng)配置和組件掃描。 |
?
三、注解的簡(jiǎn)單的示例代碼
1、常用注解示例
import javax.persistence.*;
import lombok.*;
@Entity
@Table(name = "users")
@Data
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Transient
private int age;
}
@Entity
@Table(name = "projects")
@Data
@NoArgsConstructor
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
@RestControllerAdvice
public class ExceptionHandlerAdvice {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error");
}
}
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
}
@Component
public class MyComponent {
@Value("${my.property}")
private String myProperty;
}
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public List<User> getUsers() {
return userService.getAllUsers();
}
}
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
上述代碼中,我們定義了一個(gè)簡(jiǎn)單的用戶(User
)和項(xiàng)目(Project
)實(shí)體類,使用 @Entity
注解將它們標(biāo)記為實(shí)體類,并指定了數(shù)據(jù)庫(kù)表的映射關(guān)系。同時(shí),通過(guò) @Data
注解自動(dòng)生成了 getter、setter 等方法(@Data 注解使用 Lombok 工具自動(dòng)生成類的 getter、setter 方法,以及 toString、equals、hashCode 等方法==@Getter、@Setter)。
- 在
User
類中,我們使用了@Transient
注解標(biāo)記了一個(gè)字段,表示該字段不需要被持久化到數(shù)據(jù)庫(kù)中。 - 在
Project
類中,我們使用了@ManyToOne
和@OneToMany
注解定義了多對(duì)一和一對(duì)多的關(guān)聯(lián)關(guān)系。 - 在
ExceptionHandlerAdvice
類中,我們使用了@RestControllerAdvice
和@ExceptionHandler
注解來(lái)實(shí)現(xiàn)全局異常處理。 - 在
UserService
類中,我們使用了@Service
和@Autowired
注解來(lái)標(biāo)識(shí)該類為服務(wù)層組件,并進(jìn)行依賴注入。 - 在
MyComponent
類中,我們使用了@Component
和@Value
注解來(lái)將該類標(biāo)記為 Spring 組件,并從配置文件中獲取屬性值。 - 在
UserController
類中,我們使用了@RestController
、@RequestMapping
、@GetMapping
注解來(lái)定義 RESTful 風(fēng)格的控制器和請(qǐng)求路徑。
最后,在 MyApp
類中,我們使用了 @SpringBootApplication
注解啟動(dòng)了一個(gè) Spring Boot 應(yīng)用程序。
注意:上述示例代碼僅用于演示各個(gè)注解的使用方式,并不包含完整的實(shí)現(xiàn)邏輯。實(shí)際應(yīng)用中,可能還需要添加其他必要的代碼和配置。
2、@RequestParam和@RequestBody注解的簡(jiǎn)單代碼示例:
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
// 根據(jù)用戶ID查詢數(shù)據(jù)庫(kù)中的用戶信息
User user = userService.getUserById(id);
if (user == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(user);
}
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
// 創(chuàng)建新用戶
User createdUser = userService.createUser(user);
return ResponseEntity.status(HttpStatus.CREATED).body(createdUser);
}
@PutMapping("/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
// 更新用戶信息
User updatedUser = userService.updateUser(id, user);
if (updatedUser == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(updatedUser);
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
// 刪除用戶
boolean deleted = userService.deleteUser(id);
if (deleted) {
return ResponseEntity.noContent().build();
}
return ResponseEntity.notFound().build();
}
}
上述代碼中,我們定義了一個(gè)UserController
類來(lái)處理用戶相關(guān)的請(qǐng)求。在getUserById()
方法中,通過(guò)使用@PathVariable
注解將URL路徑中的id
參數(shù)映射到方法的參數(shù)上,從而獲取特定的用戶信息。
- 在
createUser()
和updateUser()
方法中,我們使用@RequestBody
注解將POST請(qǐng)求體中的JSON數(shù)據(jù)反序列化為User
對(duì)象。這樣可以方便地處理復(fù)雜的用戶信息。 - 在
deleteUser()
方法中,使用了@PathVariable
注解獲取URL路徑中的id
參數(shù),并根據(jù)該參數(shù)刪除相應(yīng)的用戶。
這些示例代碼演示了如何使用@RequestParam和@RequestBody注解來(lái)處理不同類型的請(qǐng)求參數(shù)。
注意:這只是一個(gè)簡(jiǎn)單的示例,實(shí)際應(yīng)用中可能還需添加其他的業(yè)務(wù)邏輯、錯(cuò)誤處理等。
?
四、自定義錯(cuò)誤異常
首先,創(chuàng)建一個(gè)自定義的異常類,例如 CustomException
:
public class CustomException extends RuntimeException {
private HttpStatus status;
private String message;
public CustomException(HttpStatus status, String message) {
this.status = status;
this.message = message;
}
public HttpStatus getStatus() {
return status;
}
public String getMessage() {
return message;
}
}
然后,在控制器中使用 @ExceptionHandler
注解來(lái)捕獲并處理拋出的自定義異常:
@RestController
public class MyController {
@GetMapping("/example")
public void example() {
// 模擬拋出自定義異常
throw new CustomException(HttpStatus.BAD_REQUEST, "自定義錯(cuò)誤消息");
}
@ExceptionHandler(CustomException.class)
public ResponseEntity<ErrorResponse> handleCustomException(CustomException ex) {
ErrorResponse errorResponse = new ErrorResponse(ex.getStatus().value(), ex.getMessage());
return new ResponseEntity<>(errorResponse, ex.getStatus());
}
}
在上述代碼中,example()
方法模擬處理某個(gè)請(qǐng)求時(shí)發(fā)生錯(cuò)誤,并拋出了自定義異常 CustomException
。handleCustomException()
方法使用 @ExceptionHandler
注解來(lái)處理 CustomException
類型的異常,并返回一個(gè)自定義的錯(cuò)誤響應(yīng) ErrorResponse
。
ErrorResponse
是一個(gè)簡(jiǎn)單的包含錯(cuò)誤碼和錯(cuò)誤消息的數(shù)據(jù)類:
public class ErrorResponse {
private int code;
private String message;
public ErrorResponse(int code, String message) {
this.code = code;
this.message = message;
}
// 省略 getter 和 setter 方法
}
最后,在響應(yīng)時(shí),可以返回一個(gè)包含錯(cuò)誤信息的 JSON 響應(yīng)體,例如:
{
"code": 400,
"message": "自定義錯(cuò)誤消息"
}
這樣,當(dāng)請(qǐng)求 /example
時(shí)發(fā)生異常,將會(huì)觸發(fā) handleCustomException()
方法處理,并返回自定義的錯(cuò)誤響應(yīng)。
?注意:這只是一個(gè)簡(jiǎn)單的示例,實(shí)際場(chǎng)景中可能需要根據(jù)具體需求進(jìn)行調(diào)整和擴(kuò)展。
?
五、web總結(jié)
-
構(gòu)成:Web由客戶端和服務(wù)器端組成??蛻舳送ǔJ怯脩羰褂玫臑g覽器軟件,而服務(wù)器端則是存儲(chǔ)和提供網(wǎng)頁(yè)和其他資源的計(jì)算機(jī)系統(tǒng)。
-
基本原理:Web使用HTTP(Hypertext Transfer Protocol)協(xié)議進(jìn)行通信。用戶通過(guò)瀏覽器發(fā)起HTTP請(qǐng)求,服務(wù)器接收并處理請(qǐng)求,然后返回相應(yīng)的HTML頁(yè)面或其他資源給客戶端。
-
標(biāo)準(zhǔn)技術(shù):Web的核心技術(shù)包括HTML(Hypertext Markup Language)、CSS(Cascading Style Sheets)和JavaScript。HTML用于創(chuàng)建網(wǎng)頁(yè)結(jié)構(gòu),CSS用于控制網(wǎng)頁(yè)的樣式和布局,JavaScript用于實(shí)現(xiàn)交互性和動(dòng)態(tài)效果。
-
網(wǎng)頁(yè)開(kāi)發(fā):網(wǎng)頁(yè)開(kāi)發(fā)涉及前端和后端兩個(gè)方面。前端開(kāi)發(fā)主要關(guān)注用戶界面的設(shè)計(jì)和開(kāi)發(fā),使用HTML、CSS和JavaScript等技術(shù);后端開(kāi)發(fā)則負(fù)責(zé)處理服務(wù)器端的邏輯和數(shù)據(jù)存儲(chǔ),使用各種編程語(yǔ)言和框架。
-
動(dòng)態(tài)網(wǎng)頁(yè):除了靜態(tài)的HTML頁(yè)面外,Web也支持動(dòng)態(tài)網(wǎng)頁(yè)的創(chuàng)建。動(dòng)態(tài)網(wǎng)頁(yè)可以根據(jù)用戶的請(qǐng)求和其他條件生成不同的內(nèi)容,通常使用服務(wù)器端腳本語(yǔ)言(如PHP、Python和Java)和數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)。
-
Web應(yīng)用程序:隨著Web的發(fā)展,許多復(fù)雜的應(yīng)用程序也被開(kāi)發(fā)為Web應(yīng)用。這些應(yīng)用在瀏覽器中運(yùn)行,可以提供各種功能,如電子商務(wù)、社交媒體、在線銀行等。
-
移動(dòng)Web:隨著移動(dòng)設(shè)備的普及,移動(dòng)Web成為重要的發(fā)展方向。移動(dòng)Web兼容各種移動(dòng)設(shè)備,并提供更好的用戶體驗(yàn),通常通過(guò)響應(yīng)式設(shè)計(jì)或移動(dòng)應(yīng)用程序來(lái)實(shí)現(xiàn)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-752651.html
總的來(lái)說(shuō),Web的發(fā)展使得信息的獲取和共享變得更加便捷和全球化。它已經(jīng)成為我們?nèi)粘I詈凸ぷ髦胁豢苫蛉钡囊徊糠?,不斷演進(jìn)和創(chuàng)新,為我們提供豐富的在線資源和服務(wù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-752651.html
到了這里,關(guān)于深入理解Web注解:解析常用注解及其應(yīng)用場(chǎng)景的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!