文档章节

Java反射实现URL路由

chunquedong
 chunquedong
发布于 2016/06/03 18:22
字数 613
阅读 1.6K
收藏 7
jsv

码上生花,ECharts 作品展示赛正式启动!>>>

Java反射实现URL路由

URL路由

所谓URL路由,指的是把URL映射到某一个函数。URL不是应该对应到某一个文件吗,例如HTML/JSP或者Velocity模板。 但是为了实现代码逻辑和视图的分离,我们把URL对应到一个java方法调用上,这个可能就是传说中的MVC模式。

传统方式

你可能想起用裸用Servlet或者Struts框架,然后经常要在xml文件里面配置。 用Servlet或者Struts,有很多不方便的地方。每个处理需要独占一个类。每增加或者修改接口,都需要配置xml。xml一旦配置错误,又很难debug。 顺便吐槽一下,Struts框架不但没有减少代码量,甚至有可能增加代码量,不知道它存在的价值什么是。Spring也是过度工程化得典型。

反射方案

其实根本的需求是把URL对应的某一个方法调用。我规定URL是由类名和方法名称组成的,例如http://www.xxx.com/Users/say, 将反射调用Users类的say方法。 这样全局只需要配置一个Servlet来做路由分发,从此和xml说再见。

有人会说,URL变了呢?那我只能Eclipse的Refactor重命名类。如果URL比较变态不是这种怎么办?幸好在我的项目里面URL都是我来定的。而且解决80%的问题以后,剩下的特殊情况也可以再配置或者继承路由分发类来特殊处理。

Web开发框架

在09年的时候我就尝试使用反射来代替xml来做URL路由,这么做的很嗨。 后来还开发了一个JSV Web开发框架也用这种方式,可惜Java里面开发框架比较多,没有人注意到,大家也习惯了啰嗦的xml方式。 6年过去了,当我试图搜索时还是没发现也有人这么干。

JSV还对Restful风格的路由支持。http://www.xxx.com/Users/123被看做是http://www.xxx.com/Users/get/123的简写,最后一个被当做参数,相当于调用new Users().get(123)

当然JSV库的功能很多,还包括服务器热加载、网页模板渲染、数据库ORM、JSON序列化、验证码生成等。

© 著作权归作者所有

chunquedong

chunquedong

粉丝 52
博文 136
码字总数 40105
作品 5
海淀
高级程序员
私信 提问
加载中
请先登录后再评论。
Java学习之反射机制及应用场景

前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit、早期的View注解框架都或...

总李写代码
2016/11/10
0
0
Servlet简单实现请求分发(类thinkphp5)

Servlet简单实现请求分发(类thinkphp5) 1.写请求分发的原由   今天晚上笔者在使用java的servlet写博客网站的时候,想实现MVC开发模式,然后就发现,一个请求的动作就要写servlet实现类,这...

osc_rlhs4hdf
2018/01/22
3
0
JDBC 获取 Oracle 数据库连接(使用 Driver)

获取数据库连接的方法: 1. Driver 接口: •Java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现 •在程序中不需要...

passionfly
2014/11/17
134
0
javaWeb_JDBC_JDBC概述以及driver基本使用

JDBC基础知识1 1.几个基础概念 (1).数据的持久化 把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存 到硬盘上加以”固化”...

osc_ll50uphu
2019/02/01
5
0
Spring中的反射与反射的原理,案例详解

在造轮子:实现一个简易的 Spring IoC 容器一文中提到 Spring 在创建 Bean 实例和依赖注入时使用了反射,本文来具体分析一下 Spring 中的反射以及反射的原理。 一、Spring 中的反射 1.1、创建...

程序员的人生A
05/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Beta冲刺--Day2

2020/05/29 这个作业属于哪个课程 2020春S班软件工程实践 这个作业要求在哪里 团队作业第六次——beta冲刺+事后诸葛亮 团队名称 云玩家$ 这个作业的目标 beta冲刺,测试和完善已有的项目 作业...

osc_taer599u
50分钟前
15
0
题解 [SDOI2010]猪国杀

题目链接 代码成功卡到600行以内 曾经发誓一天切掉的我打了两周。。。 先看题 要点还是挺多的,即使是像我这样熟悉三国杀的同(wán)学( jiā),也要认真看。 首先是基本牌的部分。 杀:在...

osc_4p2c0ecc
52分钟前
17
0
Beta冲刺--Day3

2020/05/30 这个作业属于哪个课程 2020春S班软件工程实践 这个作业要求在哪里 团队作业第六次——beta冲刺+事后诸葛亮 团队名称 云玩家$ 这个作业的目标 beta冲刺,测试和完善已有的项目 作业...

osc_sejhgcp0
54分钟前
23
0
vue3.0提前了解系列----一些普通用法和api的使用

今天给大家说说vue3.0 composition api里面一些剩余的普通api的使用 provide & inject provide和inject用于在一些高阶组件中常用,在2.x中也有一样的api那么在compositionapi中怎么用呢? 仅...

osc_kvcz9ju6
55分钟前
5
0
Beta冲刺--Day4

2020/05/31 这个作业属于哪个课程 2020春S班软件工程实践 这个作业要求在哪里 团队作业第六次——beta冲刺+事后诸葛亮 团队名称 云玩家$ 这个作业的目标 beta冲刺,测试和完善已有的项目 作业...

osc_ze3jj3wd
56分钟前
26
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部