怎样获取url的第一段String requestUrl = requestAttributes.getRequest().getRequestURI();
时间: 2024-03-13 20:46:29 浏览: 63
可以使用Java中的String类的substring()方法来截取URL中的第一段字符串,具体代码如下:
```
String requestUrl = requestAttributes.getRequest().getRequestURI();
String firstSegment = requestUrl.substring(1, requestUrl.indexOf("/", 1));
```
其中,substring()方法的第一个参数指定截取的起始位置,这里传入1是为了跳过URL开头的斜杠“/”;第二个参数是指定截取的结束位置,这里使用了indexOf()方法来获取第一个斜杠“/”出现的位置,从而截取出第一段字符串。
相关问题
按下面代码统计接口调用的次数:@Order(999) @Aspect @Component public class MonitorAspect { @Autowired private RabbitTemplate rabbitTemplate; @Pointcut("@annotation(com.sinosoft.common.messagestorage.annotation.Monitor)") public void monitorPointcut(){} @Around("monitorPointcut()") public Object monitor(ProceedingJoinPoint joinPoint) throws Throwable { // 获取方法参数和注解信息 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); Object[] args = joinPoint.getArgs(); ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); Monitor monitor = method.getAnnotation(Monitor.class); // 记录监控信息 String requestUrl = requestAttributes.getRequest().getRequestURI(); String serviceName = method.getDeclaringClass().getSimpleName() + "." + method.getName(); String source = args.length > 0 ? args[0].toString() : ""; long startTime = System.currentTimeMillis(); int status = 200; Object result = null; try { result = joinPoint.proceed(); } catch (Exception e) { status = 500; throw e; } finally { long endTime = System.currentTimeMillis(); monitor(serviceName, source, status, startTime, endTime); } // 返回方法结果 return result; } private void monitor(String serviceName, String source, int status, long startTime, long endTime) { // 记录监控信息 Message message = new Message(); message.setServiceName(serviceName); message.setSource(source); message.setStatus(status); message.setStartTime(startTime); message.setEndTime(endTime); // 发送消息到MQ rabbitTemplate.setExchange("monitor.queue.test"); rabbitTemplate.setRoutingKey("monitorRoutingKey"); rabbitTemplate.convertAndSend(message); // rabbitTemplate.convertAndSend("monitor.queue.test", "monitorRoutingKey", message); } }
这段代码是一个 Spring AOP 切面,用于统计被 @Monitor 注解标记的方法的调用次数以及调用时间等信息,并将这些信息记录到 RabbitMQ 中。
具体实现方式是,在切面的 monitor 方法中,获取被注解的方法的相关信息,包括方法名、参数、注解信息等,然后记录调用开始时间,执行被注解的方法,记录调用结束时间,最终将这些信息封装成一个 Message 对象,通过 RabbitMQ 发送出去。
需要注意的是,这段代码中用到了 RabbitMQ 的相关 API,需要先配置好 RabbitMQ 的连接和 Exchange、Queue。
@WebServlet("*.action") public class BaseServlet extends HttpServlet { //C:业务控制层 StudentService studentService = null; public BaseServlet() { studentService = new StudentService(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 request.getRequestURI():获取请求url String requestURI = request.getRequestURI(); if(requestURI.endsWith("load.action")){ //登录请求 //1 获取前端数据:request String username = request.getParameter("username"); //2 处理登录业务:JDBC+service+dao+utis Student student = studentService.loadStudent(username); // 3 根据结果响应:response if(student == null){ //登录失败,弹框"登录失败" 回到studentLoad.html } else{ //打印学生信息 } } else if(requestURI.endsWith("regedit.action")){ //注册业务 } } }
这段代码是一个基础的 Servlet 控制器,它通过继承 HttpServlet 类来实现对 HTTP 请求的处理。其中,doGet() 和 doPost() 方法分别处理 GET 和 POST 请求,并且在 doPost() 中调用了 doGet() 方法以统一处理两种类型的请求。
在 doGet() 方法中,首先通过 request.getRequestURI() 方法获取请求的 URL,然后根据 URL 的结尾字符串来判断具体的业务逻辑,例如登录请求和注册请求。对于登录请求,代码通过获取前端传来的用户名并调用 StudentService 类中的 loadStudent() 方法来处理登录业务;对于注册请求,可以在 else if 分支中编写相应的处理逻辑。
需要注意的是,这段代码中的 StudentService 类并没有给出具体的实现,我们只能看出它是一个业务逻辑层的类,用于处理学生信息相关的业务。此外,代码中还有一些注释,说明了一些方法或变量的作用,例如 request.getRequestURI() 方法的作用是获取请求的 URL。
阅读全文