【问题标题】:what is a good pattern for serving a web page given a HttpServletRequest?在给定 HttpServletRequest 的情况下,为网页提供服务的好模式是什么?
【发布时间】:2012-05-25 04:03:15
【问题描述】:

我创建了一个抽象基类Page,它知道如何构建动态网页。我试图想出一个好方法来根据GET 请求生成Page,该请求以HttpServletRequest 的形式出现。比如……

public class RootServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) {

        Page page = Page.generatePage(request);

        // do stuff with page and write back response
    }
}

generatePage() 方法中,我必须以某种方式找出正在请求的页面,构建正确的页面,然后返回它的实例。但是我不确定如何做好这件事......例如,我需要处理这些类型的 URL:

http://example.com/       : build the default home page
http://example.com/ab123  : build the page corresponding to the given token "ab123"
http://example.com/about/ : build the "about" page
http://help.example.com/  : build the "help" page

这些“页面”中的每一个都扩展了抽象基类Page,因此他们知道如何构建自己,但我不确定如何确定需要构建AboutPage,还是HelpPage,而不是默认的HomePage

我使用Apache Velocity 作为模板引擎,所以这些Page 对象实际上只包含生成该页面所需的重要信息,例如要使用的样式和脚本,以及要在页面上显示的相关内容页面。

我认为有更好的方法来做到这一点,而不是查看 URL 的末尾并查看“about”是否是构建AboutPage 的子字符串,例如。有什么建议么?

【问题讨论】:

    标签: java velocity dynamic-pages


    【解决方案1】:

    有几十个现成的工具框架可以为您做到这一点。至少我建议 Spring MVC 可以使用速度。

    【讨论】:

    • 如果你不喜欢春天还有其他的:velocity.apache.org/engine/devel/webapps.html 只是不要重新发明轮子;-)
    • 我绝对不想重新发明轮子,这就是我来这里的原因;)我已经利用了你在这里分享的链接......我想我有一些东西我错过/误解了
    • 您遗漏了什么/误解了什么?在一天结束时,something 必须查看 url 并决定如何路由它。这些框架都处理一些基本的东西:将 url 路由到控制器/视图就是其中之一。您选择哪一个取决于您的要求和个人喜好。他们都很好。 Spring MVC 可能是最受欢迎的,因为它非常强大,但学习曲线陡峭。 Struts 也非常流行且易于使用。我没有使用该页面上的其他人...
    • 我缺少的是 Struts :D 在撰写这篇文章时,我不了解 Velocity Struts,我打算自己执行“查看 URL 并决定做什么”的逻辑...但这些框架似乎已经解决了这一问题。
    【解决方案2】:

    Spring MVC 有一个很好的方法来处理这类事情,使用带有注释方法的控制器来处理您想要的特定模式。

    他们在这里有一个很棒的示例应用程序:

    https://github.com/SpringSource/spring-mvc-showcase

    无论如何,使用 java 代码构建页面并不是一个好习惯。

    【讨论】:

    • 当我说“构建”页面时,我的意思是每个Page 对象都会生成适当的VelocityContext,用于填充模板。所以你仍然认为这是不好的做法吗?不过我肯定会看看 Spring MVC!
    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2014-12-22
    • 2011-04-10
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多