Syn*_*dog 3 java jsp servlets jsp-tags
我在这里研究了关于taglib和隐含对象的各种问题.虽然许多答案都提出了有趣的想法,但我找不到直接回答这个问题的答案.
为了说明我的困境,我说有一个实现javax.servlet.jsp.tagext.Tag接口的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;
}
.
.
.
Run Code Online (Sandbox Code Playgroud)
这使我可以访问PageContext对象,该对象提供了有关调用JSP的一些有用信息.问题是,PageContext似乎没有提供对许多JSP的实际隐式对象的访问...
.
.
.
public int doEndTag() throws JspException {
ServletRequest req = _pageContext.getRequest();
.
.
.
return EVAL_PAGE;
}
Run Code Online (Sandbox Code Playgroud)
上面描述的ServletRequest对象与HttpServletRequest完全不同,HttpServletRequest由JSP本身中的隐式对象"request"实现.这使得在我的类中调用像HttpServletRequest.getRequestURI()这样的方便的方法是有问题的.
因此,通过阅读这里的其他几个问题的答案,我留下的印象是,没有开箱即用的方法来获取实际的隐含对象.我要么必须在JSP中明确地将它们作为自定义标记的属性传递...
<mc:mytag request="<%=request%>"/>
Run Code Online (Sandbox Code Playgroud)
......或许它们存储在其他一些隐含对象我的散列做访问...
<% session.setAttribute("request", request); %>
Run Code Online (Sandbox Code Playgroud)
哪个,如果是真的,自然会引出我的问题...... 你是不是在开玩笑吧? 必须有一些我在这里缺少的关键.在我的自定义taglib类中,访问JSP的隐式对象似乎是一件相当普遍的事情.每次我需要这些步骤时都必须采取这些步骤,这让我感到非常愚蠢 - 特别是当我被传递给像我这样可能为他提供的PageContext对象时,但似乎没有.
我真的觉得我在这里缺少一些基本的东西,但我不能为我的生活找出可能的东西.有人可以对此有所了解吗?
ska*_*man 10
在PageContext
不给你访问到目前HttpServletRequest
,你只需要投它:
HttpServletRequest req = (HttpServletRequest )_pageContext.getRequest();
Run Code Online (Sandbox Code Playgroud)
这不是很好,但可以追溯到人们认为有一天可能会在Servlet API中出现非HTTP内容的时候.
至于术语"隐式对象"的使用,这仅在JSP页面本身的上下文中有意义.除此之外,这个词没有任何意义.表示当前的"隐含对象" HttpServletRequest
与从中获取的对象相同PageContext
.
归档时间: |
|
查看次数: |
4052 次 |
最近记录: |