问题标签 [requestdispatcher]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1471 浏览

jsp - 如何在不使用请求调度程序的情况下向 jsp 元素添加内容?

如果不使用表达式语言和请求调度程序,我想不出一种将内容发送到 JSP 元素的方法。问题是我无法使用 forward 方法更改浏览器 URL,这使得我的应用程序在用户看来很奇怪。那么如何<div>在不使用 EL 和/或请求调度程序的情况下将消息添加到 JSP 页面中的标记?

这是我的login.jsp页面:

这是我的登录 servlet,它映射到 web.xml 文件中名为 principal.jsp 的页面:

0 投票
2 回答
248 浏览

java - 就像我们构建乐高一样聚合 JSP 页面的最佳方式

经过多年基于 XML/XSLT 的开发后,我来到了 java 世界,我逐渐变得越来越怀疑 - 看起来我错过了 java web 应用程序构建思想中非常重要的东西。

当我们以 xslt 方式思考时,这就是我们构建布局的方式:我们将所需的所有数据聚合到一个 XML 文件中,该文件可以转换为 html 布局。

在一些说明性的基于 XML 的伪语言中,它可能看起来像这样:

我想这足以说明这个想法。所以,这就是我一直试图在 servlets/jsp 世界中实现的方法。毫不奇怪,这个问题归结为一个问题,我相信这是一个经典的 jsp 新手问题:“如何在 jsp 页面中包含 servlet 输出?”

正确的答案是(如果我错了,请纠正我)-我不应该。我应该使用请求链。据我了解(再次,如果我混淆事实,请纠正我)这意味着我应该调用 servletA,它将适当的数据放入当前请求,然后将其转发给 servletB,依此类推。最后,我们重定向到填充了所有属性的页面。

至于我,我至少可以说出这种方法的两个主要困难:

  • 我应该保持重定向的顺序。servletA 现在是否应该重定向到 servletB,或者某些不知道监督对象应该完成的工作。
  • 如果我们将所有内容存储在请求属性中,作为字符串,如果我们需要参数化 servletB 调用关于我们在 servletA 中获得的数据,我们必须提供一些繁琐的序列化/反序列化工作。

所以,我的问题是 -从几个不同的来源将数据添加到 JSP 页面的最佳方法是什么

对不起,如果这些问题对于经验丰富的 JSP 开发人员来说听起来很愚蠢,事实上 Java 世界确实非常庞大且成熟,因此找出真相并不总是那么容易。

0 投票
1 回答
8723 浏览

java - 通过 Java 过滤器后使用 RequestDispatcher 转发

首先让我描述一下我正在尝试做的事情,我猜这很简单。我有一个包含用户的网站,并且希望仅对已登录的用户访问 view_profile.jsp 页面。我有一个过滤器映射到:

看起来像这样

当用户在 index.jsp 页面上单击链接时,将运行此过滤器:

假设将用户带到映射到 ViewProfileServlet 的 servlet 映射到:

看起来像这样:

这反过来应该将用户带到 /view_profile.jsp(在根上下文中,而不是在 /auth 中)并工作,但事实并非如此。发生的情况是 ViewProfileServlet 运行并且 view_profile.jsp 显示,尽管上下文似乎仍然是 /auth,因为 view_profile.jsp 上的所有链接都指向 localhost:8080/auth/some-page.jsp。此外,没有加载 css 文件,甚至没有请求它们(至少根据 firebug),并且页面源显示 404 Glassfish 错误,其中 css 应该是。

我将非常感谢任何帮助,这是我第一次在 jsp 中做某事,我完全迷失在这里。

0 投票
1 回答
238 浏览

java - 如何从过滤器中确定哪个页面服务于 RequestDispatcher 的转发?

我有一个过滤器,它处理请求以记录它们,所以我可以跟踪哪个会话在什么时间用什么请求参数访问了一个页面。效果很好...从 jsp 发布到 jsp,或直接调用 jsp。但是,当将表单发布到将请求转发到新 jsp 的 servlet 时,我无法看到请求被转发到了哪个 jsp。

例如,假设我有一个登录页面,它发布到 LoginServlet,然后将请求转发到 index.jsp 或 index1.jsp。如何从请求中确定 LoginServlet 是返回 index.jsp 还是 index1.jsp?

这是在使用 2.3 servlet 规范的 java 1.5 环境中。

0 投票
2 回答
1797 浏览

java - 如何从过滤器中确定从 RequestDispatcher.forward 调用转发到哪个 jsp?

我有一个过滤器,它处理请求以记录它们,所以我可以跟踪哪个会话在什么时间用什么请求参数访问了一个页面。效果很好...从 jsp 发布到 jsp,或直接调用 jsp。但是,当将表单发布到将请求转发到新 jsp 的 servlet 时,我无法看到请求被转发到了哪个 jsp。

例如,假设我有一个登录页面,它发布到 LoginServlet,然后将请求转发到 index.jsp 或 index1.jsp。如何从请求中确定 LoginServlet 是返回 index.jsp 还是 index1.jsp?

这是在使用 2.3 servlet 规范的 java 1.5 环境中。

0 投票
2 回答
1466 浏览

jsp - Wicket 1.5 和 JSP/servlet 包装

在我正在进行的项目中,我们希望从 Wicket 1.4 升级到 1.5。经过一些工作,我们得到了大部分工作正常。

然而,一件主要的事情还没有奏效。需要将旧的 JSP/servlet 包装到新的基于 Wicket 的应用程序中,而旧的 1.4 方法不再起作用。

1.4 中简化的 html 输出

1.5 中简化的 html 输出

因此,所有JSP 内容都呈现在我们喜欢将其包装在.

包装魔法发生在我们的内部AbstractServletWrapperPanelWebMarkupContainer.onRender(MarkupStream markupStream)覆盖中。但是,在 Wicket 1.5 中我们无法调用markupStream.next(),因为它不再提供。我还没有找到解决这个问题的方法。

1.4 的工作代码,以示例面板实现作为参考:

在 1.5 版本中,我通过(HttpServletRequest)RequestCycle.get().getRequest().getContainerRequest()and获取请求和响应(HttpServletResponse)RequestCycle.get().getResponse().getContainerResponse()

然后我尝试:

  • markupStream.next()使用1.5 中不再提供 的 onRender()-magic
  • 把它移到onComponentTagBody(MarkupStream markupStream, ComponentTag tag)
    • 注意:要调用 onComponentTagBody() 我必须打开 wicket:container tag <wicket:container wicket:id="wrappedContentId"></wicket:container>。我也尝试过不调用markupStream.next(),因为该步骤是在调用Component.internalRenderComponent()之前执行的onComponentTagBody
  • 把它移到onComponentTag(ComponentTag tag)
  • 结合上面的setRenderBodyOnly(true)设置WebMarkupContatiner.onInitialize()
  • 使用<div>标签而不是wicket:container
  • 使用调试模式跟踪 1.5 的渲染过程。但是,我想我还是错过了新的 1.5 渲染组件方式的一些关键部分。

由于短期内无法将所有 JSP 功能迁移到 Wicket,因此目前这对我们来说是一个很好的选择。

作为参考,1.4 执行此操作的方法与我在文章jsp-and-wicket-sitting-in-a-treeWicket wiki中找到的方法非常相似

任何解决此问题的帮助将不胜感激!

[编辑]
在 TheStijn 提出建议后,我也尝试过调用getAssociatedMarkupStream()from ,onRender()但这会引发以下错误:org.apache.wicket.markup.MarkupNotFoundException: Markup of type 'html' for component '... AbstractServletWrapperPanel$1' not found.

0 投票
1 回答
993 浏览

jsp - 在表单中请求 Dispatcher

我在 jsp 文件中有一个表单,我用它来获取用户详细信息。单击提交按钮时,表单操作已设置为另一个 jsp 文件,其中详细信息插入到数据库中。但在此之前,只要用户输入用户 ID,就会有一个检查可用性按钮。单击按钮时,我希望控件与用户名一起转到另一个 jsp 页面作为参数。我正在检查可用性。我想将响应返回到上一个 jsp 文件。这可以使用“请求调度程序”来完成吗?如果是,有人可以解释请求调度程序的包含和转发方法。我已经尝试在网上搜索它。只有代码可用。我想知道这个请求调度程序是什么以及它是如何工作的。

0 投票
0 回答
961 浏览

java - 过滤器 Java EE 中的更改请求 URI

Request Dispatcher在 Filter 中使用了 a 来更改请求 URI,但是这个 Request Dispatcher 的问题是它破坏了 Filter 链。所以,在这个过滤器之后将被调用的过滤器不会被调用。

如果我使用发送重定向,则会调用过滤器,但 URL 会反映在浏览器中。

然后我尝试HttpRequestWrapper通过覆盖该getRequestURI()方法来更改 URI 的类,并且我已经编写了整个逻辑来更改 URI 并返回它。这个方法被调用并且 URL 确实被改变了。

但是,Tomcat 总是抛出 HTTP 404 错误。我也尝试过 GlassFish。

我不知道问题是什么。压倒一切是getRequestURI()正确的做法吗?

0 投票
1 回答
8396 浏览

java - 如何为 request.getRequestDispatcher() 指定 .JSP 文件的路径?

我对 request.getContextPath() 的含义感到困惑。我的文件布局如下:

MyPage.jsp我能够通过以下方式找到 JavaScript 和图像

由此我得出结论,${pageContext.request.contextPath}动态解析到“WebContent”文件夹,据我了解,无论它的名称是什么,这都会解析到这个文件夹。那是有效的。

但是,从所有这些中我得出结论,回到我的 .java 代码request.getContextPath()中也会动态解析为“WebContent”。但是当我尝试从 .java 代码转发到MyPage.jsp使用由 形成的字符串时request.getContextPath()+"/WEB-INF/JSP/MyPage.jsp",找不到 JSP;这会导致 404 错误 - “请求的资源 (/MyServer/WEB-INF/JSP/MyPage.jsp) 不可用”。如果我打电话"/WEB-INF/JSP/MyPage.jsp",我们将启动 JSP 页面。有人可以解释为什么预先挂起request.getContextPath()会导致失败,还有什么我应该使用的东西来确保 .JSP 的路径总是得到解决吗?

0 投票
2 回答
6601 浏览

java - 使用 RequestDispatcher 调用 servlet doGet() 方法

怎么可能调用doGet()方法RequestDispatcher

RequestDispatcher rd = sc.getRequestDispatcher("/CartServlet");
rd.forward(request, response);

此代码调用doPost()为默认操作。