Tomcat 7.0.23 не работает с библиотеками тегов

Я скачал последнюю версию tomcat 7, т.е. 7.0.23, от 16.01.2011. Я обнаружил, что ни один из компонентов моей библиотеки тегов jakarta не работает в jsps. Точка отказа одинакова и постоянна в каждом JSP. это

org.apache.taglibs.input.Select _jspx_th_input_005fselect_005f0 = (org.apache.taglibs.input.Select)_jsp_instancemanager.newInstance("org.apache.taglibs.input.Select", this.getClass().getClassLoader());

Я также написал собственный тег, чтобы увидеть, работает ли он, у меня была такая же проблема и с этим jsp.

com.ah.util.customtags.SelectTag _jspx_th_hirezon_005fform_005fselect_005f0 = (com.ah.util.customtags.SelectTag)_jsp_instancemanager.newInstance("com.ah.util.customtags.SelectTag", this.getClass().getClassLoader());

JSP-код

<%@ page extends="com.ah.servlets.BaseJSPServlet"%>
<%@ taglib uri="/WEB-INF/hirezon_form.tld" prefix="hirezon_form" %>
<html>
<body>Test tags
<%
System.setProperty("org.apache.jasper.Constants.USE_INSTANCE_MANAGER_FOR_TAGS", "true");
%>
<hirezon_form:select count="100"/>
</body>
</html>

Код для класса CustomTagSupport:

package com.ah.util.customtags;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class SelectTag extends TagSupport {

    String count;
    public String getCount() {
        return count;
    }
    public void setCount(String count) {
        this.count = count;
    }
    public int doStartTag() throws JspException {
        // This means the JSP must evaluate the contents of any CHild tags
        // in this tag;
        return EVAL_BODY_INCLUDE;
    }
    // This method is called when the JSP encounters the end of te tag
    // implemented by this class
    public int doEndTag() throws JspException {

        String sum = "200000";
        try {
            pageContext.getOut().write("The Sum of first " + count + " numbers is " + sum);
        } catch (IOException e) {
            throw new JspException("Fatal Error: HelloTag could'nt write to the JSP out");
        }
        // This return type tells the JSP page to continue processing
        // the rest of the page
        return EVAL_PAGE;
    }
}

Есть ли известная ошибка в Tomcat 7.0.23? Я провел много исследований, а также попытался установить для свойства USE_INSTANCE_MANAGER_FOR_TAGS значение true, но все равно получаю ту же ошибку. Любые предложения будут оценены, спасибо


person Adithya Puram    schedule 16.01.2012    source источник


Ответы (1)


Я понял проблему, это был мой jsp. JSP расширяет сервлет BaseJSPServlet. По умолчанию, когда класс Java создается для jsp, он расширяет org.apache.jasper.runtime.HttpJspBase, но когда вы добавляете директиву расширения страницы, ваш класс Java будет расширять упомянутый вами класс вместо org.apache.jasper. время выполнения.HttpJspBase. Поэтому вам нужно убедиться, что ваш родительский класс делает почти то же, что и класс HttpJspBase.

Вот пример кода родительского класса, который можно расширить в jsp с помощью директивы page extends.

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.HttpJspPage;
import org.apache.jasper.compiler.Localizer;

public abstract class BaseJSPServlet2 implements javax.servlet.jsp.HttpJspPage

{
  private static final long serialVersionUID = 1L;

  public final void init(ServletConfig config)
    throws ServletException
  {
    super.init(config);
    jspInit();
    _jspInit();
  }

  public String getServletInfo()
  {
    return Localizer.getMessage("jsp.engine.info");
  }

  public final void destroy()
  {
    jspDestroy();
    _jspDestroy();
  }

  public final void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
  {
    _jspService(request, response);
  }

  public void jspInit()
  {
  }

  public void _jspInit()
  {
  }

  public void jspDestroy()
  {
  }

  protected void _jspDestroy()
  {
  }

  public abstract void _jspService(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse)
    throws ServletException, IOException;

}
person Adithya Puram    schedule 17.01.2012