gpt4 book ai didi

java - 如何访问自定义 taglib Java 类中的 JSP 隐式对象?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:51:03 25 4
gpt4 key购买 nike

我在这里检查了有关标签库和隐式对象的各种问题。虽然许多答案都提出了有趣的想法,但我一直没能找到直接回答这个问题的答案。

为了说明我的困境,假设我有一个实现 javax.servlet.jsp.tagext.Tag 接口(interface)的 Java 类...

import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;

class MyTag implements Tag {
private PageContext _pageContext;

public void setPageContext(PageContext pageContext) {
_pageContext = pageContext;
}
.
.
.

这使我可以访问 PageContext 对象,该对象提供有关调用 JSP 的一些有用信息。问题是,PageContext 似乎不提供对许多 JSP 的实际隐式对象的访问...

.
.
.
public int doEndTag() throws JspException {
ServletRequest req = _pageContext.getRequest();
.
.
.
return EVAL_PAGE;
}

上面描述的ServletRequest对象与HttpServletRequest有很大的不同,HttpServletRequest是通过JSP本身隐含的对象“request”来实现的。这使得在我的类中调用像 HttpServletRequest.getRequestURI() 这样方便的方法有问题。

因此,从这里阅读其他几个问题的答案后,我留下的印象是没有开箱即用的方法来获取实际的隐式对象。我要么必须将它们作为自定义标记的属性显式传递到我的 JSP 中......

<mc:mytag request="<%=request%>"/>

...或者可能将它们存储在我确实有权访问的其他隐式对象的散列中...

<% session.setAttribute("request", request); %>

哪个,如果是真的,自然会引出我的问题...你他妈的在开玩笑吗??我一定错过了一些关键的东西。访问 JSP 的隐式对象对我来说似乎是在我的自定义 taglib 类中想要的相当普遍的事情。每次我需要时都必须采取这样的步骤,这让我觉得非常笨拙——尤其是当我被传递给像 PageContext 对象这样的东西时,可以想象它可以为我提供它们,但似乎没有。

我真的觉得我在这里缺少一些基本的东西,但我终究无法弄清楚那可能是什么。有人可以阐明这一点吗?

最佳答案

PageContext 确实让您可以访问当前的HttpServletRequest,您只需要转换它:

HttpServletRequest req = (HttpServletRequest )_pageContext.getRequest();

这不是很好,但可以追溯到人们认为 Servlet API 中可能有一天会出现非 HTTP 内容的时代。

至于术语“隐式对象”的使用,这仅在 JSP 页面本身的上下文中才有意义。除此以外,该术语没有任何意义。表示当前 HttpServletRequest 的“隐式对象”与您从 PageContext 获得的对象相同。

关于java - 如何访问自定义 taglib Java 类中的 JSP 隐式对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4165333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com