multithreading之自定义 JSP 标签是否被多线程访问
我有一个简单的自定义 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.作者投稿可能会经我们编辑修改或补充。