`

利用servlet规范,一种实现动态路径的方法

阅读更多
最近在分析的这个产品是闭源的,所以它的特性都不知道是怎么实现的,只能看到了效果以后反向推测,好辛苦

一、特性描述

今天看到其中的一个特性是这样的:

这个系统是动态DDL的,当用户做了某些操作以后,会实时在数据库中建表。并且,无需重启,马上可以用浏览器访问一个新的URL,访问刚创建的这张表

比如新建了一个User表,就可以在浏览器里输入类似下面的URL来访问到:

http://ip:port/application/servlet/manage/UserTable

新建了Car表,可以用下面的URL访问到:

http://ip:port/application/servlet/manage/CarTable

二、实现原理

看到它的URL里有servlet字样,基本可以断定用的是JAVA平台(除非用URL骗我。。)

想了一下,有一个很简单的办法,可以实现这个功能。只需要用到servlet规范里的几个基本的特性

写了一段代码验证成功了,代码很简单就不贴了,只记录一下原理。主要用到的是servlet映射中的路径匹配,以及路径获取API

上面例子中的UserTable和CarTable我想都是假的,真正应该有一个类似于GetTable这样的servlet

然后在web.xml里配置一个路径匹配规则
<url-pattern>/servlet/manage/*</url-pattern>

这样的话,无论是上面的UserTable还是CarTable,实际上都会跳转到GetTable这个实际的servlet里

然后在这个servlet里,用
request.getPathInfo();

这个方法,就可以拿到/UserTable,或者/CarTable,之后再对字符串进行处理,就可以根据User和Car作为查询条件,到刚才新创建的表里取出数据,最后生成相应的页面返回给浏览器了

对于用户来说,他是看不到浏览器地址有任何变化的,所以对用户来说,这就是一个动态的URL

三、关键点

这种实现方式,非常重要的是最后的PathInfo必须有一个命名模式:

1、URL虽然是动态的,但是模式一样,都是/XXXTable。有了统一模式,才能从PathInfo中截取关键字,作为查询条件

2、截取出的关键字,必须和数据库表名有某种关联。我这种实现是比较粗糙的,等于将数据库表名直接作为URL关键字了。其实用主键,或者某个特殊字段也是可行的。总之URL解析只是链条的一环,整个系统必须要有一致的策略才行

四、HttpServletRequest跟路径有关的API

以http://ip:port/application/servlet/manage/UserTable?name=abc为例

request.getContextPath(),返回的是/application
request.getServletPath(),返回的是/servlet/manage
request.getPathInfo(),返回的是/UserTable

也就是说,首部是ContextPath,尾部是PathInfo,剩余中间所有是ServletPath。都以"/"开头;查询参数被忽略
分享到:
评论

相关推荐

    jsp+servlet+javaBean实现MVC

    在Java Web开发中,"jsp+servlet+javaBean实现MVC"是一种常见的设计模式,用于构建动态、数据驱动的Web应用程序。MVC(Model-View-Controller)模式旨在分离业务逻辑、用户界面和数据管理,使得代码更易于维护和扩展...

    Servlet3.1规范说明中文版_英文版.rar

    3. **WebSocket支持**:Servlet 3.1规范添加了对WebSocket协议的支持,提供了一种低延迟、双向通信的机制,使得客户端和服务器之间能进行实时数据交换,常用于实现聊天室、股票交易、在线游戏等实时应用。...

    servlet简单实现的MVC框架

    在这个"Servlet简单实现的MVC框架"中,我们看到开发者使用Servlet3.0规范来构建一个简易的MVC框架,并利用了反射和自定义注解等技术。 首先,我们需要理解Servlet3.0引入的一些关键特性。Servlet3.0支持注解驱动的...

    Jsp+Servlet+Echarts实现动态数据可视化完整版.rar

    本项目“Jsp+Servlet+Echarts实现动态数据可视化完整版”提供了一种基于Java Web技术栈的解决方案,具体包括JSP(JavaServer Pages)、Servlet和ECharts三个核心组件。 **JSP(JavaServer Pages)** JSP是Java的一...

    javaservlet帮助文档

    Java Servlet 是一种用于扩展Web服务器功能的Java技术,它是Java平台上的标准,允许开发者创建动态、交互式的HTTP服务。在本文中,我们将深入探讨Java Servlet的相关知识点,包括其概念、工作原理、生命周期、请求和...

    servlet程序设计引导

    2. **异步处理**:利用Servlet 3.0提供的异步处理功能来实现非阻塞的I/O操作。 3. **连接池**:使用连接池来管理数据库连接,避免频繁地打开和关闭连接。 通过以上介绍,我们可以看到Servlet为开发者提供了一个强大...

    servlet specification and api

    3. **WebSocket前向兼容**:虽然WebSocket协议是在Servlet 3.1中正式引入的,但Servlet 3.0已经为它的未来支持奠定了基础,提供了一种前向兼容的机制。 4. **过滤器链的改进**:可以使用`@WebFilter`注解定义多个...

    Web开发中文手册之Servlet3.1规范.zip

    WebSocket提供了一种双向通信机制,允许服务器和客户端实时交换数据,为实时应用如聊天室、游戏、股票交易等提供了便利。 四、注解配置 相比于之前的版本,Servlet3.1进一步增强了注解的使用,可以使用注解来声明...

    Java_Servlet教程(繁体)

    JavaServer Pages(JSP)是另一种常用的Java Web技术,它提供了更便捷的方式来编写动态网页。Servlet和JSP可以协同工作,Servlet处理业务逻辑,JSP负责呈现视图。 九、Servlet容器 Servlet运行在Servlet容器中,如...

    servlet-Ajax-jQuery学习手册

    而Ajax(Asynchronous JavaScript and XML)则是一种利用JavaScript在客户端实现异步数据交换的技术,它允许Web页面动态地更新,而无需重新加载整个页面。JQuery是一个快速、小巧、功能丰富的JavaScript库,它简化了...

    动态网页(JSP+Servlet)教程

    Servlet 是一种 Java 技术,允许开发者创建动态 Web 内容。Servlet 本质上是 Java 类,它们通过 HTTP 协议接收和响应客户端请求。 **3.2 HTTP基础知识** - **HTTP 请求、响应和头信息** - **请求**: 包括请求行、...

    利用tomcat和servlet进行简单开发所需的jar包

    Servlet是Java提供的一种用于扩展服务器功能的接口,它使得开发者可以在服务器端编写动态网页。本资源包主要围绕这三个核心概念:Tomcat、Servlet和c3p0连接池,来帮助开发者进行简单的Web应用开发。 首先,`c3p0`...

    servlet实现用户登录的小型服务器

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON字符串可能包含诸如“success”(表示登录是否成功)、“message”(提供反馈信息)等字段。 ...

    基于JSP+JavaBean+Servlet模式的图书管理系统的研究和实现

    JavaBean是一种符合特定规范的Java类,它封装了业务逻辑,可被JSP或其他Java组件重用。在图书管理系统的上下文中,JavaBean可能包含对图书数据的操作,如添加、删除、修改和查询等方法。通过在JSP页面中实例化和调用...

    尚硅谷——Servlet3.0

    在异步处理支持的具体实现中,开发者可以通过两种方式来启用异步特性:一种是通过web.xml配置文件,另一种则是通过注解。在web.xml中,需要为&lt;servlet&gt;和标签添加子标签并设置为true;而在注解中,则需要设置@Web...

    Servlet3.0

    Servlet3.0是Java EE平台中的一个重要里程碑,它在Servlet规范上引入了许多创新特性,极大地提高了Web应用的开发效率和性能。在这个版本中,重点强调了异步处理和反向Ajax的支持,这两个特性使得Web应用能够更加高效...

    Eclipse开发Servlet(2学时)

    Servlet是一种Java技术,用于扩展服务器的功能,通常用于构建动态web应用程序。Eclipse作为最受欢迎的Java开发工具之一,提供了强大的支持来简化Servlet的开发过程。 一、Servlet简介 Servlet是Java Servlet API...

    (JSP_JavaBean_Servlet).zip_Jsp/Servlet_javabean servlet_servlet

    其次,JavaBean是一种遵循特定规范的Java类,通常用于封装业务逻辑和数据。JavaBean具有良好的可重用性和可扩展性,可以被多个JSP或Servlet共享和调用。在本项目中,JavaBean可能包含了处理用户请求、管理数据和执行...

    java-servlet-api.doc

    Servlet引擎利用Java类载入工具载入一个Servlet,Servlet引擎可以从一个本地的文件系统、一个远程的文件系统以及网络载入Servlet。 Servlet的初始化 Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化...

    原生Servlet与Spring Controller性能比较--Servlet项目

    首先,原生Servlet是Java EE规范的一部分,它提供了一个基础的接口,用于接收和响应HTTP请求。开发者直接实现Servlet接口或继承HttpServlet类来创建自定义的处理逻辑。Servlet生命周期包括初始化、服务、销毁三个...

Global site tag (gtag.js) - Google Analytics