On 19/02/2021 09:45, aghart...@gmail.com wrote:
> Hi Mark,
> 
> I'm sorry to bother you, do you need more information about that? (see
> email below, my mistake about reply recipient)

Please see section 8.1 of the Servlet specification.

<quote>
In a web application, classes using annotations will have their
annotations processed only if they are located in the WEB-INF/classes
directory, or if they are packaged in a jar file located in WEB-INF/lib
within the application.
</quote>

The same requirement was present in Servlet 3.0 / Tomcat 7 but not enforced.

Mark



> 
> Many Thanks,
> 
> Agharta
> 
> 
> 
> 
> Il 18/02/21 13:09, aghart...@gmail.com ha scritto:
>> Hi,
>>
>> FYI, tomcat 9.0.43 have this problem too.
>>
>> Best Regards,
>>
>> Agharta
>>
>>
>> Il 18/02/21 12:51, aghart...@gmail.com ha scritto:
>>> Hi Mark,
>>>
>>> Good questions, my mistake, sorry.
>>>
>>> So:
>>>
>>> jar file name is testannotation.jar
>>>
>>> package is "aaa." (very simple)
>>>
>>> Standard vanilla tomcat (.zip) downloaded from ASF site, no package
>>> manager. Unzipped to my home directory.
>>>
>>> org.apache.tomcat.util.scan.StandardJarScanner.level = FINE (enabled
>>> inside tomcat/conf/logging.properties)
>>>
>>> Result:
>>>
>>> catalina.2021-02-18.log:18-Feb-2021 12:45:03.703 BUONO [main]
>>> org.apache.tomcat.util.scan.StandardJarScanner.processURLs Scanning
>>> JAR [file:/home/agharta/apache-tomcat-9.0.41/lib/testannotation.jar]
>>> from classpath
>>> catalina.2021-02-18.log:18-Feb-2021 12:45:06.178 BUONO
>>> [http-nio-8082-exec-1]
>>> org.apache.tomcat.util.scan.StandardJarScanner.processURLs Scanning
>>> JAR [file:/home/agharta/apache-tomcat-9.0.41/lib/testannotation.jar]
>>> from classpath
>>>
>>> ...no other messages involving testannotation.jar or TestServlet.....
>>>
>>>
>>> Many thanks,
>>>
>>> Agharta
>>>
>>>
>>>
>>>
>>> Il 18/02/21 12:24, Mark Thomas ha scritto:
>>>> On 18/02/2021 10:46, aghart...@gmail.com wrote:
>>>>> Hi all,
>>>>>
>>>>> A question, I can't solve that....
>>>>>
>>>>> Tested with Tomcat 9.0.41, java 8 x64, linux (Fedora 32).
>>>>>
>>>>>
>>>>> I have a standard tomcat web.xml (3.0 or 3.1, no matter).
>>>>>
>>>>> I have created an external simple servlet with @WebServlet annotation,
>>>>> and packaged it to a jar file:
>>>> Name of the JAR file?
>>>>
>>>> Package the Servlet has been placed in?
>>>>
>>>> Standard Tomcat downloaded from the ASF or one provided by your package
>>>> manager?
>>>>
>>>> Have you tried enabling debug logging for
>>>> org.apache.tomcat.util.scan.StandardJarScanner ?
>>>>
>>>> Mark
>>>>
>>>>
>>>>>
>>>>> @WebServlet(name = "TestServlet", urlPatterns = {"/TestServlet"},
>>>>> loadOnStartup = 1)
>>>>> public class TestServlet extends HttpServlet {
>>>>>
>>>>>      private static final Logger log =
>>>>> Logger.getLogger(TestServlet.class.getName());
>>>>>
>>>>>      private static final long serialVersionUID = 1L;
>>>>>
>>>>>      @Override
>>>>>      public void init() throws ServletException {
>>>>>          log.setLevel(Level.ALL);
>>>>>          log.log(Level.WARNING, "TESTSERVLET INIT");
>>>>>          super.init();
>>>>>      }
>>>>>
>>>>>      @Override
>>>>>      public void destroy() {
>>>>>      }
>>>>>
>>>>>      @Override
>>>>>      protected void doGet(HttpServletRequest req, HttpServletResponse
>>>>> resp) throws ServletException, IOException {
>>>>>          processRequest(req, resp);
>>>>>      }
>>>>>
>>>>>      protected void processRequest(HttpServletRequest request,
>>>>> HttpServletResponse response)
>>>>>              throws ServletException, IOException {
>>>>>          response.setContentType("text/html;charset=UTF-8");
>>>>>          PrintWriter out = response.getWriter();
>>>>>
>>>>>          try {
>>>>>              out.println("<!DOCTYPE html>");
>>>>>              out.println("<html>");
>>>>>              out.println("<head>");
>>>>>              out.println("<title>Servlet TestServlet</title>");
>>>>>              out.println("</head>");
>>>>>              out.println("<body>");
>>>>>              out.println("<h1>Servlet TestServlet at " +
>>>>> request.getContextPath() + "</h1>");
>>>>>
>>>>>              out.println("</body>");
>>>>>              out.println("</html>");
>>>>>          } finally {
>>>>>              out.close();
>>>>>          }
>>>>>      }
>>>>>
>>>>> }
>>>>>
>>>>>
>>>>> So, if I copy the .jar file inside WEB-INF/lib folder of
>>>>> destination war
>>>>> project the log message will appears and the servlet is reachable.
>>>>>
>>>>> But, if I copy the .jar file inside tomcat/lib folder the annotation
>>>>> won't be processed.
>>>>>
>>>>>
>>>>> FYI, in tomcat 7 both cases (inside WEB-INF/lib and tomcat/lib)
>>>>> works well.
>>>>>
>>>>>
>>>>> I searched on breaking changes between tomcat 7 and 8/8.5/9 but nope.
>>>>> Seems related to jarscanner.....but no luck!
>>>>>
>>>>>
>>>>> Because my servlet is in common to all projects I want to put it
>>>>> inside
>>>>> tomcat/lib folder and share it to all my projects
>>>>>
>>>>>
>>>>> Somebody can help me?
>>>>>
>>>>>
>>>>> Many thanks,
>>>>>
>>>>> Agharta
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 


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

Reply via email to