`
sunzhyng
  • 浏览: 59082 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts URLs for perfectionists

    博客分类:
  • Java
阅读更多


http://www.lunatech-research.com/archives/2005/07/29/struts-urls

 

Many web applications inelegantly expose themselves in their URLs. While ASP.NET applications tend to have an .aspx in the URL, Struts’ default configuration gives you a .do in your URL. It is possible to reconfigure a Struts web application that uses URLs like /customer.do?method=edit&id=42 to use something like /customer/edit/42 instead. This article covers several separate techniques that you can use for different parts of the URL.

Remove the .do

The first step is to remove the redundant .do from the URL. After all, MIME Content-type headers mean that web resources do not need ‘file extensions’ to indicate their type.

The .do is there to map certain URLs to the Struts ActionServlet, which is achieved by the following web.xml entries:

   

                action

                org.apache.struts.action.ActionServlet

        

        

                action

                *.do

        

The most obvious option is to replace the Servlet mapping’s extension mapping to a prefix mapping like /do*" type="com.example.web.{1}Action" parameter="{2}" />

The asterisks match paths like /customer/ or /customer/edit . The first downside is that if you want to have lower-case URLs then the action class needs to be called customerAction instead of CustomerAction - legal but unconventional. Still, I personally think it would be worse to include upper-case letters in the URL, although that is probably
unavoidable with form parameter names later on.

The second asterisk is something like ‘view’ or ‘edit’ - the DispatchAction method name. The standard approach is to say
parameter="method" in the action mapping and then specify the method in the URL with method=edit .

With the wildcards in the mapping, you can just get the method name from the URL and specify it in as the parameter directly by using parameter="{2}" in the mapping configuration. Then all you need to do is override the DispatchAction.getMethodName method with:

   protected String getMethodName(ActionMapping m, ActionForm f,

                HttpServletRequest req, HttpServletResponse res, String p) throws Exception

        {

                return parameter;

        }

This means that that Struts calls the method in your action class whose name is the parameter value in the action mapping, which in turn is the second part of the path.

Now you can use /customer/edit&id=42 instead of /customer?method=edit&id=42 .

An advantage of this scheme is that you can use the same wildcard parameters to specify the form name and the JSP path for forwards. For example, if you use the mapping:

   

                

        

Perfect.

分享到:
评论

相关推荐

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    The URL extension to use to determine if the request is meant for a Struts action 用URL扩展名来确定是否这个请求是被用作Struts action,其实也就是设置 action的后缀,例如login.do的'do'字。 struts....

    Struts2添加SSL功能

    4. **更新应用代码**:在Struts2应用中,可能需要更新URLs以强制所有请求通过HTTPS。这可以通过在Struts2配置文件(如struts.xml)中设置全局结果或使用过滤器实现。 5. **测试与监控**:完成配置后,进行彻底的...

    6_urlAndRoutes_for outgoing_urls

    本文将深入探讨这些概念,并结合"6_urlAndRoutes_for outgoing_urls"这个主题,来阐述如何有效地设计和使用URL及路由,特别是在 MVC(Model-View-Controller)架构中的应用。 首先,URL 是每个 Web 资源的唯一标识...

    chrome 插件 Allow access to file URLs

    AxureRP-extension-for-Chrome-0.6.2 Chrome Version 33.0.1750.146 m 因为众所周知的原因,此插件不能正常下载,但是可以通过离线安装 使用说明: 1 设置---更多工具--扩展程序 2 打开开发者模式 3 加载已解压的...

    ZenCart的优化插件ultimate_seo_urls的使用,以及站内优化

    ZenCart 优化插件 ultimate_seo_urls 的使用和站内优化 ZenCart 优化插件 ultimate_seo_urls 是一个强大的插件,它可以将 ZenCart 的 URL 静态化,从而提高网站的搜索引擎优化(SEO)。下面是使用 ultimate_seo_...

    urls_for_humans:将持久的、有意义的 url 应用于您的 Rails 应用程序

    Urls for Humans 是一个 gem,它允许您利用Model.find(params[:id]) 、 to_i和to_param发生的事情,为 Rails 应用程序的 url 应用有意义的名称。 这使得将users/1为users/1-john-otander 。 只要 url 以模型的id为...

    taglib(struts2标签).doc

    除此之外,Struts2 还提供了其他通用标签,如 Bean 标签用于操作 JavaBean 对象,URLs 标签用于生成 URL,Action 标签用于调用 Action 方法等。每个标签都有其特定的用途和参数,它们共同构成了 Struts2 标签库的...

    ultimate_seo_urls_2-109

    "Ultimate SEO URLs 2.109"是一个专门为Zen Cart电子商务平台设计的插件,其目标是将网站内部的动态URL转化为静态或伪静态形式,以提高搜索引擎的友好性。 Zen Cart是一款开源的电子商务购物车系统,它提供了一套...

    Zencart必备插件之ultimate_seo_urls(URL伪静态)

    "Ultimate SEO URLs"是Zencart的一个重要插件,专门用于解决这个问题。 Ultimate SEO URLs插件的核心功能在于提供URL重写机制,将原本复杂的动态URL转换为简洁、易于理解的静态化形式。这不仅提升了用户体验,也...

    ultimate_seo_urls

    "Ultimate SEO URLs" 是一款针对 ZenCart 电子商务平台的扩展插件,旨在优化网站的搜索引擎优化(SEO)性能。这个插件的核心目标是将传统的动态URL转化为静态、用户友好的格式,从而提高搜索引擎的抓取效率和用户...

    PyPI 官网下载 | d8s_urls-0.6.0-py2.py3-none-any.whl

    标题中的"PyPI 官网下载 | d8s_urls-0.6.0-py2.py3-none-any.whl"表明这是一个在Python Package Index (PyPI)官网上发布的软件包,名为`d8s_urls`,版本号为0.6.0。PyPI是Python社区最常用的第三方库分发平台,...

    Node.js-reachable-urls检查文本的网址是否可以访问

    本篇文章将深入探讨一个与Node.js相关的实用工具——`reachable-urls`,这是一个用于检查文本中网址可访问性的模块。 `reachable-urls`是Node.js开发的一个HTTP工具,它的主要功能是对给定文本中的URL进行扫描,并...

    zencartultimate_seo_urls安装说明.pdf

    zencartultimate_seo_urls安装说明.pdf

    Efficient summarization of URLs using CRC32 for implementing URL switching

    本文基于标题“Efficient summarization of URLs using CRC32 for implementing URL switching”及其描述,深入探讨了利用CRC32校验和算法进行URL总结与压缩的方法,以及其在实现URL切换中的应用。此外,通过对比...

    struts-2.1所有扎包打包

    与Struts 1相比,Struts 2在许多方面进行了改进,例如更好的类型安全、支持RESTful URLs、更丰富的插件生态系统等。 在Struts 2中,开发过程主要涉及以下几个关键概念: 1. **Action类**:这是处理用户请求的中心...

    Chrome插件-Copy All Urls优雅地保存-开启多个标签页.zip

    Chrome插件-Copy All Urls优雅地保存-开启多个标签页.zip。Copy All Urls属于小而美地工具,如果你每天都需要查看几个固定的网页, Copy All Urls能帮你省很多时间。

    Copy-All-Urls2.10:谷歌浏览器复制所有标签url网址插件

    资源内容:Copy-All-Urls_v2.10.crx。解决一次性复制谷歌浏览器所有标签网址的问题。释放双手。 使用方法:安装谷歌chrome浏览器》下载文件双击打开安装

    6_urlAndRoutes_for outgoing_urls(整篇博客源码)

    本文将深入探讨这两个概念,并结合标签“mvc”、“route”和“高级属性”,来解析“6_urlAndRoutes_for outgoing_urls”这个主题。源码提供了详细的学习材料,帮助读者更好地理解和应用这些概念。 首先,URL是...

    struts 国际

    7. **国际化URLs**:为了支持不同语言的URL,开发者可以使用参数或者路径片段来传递Locale信息,例如`/en/home.action`或`/home.action?lang=en`。 8. **Session和Cookie**:为了保持用户在浏览不同页面时的Locale...

Global site tag (gtag.js) - Google Analytics