web路由的java简单实现思路

简介: web路由的java简单实现思路

1.web路径分析



https://juejin.cn/pins/recommended
协议://地址/端口/路由地址
                我们只关注这里就可以了
前面的容器处理了
复制代码


2.路由思路



2.1定义注解
2.2系统初始化的时候扫描注解,解解析路由缓存起来
2.3接收请求的时候由自定义过滤器进行拦截
2.4解析请求的路径,并匹配缓存的路由,处理业务
2.5注意对于业务处理的action进行单例实例化
2.6目前这里这里处理方法还只是servlet的request,response只是个例子了解下流程
复制代码


3.基本实现



3.1注解简单的定义


@Retention(RetentionPolicy.RUNTIME)
public @interface PathAnnotation {
    String path();//这里是路径
    String type();//这里是类型
}
复制代码


3.2扫描注解,缓存路径


这里就是遍历读取class文件,找到注解为PathAnnotation的类
解析路径然后缓存起来
//路由对应的实体类
public class Route {
  /** 路径*/
  private String path;
  /** 执行方法*/
  private String method;
  /** 方法类型*/
  private String type;
  /** action控制类*/
  private Object action;
 } 
 /**
 * 扫描的class类,解析路径缓存起来routeList
 * @param path
 * @return
 * @throws IllegalAccessException
 * @throws InstantiationException
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
public void addAllRoutes(Set<Class> actionClass) throws InstantiationException, IllegalAccessException {
if (null != actionClass) {
 for (Class cls : actionClass) {
  PathAnnotation pa = (PathAnnotation) cls.getAnnotation(PathAnnotation.class);
  String routPath = "";
  if (null != pa) {
   routPath = pa.path();
  }
  Method[] methods = cls.getMethods();
  for (Method m : methods) {
   pa = m.getAnnotation(PathAnnotation.class);
   if (null == pa) {
      continue;
  }
  routPath += "/" + pa.path();
  Route rt = new Route(routPath, m.getName(), pa.type(), BeanUtil.getBeanUtil().getObj(cls));
        logger.info("加载路由:" + rt.toString());
        routeList.add(rt);
      }
    }
   }
}
复制代码


3.3路径匹配


/**
 * 这里是个匹配的路径内容
 * 这里的匹配路径所有的都根据/来的
 * @param rs
 * @param path
 * @return
 */
public static  Route findRoute(Routes rs,String path) {
  if(null==rs||rs.getRouteList().size()<1) {
    return null;
  }else {
    List<Route> allRoute=rs.getRouteList();
    //首先要把路径给格式化为标准的路径
               if(null==path) {
            return null;
               }else {
                /**
                 * 1.这里首先要去掉开始的项目地址,然后把字符\转换为/
                 * 2.如何是/结尾的要去掉
                 * 3.开始的项目地址如何去掉
                 * 4.项目路径匹配返回正常的路由
                 */  
                String currentPath=path.trim().replace('\\', '/');
                if(currentPath.endsWith("/")) {
                   currentPath=currentPath.substring(0,currentPath.length()-1);
                }
                if(currentPath.startsWith("/")) {
                   currentPath=currentPath.substring(1,currentPath.length()); 
                }
                for(Route rt:allRoute) {
                        if(rt.getPath().equals(currentPath)) {
                                return rt;
                        }
                }
               }
        return null;
  }
}
复制代码


4.效果测试



4.1指定过滤器配置


<filter>
  <filter-name>pingpang</filter-name>
  <filter-class>com.pingpang.core.Core</filter-class>
  <init-param>
     <param-name>autoPackage</param-name>
           <!--这里是扫描的包路径-->
     <param-value>com.pingpang.test</param-value>
     </init-param>
</filter>
<filter-mapping>
  <filter-name>pingpang</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
复制代码


4.2测试action


//路由注解的测试
@PathAnnotation(path = "hello", type = "")
public class PingPangTest {
  @PathAnnotation(path = "test", type = "")
  public void helloWord(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        System.out.println("-----------");
        request.getRequestDispatcher("/login.jsp").forward(request, response);
   }
}
复制代码


4.3效果图


网络异常,图片无法展示
|


网络异常,图片无法展示
|

相关文章
|
9天前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
105 1
|
8天前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
87 0
|
1月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
308 63
|
1月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
174 1
|
2月前
|
缓存 NoSQL Java
Java Web 从入门到精通之苍穹外卖项目实战技巧
本项目为JavaWeb综合实战案例——苍穹外卖系统,涵盖Spring Boot 3、Spring Cloud Alibaba、Vue 3等主流技术栈,涉及用户认证、订单处理、Redis缓存、分布式事务、系统监控及Docker部署等核心功能,助你掌握企业级项目开发全流程。
297 0
|
2月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
145 0
|
3月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
7月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
391 7
|
8月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
426 9
|
9月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
311 7
Spring Boot 入门:简化 Java Web 开发的强大工具