web Java spark应用程序的正确url流

web Java spark应用程序的正确url流,web,spark-framework,Web,Spark Framework,我的web应用程序是用 (与服务器在同一页上连接)第一页的url为 从这里,用户点击一个按钮来决定四项任务中的一项。 表单操作按钮为/start 服务器检查一切是否正常,然后从页面返回此任务的新页面(例如fixsongs)(即以字符串形式返回页面内容) post(RoutePath.START, (request, response) -> new ServerStart().processRoute(request, response));//User has picked

我的web应用程序是用 (与服务器在同一页上连接)第一页的url为 从这里,用户点击一个按钮来决定四项任务中的一项。 表单操作按钮为/start

服务器检查一切是否正常,然后从页面返回此任务的新页面(例如fixsongs)(即以字符串形式返回页面内容)

post(RoutePath.START, (request, response)       -> new ServerStart().processRoute(request, response));//User has picked task on start page

ServerFixSongs ssfs = new ServerFixSongs();
path(RoutePath.STARTFIXSONGS, () ->
{
    //Display Page
    post(RoutePath.FIX,             (request, response) -> ssfs.startTask(request, response)); //User submits form on Options page
}); 
问题是url保持不变,即用户所在位置后面有一个

现在我已经解决了这个问题,而不是服务器返回页面 它现在重定向到/fixsongs.go(这在routes中映射),调用方法,然后以字符串形式返回页面内容并修改url

post(RoutePath.START, (request, response)       -> new ServerStart().processRoute(request, response));//User has picked task on start page
ServerFixSongs ssfs = new ServerFixSongs();
path(RoutePath.STARTFIXSONGS, () ->
{
    get(RoutePath.GO,               (request, response) -> new FixSongsPage(request.session().attribute(FOLDER)).createPage(null, null)); //Display Page
    post(RoutePath.FIX,             (request, response) -> ssfs.startTask(request, response)); //User submits form on Options page
});   
但我有两个问题

  • 这种更麻烦的方法是正确的方法吗
  • 这些额外的重定向步骤是否会影响性能
  • 注意,我不是使用模板,而是使用

    我无法在第一次调用中直接重定向到html文件,因为html实际上不存在,页面是动态创建的


    我还意识到,虽然当我从起始页提交开始任务时,我提交了一个POST请求,因为我重定向到STARTFIXSONGS,这意味着在下一阶段用户可以使用“后退”按钮返回STARTFIXSONGS。我希望他们不能这样做,那么这是否意味着在这种情况下我不应该使用重定向。

    您的问题实际上与Spark或j2html无关,而是与一般的web应用程序有关

    这种更麻烦的方法是正确的方法吗

    这取决于你想要什么。如果希望用户能够使用浏览器按钮进行导航,请使用后重定向获取流。如果您不想这样做,您可能应该使用,在这里您使用JavaScript发布到服务器,服务器会给出更新DOM的说明(通常是JSON格式)

    这些额外的重定向步骤是否会影响性能


    这还不足以让你担心。你还可以得到一次往返,但在99.9%的情况下,这并不重要。如果您的目标用户群在另一个大陆上使用GPRS浏览您的页面,则会这样做,但情况可能并非如此。

    谢谢,他们不需要使用浏览器按钮来导航,但如果他们使用浏览器按钮,我希望其行为合乎逻辑,更重要的是,我认为显示的任务应该代表当前任务,而不是前一个任务。虽然这个问题在某种程度上是一个一般性问题,但我发现,了解Spark(或JavaWebAPS)如何工作的人提供的答案比php专家ecetera提供的答案对我来说更有意义。所以我认为在这种情况下,我做了正确的事。