multithreading之自定义 JSP 标签是否被多线程访问

bluestorm 阅读:19 2024-10-24 08:47:37 评论:0

我有一个简单的自定义 JSP 标记,定义如下:

public class SimpleTag extends TagSupport { 
    private static final long serialVersionUID = 1L; 
 
    private String var; 
    private Map<String, String> data = new HashMap<String, String>(); 
 
    public String getVar() { 
        return var; 
    } 
 
    public void setVar(String var) { 
        this.var = var; 
    } 
 
    @Override 
    public int doStartTag() throws JspException { 
        populateData(); 
        pageContext.setAttribute(var, data); 
        return EVAL_BODY_INCLUDE; 
    } 
 
    @Override 
    public int doEndTag() throws JspException { 
        pageContext.setAttribute(var, null); 
        return EVAL_PAGE; 
    } 
 
    private void populateData() { 
        // add data to "data" map 
    } 
} 

我将 hashmap 暴露给标签体。

标签会被容器重用(缓存/池化)还是被多线程访问?我需要在标签设计中格外小心吗?

如果它太基础了,我深表歉意。我的搜索一直没有成功。提前致谢。

请您参考如下方法:

Classic Tag Handlers 可以合并或不合并,具体取决于容器;
根据规范 (http://download.oracle.com/otn-pub/jcp/jsp-2_3-mrel2-eval-spec/JSP2.3MR.pdf)

,无法合并简单标签处理程序

但无论如何,不​​应该有任何线程问题,因为处理程序应该一次只处理一个请求:

Clarify that a tag handler instance is actively processing only one request at a time; this happens naturally if the tag handler is instantiated afresh through new() invocations, but it requires spelling once tag handler pooling is introduced. This clarification affected Chapter JSP.13.


标签:多线程
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号