`
yiminghe
  • 浏览: 1466378 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

url 映射问题

 
阅读更多

背景

 

url mapping 我最早知道是作为 java web 容器的一个功能点,遵从 servlet 规范 ,大致的形式是通过在配置文件中配置 url 路径和指定 servlet 的对应关系,当请求过来时根据 url 路径来调用相应的服务器端逻辑。

 

例如:

 

<servlet-mapping>
<servlet-name>milk</servlet-name>
<url-pattern>/drink/*</url-pattern>
</servlet-mapping>

 

那么凡是以 /drink/ 开头的 url 路径代表的请求都会被名为 milk 的servlet 处理,可以说 url 路径就是 web 上的方法名称。

 

后来出现了 jsp ,asp 简化了用户配置,基本上是约定优先配置,将 url 路径对应到文件系统的层次关系,url 请求转交给对应的 jsp、asp 代码文件执行。

 

如请求

 

 

/x/z/y.jsp

 

 

则该请求封装后会转交给 x 应用所在目录下 z 目录的 y.jsp 程序代码执行。

 

再往后出现了 struts ,spring 等 web 框架,可以更灵活的做路径分发(支持路径参数),更方便得支持 restful (这里根据 《restful 实战》特指超媒体服务成熟程度模型的第一层: restful url ).,例如 spring3 mvc 可以用注解实现请求路径和函数的对应:

 

 

@RequestMapping("/x/y/{id}") 
public  String  z(@PathParam String id,
@RequestParam String q
) {
}
 

那么当请求

 

/x/y/1?q=2

 

路径以及查询部分的参数会注入到对应的函数中,相对于早期的 servlet 规范开发效率以及可维护性/可读性都有很大的提升。

 

 

前端 mvc

 

随着单页面应用的日益普遍,mvc 分层在前端也越来越多得出现,而其中一点就是:在单页面应用中如何 bookmark,可以像多页面时一样随时记录当前的状态,早期一般用 url hash 来记录,而 html5 history api 则提供了更优雅的解决方案,而这也就不可避免得要将传统由服务器端实现的 router 也要在客户端实现一边,甚至服务器端完全不需要 router,只提供统一数据访问入口(但不符合 http 协议的初衷)。

 

功能需求

 

router 一般要能达到:

 

1. 路由功能

 

可以根据指定的规则,将对应的客户端 hash/url 映射到指定的函数

 

例如片段匹配:

 

/x/y/:id : fn

 

可以匹配 /x/y/z 以及 /x/y/a 到 fn 函数上,但不能匹配 /x/y/z/a

 

再如整段路径匹配

 

/x/y/*path : fn
 

可以匹配 /x/y/z 以及 /x/y/z/a 到 fn 函数,即凡是以 /x/y/ 开头的都可匹配。

 

更进一步,规则可以达到最优匹配,譬如请求:

 

/x/y

 

既可以匹配规则1:

 

/x/:id

 

又可以匹配规则2:

 

/*path

 

那么最优匹配的结果应该是模糊信息最少的匹配(规则1),而后一种通常作为一种异常处理机制(404)。

 

2.参数抽取功能

 

将路径匹配到对应的路由规则是第一步,第二步则是根据规则抽取路径上附带的用户信息,交给对应处理逻辑,用户信息可以由两种方式传递给用户

 

2.1 路径参数(path param)

 

指包含在查询标记(?)之前的参数,如 /x/:id 可以匹配到 /x/y?q=1 那么 id 即为 y

 

2.2 请求/查询参数(request param)

 

即通常服务端通过 request.getParameter 以及客户端通过 location.query 获取到的查询信息.

 

然后同样可以通过参数注入到指定的处理函数,但由于客户端 js 代码会经过压缩,变量名和规则配置名部署阶段会有不一致情况,虽然也可以根据参数位置进行匹配:

 

/x/:id - > fn(id)
 

 

但这种情况下,规则参数配置的变化会连带需要处理函数参数位置的调整。

 

更好的做法则是将参数与参数值作为键值对传递给对应的处理函数

 

 

/x/:id -> fn(pathParam,queryPatam) // pathParam => { id: xx }
 

 

最终在客户端实现router功能后,用户可以随时将单页面应用当前的状态作为地址保存下来,随后再输入地址经过客户端router 后还原对应的应用状态,达到和多页面时类似的效果,只不过这时 router 的功能从后端转移到了前端。

 

 

 

Refer :

 

KISSY MVC

 

spring3 mvc

 

 

 

分享到:
评论

相关推荐

    ASP.NET 2.0的URL映射的实现方法

    ### ASP.NET 2.0中的URL映射实现方法详解 #### 概述 在ASP.NET 2.0中,引入了一项重要的新功能——URL映射(URL ...随着对这一特性的深入了解和应用,开发者将能够更好地利用URL映射来解决实际问题,提高工作效率。

    Spring简单URL映射例子

    在Spring MVC框架中,URL映射是连接前端请求与后端处理逻辑的关键步骤。这个"Spring简单URL映射例子"展示了如何配置并使用URL映射来处理HTTP GET请求,同时展示如何获取并处理GET方式传递的参数。让我们深入探讨这个...

    url映射(2.0)

    在ASP.NET 2.0中,URL映射是一项重要的功能,它允许开发者创建用户友好的、可搜索引擎优化(SEO)的URL,同时隐藏了实际的处理逻辑和文件结构。这项技术对于提高网站的用户体验和搜索引擎排名有着显著的效果。在本文...

    asp.net 2.0 URL 映射 实例

    ASP.NET 2.0 URL映射是一个核心特性,它允许开发者创建更加用户友好的和搜索引擎优化(SEO)的URL,而不是传统的ASP.NET处理程序或页面的路径。这一特性通过使用`Route`类来实现,它使得应用程序能够将HTTP请求与...

    SpringMVC入门很简单之URL映射规则

    这个过程就涉及到URL映射。 URL映射规则在SpringMVC中主要通过`@RequestMapping`注解来实现。这个注解可以应用在类级别或方法级别,提供了多种方式来定义URL路径。 1. 类级别的`@RequestMapping`:此注解应用于...

    URL映射asp很好的实现url重写

    5. **简化迁移过程**:在网站迁移到新平台或服务器时,URL映射可以帮助快速调整路径,减少迁移过程中可能出现的问题。 #### 四、总结 综上所述,URL映射作为ASP.NET 2.0的一项重要特性,在提高用户体验、降低维护...

    CCF资格认证题库历年真题,URL映射

    CCF认证考试历年真题,URL映射,得分100。URL 映射是诸如 Django、Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件。对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 URL 地址,并将其分派给...

    使用URL映射地址导航Web页面

    URL映射是将友好的、可读性强的URL与实际服务器上的文件路径或处理程序进行关联的过程。这种技术在现代Web应用程序中广泛使用,为用户提供更直观、更易于记忆的链接,同时也有助于搜索引擎优化(SEO)。本文将深入...

    springmvc所有方法url映射获取

    通过重写dispatcherservlet的一个doservice方法把springmvc的url对应方法打印出来。 所需要做的是: 1,使用本文件作为原先springmvc的xml文件的dispatcherservlet。 2,启动项目,随意发送一个请求,可以在控制台...

    django中url映射规则和服务端响应顺序的实现

    ### Django中的URL映射规则和服务端响应顺序的实现 #### 一、理解Django的URL映射机制 在Django框架中,URL映射是非常重要的一个环节,它负责将用户的请求映射到相应的视图函数上。对于Django开发者而言,掌握URL...

    Qt+Cutelyst学习笔记(十)Qt5.15.2添加一个Url映射 示例源码

    Qt+Cutelyst学习笔记(十)Qt5.15.2添加一个Url映射 示例源码 https://blog.csdn.net/aggs1990/article/details/123892797 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下

    ASP.NET实现URL映射的方法

    通过URL映射,开发者可以隐藏实际的页面路径,重写URL,使其更符合SEO(搜索引擎优化)标准,甚至解决旧链接与新内容之间的兼容问题。 在ASP.NET中,URL映射是通过`&lt;urlMappings&gt;`配置节来实现的,位于Web.config...

    react-Redux中间件用于直观地将url映射到状态

    本文将深入探讨如何使用Redux中间件来直观地将URL映射到状态,以及在React应用中如何实现这一功能。 首先,让我们理解`react-redux`库的作用。它提供了React组件与Redux store的连接,使得我们可以方便地在React...

    url静态映射及回发处理

    为了解决这个问题,开发者引入了URL静态映射。静态URL看起来像是指向一个实际存在的文件或目录,如"/products/shoes",但实际上它们可能仍然由服务器动态生成内容。这种映射技术允许我们用更直观、友好的URL来隐藏...

    win2008 IIS7无后缀URL部署问题 MVC4 MVC URL映射

    结果悲剧了.windows server 2008 R2 上用的是IIS7,无法识别没有后缀的URL重定向.网上狂找.很多人会说这个问题很常见啊网上的资料很多啊.其实不然.今天我要给出大家这个问题的最官方的解决办法.  扯淡结束.先说问题....

    Java URL映射器 v2.0 RC1.zip

    Java URL映射器 v2.0 RC1

    Django如何将URL映射到视图

    在Django中,URL映射到视图是整个框架处理Web请求的核心部分。URLconf(URL配置)是用于将URL与视图函数关联的机制。当用户请求一个页面时,Django会通过URLconf解析这个URL,从而找到对应的视图函数来处理这个请求...

    查询映射查询映射查询映射查询映射查询映射查询

    GET请求的参数可见且直接包含在URL中,这使得它易于分享和书签,但同时也限制了参数的长度,并且可能导致安全问题,因为所有信息都是明文传输的。 相反,POST方法将查询参数隐藏在HTTP头中,不显示在URL上。比如在...

    slugify-url:将 url 映射到可用作文件名的简化字符串

    slugify-url 将 url 映射到一个经过清理的字符串,该字符串可以用作文件名并作为原始 url 的良好助记符,即使它是不可逆的 描述 如果从 URL(http:// 或 https:// 或 ://:@ )中提供部分,它会跳过协议和用户/密码 ...

Global site tag (gtag.js) - Google Analytics