0

我有一个带有单个页面的 struts2 应用程序,该页面可能显示存储在数据库中的多个值之一。该申请适用于拥有许多部门的学校,每个部门都有许多课程。使用这样的 url 访问部门页面

department.action?id=2

DepartmentAction 将加载 id = 2 的部门进行显示。如果用户只是浏览网站,这一切都很好,但如果我想在报纸上提供一个链接来说明工程部门,就会感到不舒服。该链接必须是 www.myschooldomain.com/department.action?id=2。我看到这有很多问题。

首先,它对用户不友好。其次,容易被破坏,因为部门是动态维护的,一个部门的id可能会在没有警告的情况下更改,导致链接不稳定。

我更喜欢打印这样的网址:www.myschooldomain.com/department/engineering 并以某种方式转到 department.action?id=2。

到目前为止,我的想法是:创建一个动作,在末尾解析部门名称的 url,然后按名称查找。也许我可以为每个部门的数据库添加一个friendlyurl 字段。

但问题是:在struts2中有没有更好的方法来做到这一点?

谢谢。

更新(2009 年 5 月):我碰巧偶然发现了这个问题,并认为我会说出我为解决它所做的工作。

我在 struts.xml 中创建了一个名为部门的新包。在这个包中,只有一个动作映射到 *. 因此它会捕获对 mydomain.com/departments/anything.html 的所有请求。

在操作类中,我只是解析 url 并查找部门/ 和 .html 之间的部分,这是部门的名称,因此我可以在数据库中查找它。这已经运行了将近 5 个月,我已经在网站的其他区域实施了它。

4

2 回答 2

3

您可以使用URL 重写过滤器

这避免了对任何其他 servlet 或 Java 代码的需要,但需要 XML 描述符。

于 2009-04-08T12:53:53.230 回答
1

这通常通过将 servlet 映射到(在您的情况下为“/department”),然后使用 servlet 中的路径信息(例如,“/engineering”)来确定 ID 来完成。

由于 Struts2 调度程序没有实现这种行为,因此编写自己的 servlet 可能是最简单的。此 servlet 将配置有有效“友好”名称到不友好数字标识符的映射。这可以是实际的Map,也可以使用数据库查找器方法来完成。

的结果getPathInfo()将用于查找 ID,并将请求转发到 department.action。也处理这种null情况,这意味着用户正在尝试浏览/departments/目录。

于 2008-10-22T17:47:55.717 回答