JavaWeb学习-- RequestMapping注解

        RequestMapping注解适用于建立请求URL和处理方法之间的对应关系,其可以作用在方法和类上。其中,作用在类上代表其是第一级的访问路径,而作用在方法上则是第二级的访问路径。

          RequestMapping注解有四种属性,分别是value,path,method和params。其中value和path的属性一致,均用于指定请求路径的url;method则用于指定该方法的请求方式;params用于限制请求参数的条件


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
​
//这里用一个保存和删除角色模块的类演示
 
@Controller
@RequestMapping(path = "/role")        // 一级请求路径。代表其在浏览器使用时是*/role
public class RoleController {
​
   
     // method="当前方法允许请求方式能访问"
     //params="请求路径上传参数"
    @RequestMapping(path = "/save.do",method = {RequestMethod.GET},params = "username")
    //只能使用get请求,且传入参数名为username,路径为*/role/save.do
    public String save(){
        System.out.println("保存角色中...");
        return "suc";//处理结束后跳转的页面
    }
​
    @RequestMapping(value = "/delete.do")
    //路径为*/role/delete.do
    public String delete(){
        System.out.println("删除角色中...");
        return "suc";
    }
​
}
​

### Java Web 中注解的使用方法与示例 #### 一、什么是注解注解(Annotation)是在 JDK 5.0 版本引入的一种元程序工具,用于提供有关程序代码的额外信息。它们不会直接影响程序的功能,但在编译阶段或运行时可以通过反射机制读取并执行特定操作。 --- #### 二、Java Web 开发中常见的注解及其用途 在 Java Web 应用开发过程中,注解被广泛应用于简化配置和增强功能。以下是几个典型场景: 1. **监听器注册** 使用 `@WebListener` 将类声明为 ServletContext 的生命周期事件监听器[^1]。 ```java import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class MyServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("Application started"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("Application stopped"); } } ``` 2. **获取方法上的注解** 可通过反射技术提取方法上定义的注解,并进一步解析其属性值[^2]。 ```java import java.lang.reflect.Method; public class AnnotationExample { public static void main(String[] args) throws Exception { Method method = MyClass.class.getMethod("myMethod", null); if (method.isAnnotationPresent(MyCustomAnnotation.class)) { MyCustomAnnotation annotation = method.getAnnotation(MyCustomAnnotation.class); System.out.println(annotation.value()); } } } @MyCustomAnnotation(value = "This is a custom annotation") class MyClass { public void myMethod() {} } @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @interface MyCustomAnnotation { String value(); } ``` 3. **自定义注解的应用** 自定义注解通常配合 AOP 或其他框架扩展来完成业务需求。例如,记录方法执行时间的注解[^5]。 定义注解: ```java package com.example.annotations; import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface LogExecutionTime { } ``` 配合切面实现逻辑: ```java import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Aspect @Component public class ExecutionTimeLogger { @Around("@annotation(com.example.annotations.LogExecutionTime)") public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { long startTime = System.currentTimeMillis(); Object result = joinPoint.proceed(); long endTime = System.currentTimeMillis(); System.out.println(joinPoint.getSignature() + " executed in " + (endTime - startTime) + "ms"); return result; } } ``` 4. **Spring MVC 控制器映射** Spring 框架提供了丰富的注解支持,比如 `@Controller`, `@RequestMapping` 等,用于简化 URL 映射和参数绑定过程[^3]。 ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String sayHello() { return "Hello, World!"; } } ``` 5. **持久层注解** 在数据访问层中,JPA 提供了诸如 `@Entity`, `@Table`, 和 `@Column` 这样的注解,帮助开发者描述实体对象与数据库表之间的关系。 ```java import jakarta.persistence.Entity; import jakarta.persistence.Id; @Entity public class User { @Id private Long id; private String name; // Getters and Setters omitted for brevity } ``` 6. **动态加载自定义注解** 如果需要在运行期间动态加载某个类或者方法上的注解,则可以利用反射 API 实现[^4]。 ```java import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @interface CustomAnnotation { String value() default ""; } @CustomAnnotation("Sample Value") public class TestClass {} public class MainApp { public static void main(String[] args) { Class<?> clazz = TestClass.class; if (clazz.isAnnotationPresent(CustomAnnotation.class)) { CustomAnnotation annotation = clazz.getAnnotation(CustomAnnotation.class); System.out.println(annotation.value()); } } } ``` --- ### 总结 上述例子展示了如何在不同层次上应用注解来优化 Java Web 应用的设计与维护工作流。无论是基础的 Servlet 监听器设置还是复杂的 AOP 切片编程模型,都可以借助于灵活多变的注解体系达成目标。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值