我的 Web 应用程序是使用Spark 框架创建的 (在与服务器相同的页面上连接),第一页的 url 是http://localhost:4567/start 从这里用户单击一个按钮来决定四个任务之一。表单操作按钮是 /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(这在路由中映射),它调用方法,然后将页面内容作为字符串返回并修改 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
});
但我有两个问题
- 这种更麻烦的方法是正确的方法吗
- 这些额外的重定向步骤会影响性能吗
注意我没有使用模板,而是使用j2html创建网页
我无法在第一次调用中直接重定向到 html 文件,因为 html 实际上并不存在,页面是动态创建的。
我也意识到,虽然当我从 START 页面提交启动任务时,我提交了一个 POST 请求,因为我正在重定向到 STARTFIXSONGS,这意味着在下一阶段用户可以使用 BACK 按钮返回到 STARTFIXSONGS。我希望他们不能这样做,所以这是否意味着在这种情况下我不应该使用重定向。