[prev in list] [next in list] [prev in thread] [next in thread] 

List:       tomcat-user
Subject:    Re: jsp to servlet
From:       Christopher Schultz <chris () christopherschultz ! net>
Date:       2015-10-28 14:36:21
Message-ID: 5630DD65.3000706 () christopherschultz ! net
[Download RAW message or body]



On 10/28/15 4:27 AM, Суржин Константин Вадимович wrote:
> > You are asking for a bean with the class name "Animal", and the JSP compiler \
> > and/or runtime >can't find it. I'm guessing you meant to use "org.animal.Animal" \
> > here?
> 
> <jsp:useBean id="animalBean_1" class="org.animal.Animal" scope="session">
> 
> JSP  compiler produce next servlet code:
> org.animal.Animal animalBean_1 = new org.animal.Animal();
> 
> It's OK without  import directive.
> 
> Or 
> 
> <%@page import="org.animal.Animal"%>
> <jsp:useBean id="animalBean_1" type="Animal" beanName="org.animal.Animal" \
> scope="session"> 
> JSP  compiler produce next servlet code:
> Animal animalBean_1 = (Animal) \
> java.beans.Beans.instantiate(this.getClass().getClassLoader(), \
> "org.animal.Animal"); 
> And (ClassLoader) the JSP compiler and/or runtime  can find Animal.class
> 
> But:
> <%@page import="org.animal.Animal"%>
> <jsp:useBean id="animalBean_1" class="Animal" scope="session">
> 
> But in this case JSP  compiler produce of different servlet code
> Animal animalBean_1  = (Animal) \
> java.beans.Beans.instantiate(this.getClass().getClassLoader(), "Animal"); 
> The method instantiate(...,...) does not have a fully qualified name of Animal and \
> It's does not work. 
> And (ClassLoader) the JSP compiler and/or runtime TomCat or GlassFish can't find \
> Animal class in /WEB-INF/classes/org/animal/ 
> So, directive <%@page import="org.animal.Animal"%> has no effect here and 
> beanName="" or class="" org.animal.Animal" cannot be short.
> Only fully qualified class name acceptable.
> Maybe it's a bug.

No, it's not:

http://www.oracle.com/technetwork/java/syntaxref12-149806.pdf

The spec for <jsp:useBean> is that both "type" and "class" attributes
should be specified as "package.Class" and not "Class" with an import. I
think the package name is required, regardless of any page imports.

> But FAQ writes:
> ======================
> Make sure:
> 
> Your bean is packaged in a class.
> You have fully qualified your class name (e.g.: com.bar.package.MyClass ) OR
> You have imported your class into your jsp (e.g.:  <%@ page \
> import="com.bar.package.MyClass"%> )

You don't need to import the class at all if you are always using
<jsp:useBean>.

> =======================
> 
> > Or do you have a class, Animal, in the default package?
> 
> package org.animal;
> public class Animal {...}

Don't use the default package for anything: it's just a recipe for
confusion.

-chris

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic