Web一课一得课程学习(常用注解)

web的基础介绍

web是什么

Web(全称为World Wide Web)是指由许多互联网资源和文档组成的信息空间,这些资源通过超文本链接相互关联。通常,人们所说的“上网”、“浏览网页”都是在使用Web。

Web的核心概念

  1. 超文本标记语言(HTML):用于创建网页内容和结构的标记语言,由各种标签组成,可以定义文本、图像、链接等元素。

  2. 统一资源定位器(URL):用于定位和访问Web上的资源(如网页、图片、视频等)的地址,通常以"http://"或"https://"开头。

  3. 超文本传输协议(HTTP):用于在Web服务器和客户端之间传输和交换数据的应用层协议。

  4. 网页浏览器:用于访问和显示Web页面的软件,如Chrome、Firefox、Safari等。

  5. 网页服务器:存储和提供Web页面的计算机系统,可以响应客户端的请求并发送相应的数据。

Web的发展始于20世纪90年代初,由蒂姆·伯纳斯-李发明。通过Web,人们可以轻松访问各种信息资源、进行在线交流、使用各种在线服务等。随着互联网技术的不断发展,Web也在不断演变和创新,例如出现了动态网页、Web应用程序、移动Web等形式,为人们的生活和工作带来了巨大的便利。

web的内容

  1. HTML(超文本标记语言):HTML是用于构建网页结构的标记语言。学习HTML可以了解如何创建网页、定义文本、图像、链接等元素。

  2. CSS(层叠样式表):CSS用于控制网页的样式和布局。学习CSS可以实现对网页中的元素进行美化、排版和定位。

  3. JavaScript:JavaScript是一种用于实现动态交互效果的编程语言。学习JavaScript可以实现网页中的表单验证、动画效果、响应式设计等功能。

  4. 前端框架和库:学习流行的前端框架和库,如React、Angular、Vue.js等,可以帮助快速开发复杂的前端应用程序。

  5. 后端开发:学习一门后端编程语言,如Python、Node.js、PHP等,以及相应的框架和数据库技术,可以实现用户认证、数据存储和处理等功能。

  6. 数据库:学习关系型数据库(如MySQL、PostgreSQL)或非关系型数据库(如MongoDB、Redis),了解数据库的设计和使用,以及与后端的集成。

  7. 网络和服务器:学习网络基础知识和常用的服务器技术,了解HTTP协议、RESTful API设计等,以便部署和管理Web应用程序。

  8. 安全和性能优化:学习Web安全的基本知识,如跨站脚本攻击(XSS)、SQL注入等,以及性能优化技术,如缓存、压缩等,提升用户体验。

web的常用注解代码  

1.Servlet注解:

用于标记Servlet类的注解,包括@WebServlet、@WebFilter、@WebListener等。

@WebServlet注解示例(用于定义Servlet):

 

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

@WebServlet(name = "MyServlet", urlPatterns = {"/hello"})
public class MyServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.getWriter().write("Hello, World!");
    }
}

在上面的示例中,@WebServlet注解用于将MyServlet类标记为一个Servlet,并指定了它的名称和URL映射。

@WebFilter注解示例(用于定义过滤器):

import javax.servlet.annotation.WebFilter;
import javax.servlet.*;
import java.io.IOException;

@WebFilter(filterName = "MyFilter", urlPatterns = {"/*"})
public class MyFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 检查或修改请求和响应
        chain.doFilter(request, response);
    }
    // 其他方法
}

在上面的示例中,@WebFilter注解用于将MyFilter类标记为一个过滤器,并指定了它的名称和要过滤的URL模式。

@WebListener注解示例(用于定义监听器):

import javax.servlet.annotation.WebListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

@WebListener
public class MyListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent sce) {
        // 在Web应用程序初始化时执行的操作
    }
    public void contextDestroyed(ServletContextEvent sce) {
        // 在Web应用程序销毁时执行的操作
    }
}

在上面的示例中,@WebListener注解用于将MyListener类标记为一个监听器,用于监听ServletContext的初始化和销毁事件。

这些注解可以让你在Java Web开发中更方便地定义Servlet、过滤器和监听器,并且不需要在web.xml文件中显式配置它们。

2.Spring MVC注解

Spring MVC框架中常用的注解,包括@Controller、@RequestMapping、@RequestParam等。

@Controller注解示例(用于定义控制器):

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MyController {
    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
    
    // 其他处理请求的方法
}

 在上面的示例中,@Controller注解用于将MyController类标记为一个控制器,处理来自客户端的请求。通过@GetMapping注解,将方法hello()映射到"/hello"路径上,并返回视图名为"hello"的视图。

@RequestMapping注解示例(用于定义请求映射):

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/products")
public class ProductController {
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public String getProduct(@PathVariable("id") Long id) {
        // 根据id获取产品信息
        return "product";
    }
    
    // 其他处理请求的方法
}

在上面的示例中,@RequestMapping注解用于将ProductController类的请求映射为"/products",并且所有方法都相对于该路径。通过@RequestMapping注解,将方法getProduct()映射到路径"/products/{id}"上,并使用GET请求方式。使用@PathVariable注解将路径中的"id"参数绑定到方法的参数上。

@RequestParam注解示例(用于定义请求参数):

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class UserController {
    @GetMapping("/login")
    public String login(@RequestParam("username") String username, @RequestParam("password") String password) {
        // 验证用户名和密码
        return "home";
    }
    
    // 其他处理请求的方法
}

在上面的示例中,@RequestParam注解用于将请求中的参数与方法的参数进行绑定。通过@RequestParam注解,将方法login()的参数username和password与请求中的"username"和"password"参数进行绑定。

这些注解可以让你在使用Spring MVC框架时更方便地定义控制器、请求映射和请求参数,并且提供了灵活的方式来处理不同的请求。

 

 

3.JPA注解:

Java持久化API(Java Persistence API)中的注解,包括@Entity、@Table、@Column等。

@Entity注解示例(用于定义实体类) 

import javax.persistence.*;

@Entity
@Table(name = "customer")
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(name = "name")
    private String name;
    
    @Column(name = "email")
    private String email;
    
    // 省略了构造函数、getter和setter方法
}

在上面的示例中,@Entity注解用于将Customer类标记为一个实体类,并且可以指定它对应的数据库表名。@Id注解表示该属性是实体类的主键,@GeneratedValue注解表示主键的自动生成策略。

 

@Table注解示例(用于定义表):

import javax.persistence.*;

@Entity
@Table(name = "product")
public class Product {
    @Id
    private Long id;
    
    @Column(name = "name")
    private String name;
    
    @Column(name = "price")
    private Double price;
    
    // 省略了构造函数、getter和setter方法
}

在上面的示例中,@Table注解用于将Product类标记为对应product数据库表,可以指定表名、表空间等属性。

@Column注解示例(用于定义列):

import javax.persistence.*;

@Entity
@Table(name = "order_item")
public class OrderItem {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @ManyToOne
    @JoinColumn(name = "order_id")
    private Order order;
    
    @ManyToOne
    @JoinColumn(name = "product_id")
    private Product product;
    
    @Column(name = "quantity")
    private Integer quantity;
    
    // 省略了构造函数、getter和setter方法
}

在上面的示例中,@Column注解用于将quantity属性标记为对应数据库表中的列,可以指定列名、列类型等属性。

这些注解可以让你在使用JPA时更方便地定义实体类、表和列,并且不需要手动编写SQL语句。

4.Hibernate注解

Hibernate框架中的注解,用于实现ORM(对象关系映射),包括@Entity、@Table、@Column等。

在使用JPA(Java Persistence API)进行数据库持久化时,通常会使用@Entity、@Table和@Column注解来定义实体类、表和列。

@Entity(用于定义实体类)

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Product {
    @Id
    private Long id;
    
    private String name;
    
    private Double price;
    
    // 省略了构造函数、getter和setter方法
}

在上面的示例中,@Entity注解将Product类标记为一个实体类,表示该类与数据库中的表相对应。

@Table(用于定义表):

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "product")
public class Product {
    // 实体类的属性和方法
}

在上面的示例中,@Table注解指定了Product类对应的数据库表名为"product"。 

@Column(用于定义列):

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "product")
public class Product {
    @Id
    private Long id;
    
    @Column(name = "product_name")
    private String name;
    
    @Column(name = "product_price")
    private Double price;
    
    // 省略了构造函数、getter和setter方法
}

在上面的示例中,@Column注解用于将name属性映射到数据库表的"product_name"列,将price属性映射到数据库表的"product_price"列。

通过使用这些注解,你可以更方便地定义实体类、表和列,并且JPA会根据这些注解自动生成对应的数据库表结构。

5.Spring注解:

Spring框架中的注解,用于实现依赖注入、AOP等功能,包括@Component、@Autowired、@Aspect等。

@Component注解示例(用于定义组件):

import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    // 组件的实现逻辑
}

@Component注解用于将MyComponent类标记为一个组件,表示该类需要由Spring进行管理。

@Autowired注解示例(用于自动注入依赖):

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyService {
    private MyRepository myRepository;
    
    @Autowired
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
    
    // 服务的实现逻辑
}

@Autowired注解用于自动注入依赖,通过构造函数、字段或者方法来实现。在上面的示例中,MyRepository会被自动注入到MyService中。

@Aspect注解示例(用于定义切面):

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.MyService.*(..))")
    public void beforeAdvice() {
        // 在目标方法执行之前执行的逻辑
    }
    
    // 其他增强逻辑
}

 

@Aspect注解用于将LoggingAspect类标记为一个切面,表示该类包含了一组增强逻辑,可以在目标方法执行前、执行后等时机进行处理。在上面的示例中,@Before注解指定了在com.example.MyService包下的所有方法执行之前执行beforeAdvice()方法。

这些注解是在Java开发中非常常用的注解,能够通过注解的方式提供一些特定功能,如组件管理、依赖注入和切面编程等。

6.JAX-RS注解:

Java API for RESTful Web Services(JAX-RS)中的注解,用于实现RESTful风格的Web服务,包括@Path、@GET、@POST等。

@Path注解示例(用于定义访问路径):

import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class HelloResource {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHello() {
        return "Hello, World!";
    }
}

 

@Path注解用于将HelloResource类标记为一个资源,表示该类对应了一个访问路径。在上面的示例中,访问路径为"/hello"。

@GET注解示例(用于处理HTTP GET请求):

import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class HelloResource {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHello() {
        return "Hello, World!";
    }
    
    @GET
    @Path("/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHelloTo(@PathParam("name") String name) {
        return "Hello, " + name + "!";
    }
}

@GET注解用于将sayHello()方法标记为处理HTTP GET请求的方法。在上面的示例中,当访问"/hello"路径时,会调用sayHello()方法返回"Hello, World!",当访问"/hello/{name}"路径时,会调用sayHelloTo()方法返回"Hello, {name}!",其中{name}是一个参数。

@POST注解示例(用于处理HTTP POST请求):

import javax.ws.rs.Path;
import javax.ws.rs.POST;
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class HelloResource {
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHelloTo(Map<String, String> request) {
        String name = request.get("name");
        return "Hello, " + name + "!";
    }
}

@POST注解用于将sayHelloTo()方法标记为处理HTTP POST请求的方法。在上面的示例中,当以JSON格式发送一个{name: "xxx"}的请求时,会调用sayHelloTo()方法返回"Hello, xxx!"。

7.Swagger注解:

用于生成API文档的注解,包括@Api、@ApiOperation、@ApiParam等。

@Api注解示例(用于定义API文档信息):

import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Api(tags = "Hello API", description = "提供Hello相关的接口")
public class HelloController {
    // 接口方法实现
}

@Api注解用于将HelloController类标记为一个API,表示该类包含了一组相关的接口。在上面的示例中,tags属性指定了API标签为"Hello API",description属性指定了API描述为"提供Hello相关的接口"。

@ApiOperation注解示例(用于定义接口方法信息):

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Api(tags = "Hello API", description = "提供Hello相关的接口")
public class HelloController {
    @GetMapping("/hello")
    @ApiOperation(value = "获取问候语", notes = "根据名称获取问候语")
    public String getGreeting(@RequestParam("name") String name) {
        return "Hello, " + name + "!";
    }
}

@ApiOperation注解用于将getGreeting()方法标记为一个接口方法,表示该方法对应了一个API接口。在上面的示例中,value属性指定了接口方法名称为"获取问候语",notes属性指定了接口方法描述为"根据名称获取问候语"。

@ApiParam注解示例(用于定义接口方法参数信息):

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Api(tags = "Hello API", description = "提供Hello相关的接口")
public class HelloController {
    @GetMapping("/hello")
    @ApiOperation(value = "获取问候语", notes = "根据名称获取问候语")
    public String getGreeting(@ApiParam(value = "姓名", required = true) @RequestParam("name") String name) {
        return "Hello, " + name + "!";
    }
}

@ApiParam注解用于将name参数标记为一个接口方法参数,表示该参数对应了一个API接口参数。在上面的示例中,value属性指定了参数名称为"姓名",required属性指定了该参数为必填参数。

8.Validation注解:

用于数据验证和校验的注解,包括@NotNull、@Size、@Pattern等。

@NotNull注解示例(用于验证非空):

import javax.validation.constraints.NotNull;

public class User {
    @NotNull(message = "用户名不能为空")
    private String username;
    
    // getter和setter方法
}

@NotNull注解用于标记username字段为非空。在上面的示例中,如果username字段为null,则会抛出验证异常,并返回"用户名不能为空"作为错误信息。

@Size注解示例(用于验证大小范围):

import javax.validation.constraints.Size;

public class User {
    @Size(min = 6, max = 20, message = "密码长度必须在6到20个字符之间")
    private String password;
    
    // getter和setter方法
}

@Size注解用于标记password字段的大小范围。在上面的示例中,如果password字段的长度不在6到20之间,则会抛出验证异常,并返回"密码长度必须在6到20个字符之间"作为错误信息。

@Pattern注解示例(用于验证正则表达式):

import javax.validation.constraints.Pattern;

public class User {
    @Pattern(regexp = "[a-zA-Z0-9]+", message = "用户名只能包含字母和数字")
    private String username;
    
    // getter和setter方法
}

@Pattern注解用于标记username字段的格式必须符合正则表达式。在上面的示例中,如果username字段包含非字母和数字的字符,则会抛出验证异常,并返回"用户名只能包含字母和数字"作为错误信息。

9.Log4j注解:

用于日志记录的注解,包括@Slf4j、@Log等。@Slf4j和@Log是两个常用的日志注解,在Java中使用它们可以简化日志记录的代码编写。

@Slf4j注解示例:

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyClass {
    public void doSomething() {
        log.info("执行了doSomething方法");
        // 其他业务逻辑
    }
}

@Slf4j注解是使用Lombok库提供的注解,它会在编译时自动生成一个名为"log"的日志记录器对象。在上面的示例中,我们可以直接使用"log"对象记录日志,如log.info("执行了doSomething方法")。

@Log注解示例:

import lombok.extern.java.Log;

@Log
public class MyClass {
    public void doSomething() {
        log.info("执行了doSomething方法");
        // 其他业务逻辑
    }
}

@Log注解也是使用Lombok库提供的注解,它会在编译时自动生成一个名为"log"的日志记录器对象。与@Slf4j注解不同的是,@Log注解使用的是Java标准库中的日志API(java.util.logging)。在上面的示例中,我们可以直接使用"log"对象记录日志,如log.info("执行了doSomething方法")。

web学习小结

 Web开发是一个不断演进的领域,新技术和工具不断涌现。要保持学习的状态,关注行业动态,掌握最新的发展趋势。参与技术社区,与其他开发者交流和分享经验,这有助于扩大自己的网络和获取更多的学习资源。要坚持不懈地学习,积累实际经验,才能在Web开发领域取得进步。

 

  • 50
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值