代码之家  ›  专栏  ›  技术社区  ›  Ramon Marco L. Navarro

servlets中的javabean内省[tomcat]

  •  0
  • Ramon Marco L. Navarro  · 技术社区  · 17 年前

    与此等效的“servlet代码”是什么:

    <jsp:useBean id="user" class="beans.UserBean" scope="session"/>
    <jsp:setProperty name="user" property="*"/>
    

    Tomcat将此转换为:

    beans.UserBean user = null;
    synchronized (session) {
        user = (beans.UserBean) _jspx_page_context.getAttribute("user", PageContext.SESSION_SCOPE);
        if (user == null) {
            user = new beans.UserBean();
            _jspx_page_context.setAttribute("user", user, PageContext.SESSION_SCOPE);
        }
    }
    
    org.apache.jasper.runtime.JspRuntimeLibrary.introspect(_jspx_page_context.findAttribute("user"), request);
    

    难道没有其他方法可以轻易做到这一点吗?

    1 回复  |  直到 17 年前
        1
  •  1
  •   David Rabinowitz    17 年前

    每个jsp编译器将产生不同的结果。使用 commons beanutils 它看起来有点像

    for(Enumeration pnames = request.getParameterNames();pnames.hasMoreElements();) {
      String name = pnames.nextElement();
      BeanUtils.setProperty(bean,name,request.getParameter(name));
    }
    

    注意,它不处理数组和其他特殊情况。

    此外,这也是为什么通常使用Web框架,如 Spring , Struts , Wicket ,等等-这只是一个锅炉板代码,你必须编码你的验证无论如何。