SlideShare a Scribd company logo
1 of 28
Download to read offline
Tomcat 7 & Servlet 3
Mark Thomas
April 2009
Who am I?

•   Apache Tomcat committer
•   Resolved 1,500+ Tomcat bugs
•   Apache Tomcat PMC member
•   Member of the Apache Software Foundation
•   Member of the ASF security committee
•   Created the Tomcat security pages
•   Senior Software Engineer and Consultant at
    SpringSource
Agenda

•   Tomcat versions vs Servlet & JSP specification versions
•   New features for Tomcat 7
•   Specification timeline and process
•   New features / changes in Servlet 3.0
    –   Asynchronous processing
    –   Dynamic configuration
    –   Web fragments
    –   Annotations
    –   Programmatic login
    –   Session cookie configuration
    –   Other possible changes
• Current status of Tomcat 7 development
Tomcat and specification versions

 Tomcat          Servlet    JSP       JDK
 version         version   version   version

 7.0.x            3.0        2.1?     1.6+

 6.0.x            2.5        2.1      1.5+

 5.0.x / 5.5.x    2.4        2.0      1.4+

 4.1.x            2.3        1.2      1.3+

 3.x              2.2        1.2     1.2+ (?)
New for Tomcat 7

•   Servlet 3.0 support
•   Cluster communication via UDP
•   Significantly improved JMX support - GSOC
•   Replace Valves with Filters - GSOC
•   Bayeux
•   Numerous smaller improvements
•   Code clean up
    – Remove unused stuff
    – Resolve inconsistencies
Servlet 3.0 timeline

•   Early draft review – May 2008
•   Public review – December 2008
•   Final release – planned for June 2009
•   Final release probably September 2009
    – Lots of changes since public review
    – JEE needs more time
    – Likely to be another public review
Asynchronous processing

•   One of the major improvements
•   Most containers already have this in some form
•   Tomcat offers the CometProcessor interface
•   What is it?
    – Decouple container request thread from
      ServletRequest/ServletResponse objects
• What is it NOT?
    –   Non blocking servlet IO implementation
    –   This was briefly discussed
    –   Backwards compatibility challenges
    –   Very complex programming model
Asynchronous processing


  doFilter(Request req, Response res, FilterChain chain) {
     //pre filter actions
     chain.doFilter(req,res);
     //post filter action
  }
  // recycle request/response objects


  service(Request req, Response res) {
    //read request
    //write response
  }
  // recycle request/response objects (no filter)
Asynchronous processing

• Backwards compatibility
• Servlet/Filters are non asynchronous by default
   – Asynchronous processing requires explicit support in code
   – Currently done using annotation
   – Still looking at other ways of enabling

                @WebFilter(asyncSupported=true)
                public class MyFilter {
                }

                @WebServlet(asyncSupported=true)
                public class MyServlet {
                }
Asynchronous processing

• Starting

        interface javax.servlet.ServletRequest {

         AsyncContext startAsync();

         AsyncContext startAsync(Request,Response);

        }

        // throws IllegalStateException if
        // isAsyncSupported() returns false
Asynchronous processing

• javax.servlet.AsyncContext

• Similarities to CometEvent in Tomcat
   –   Wraps request/response objects
   –   Can dispatch the request to a URL
   –   Can request a container thread to execute a task
   –   Can notify container that the request is complete
Asynchronous processing

• Example
        service(Request req, Response res) {
          AsyncContext actx = req.startAsync();
          Runnable runnable = new Runnable() {
             public void run() {
               Message m = jmsTemplate.receive();
               res.write(m);
               req.complete();
             }
          };
          executor.submit(runnable);
        }
Asynchronous processing

• Defensive programming

      service(Request req, Response res) {
        if (req.isAsyncSupported() &&
            !req.isAsyncStarted()) {
          AsyncContext actx = req.getAsyncContext():
          req.startAsync();
          ...
        } else {
          ...
        }
      }
Asynchronous processing

• Forwarding to a content generator

      interface javax.servlet.AsyncContext {

       void dispatch();

       void dispatch(String path);

       void dispatch(ServletContext ctx, String path);

      }

      // Dispatches to a container thread
Asynchronous processing

• Forwarding to a content generator

        service(Request req, Response res) {
          final AsyncContext actx = req.startAsync();
          Runnable runnable = new Runnable() {
            public void run() {
              Message m = jmsTemplate.receive();
              req.setAttribute(“quote”,m);
              actx.dispatch(“/stock/quote.jsp”);
            }
          };
          executor.submit(runnable);
        }
Asynchronous processing

• Receiving events



          interface javax.servlet.AsyncListener {

           void onComplete(AsyncEvent event);

           void onTimeout(AsyncEvent event);

          }
Web fragments

• Ability to submit web.xml fragments with JAR packaged
  libraries
• Can be disabled using
   – <metadata-complete>true</metadata-complete>
• META-INF/web-fragment.xml
• Essentially same content as web.xml
Web fragments

• mylib.jar/META-INF/web-fragment.xml

    <web-fragment>
     <servlet>
      <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>foo.bar.MyServlet</servlet-class>
      </servlet>
     </servlet>
     <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>*.tsp</url-pattern>
     </servlet-mapping>
    </web-fragment>
Web fragments

• Ordering of web fragments
• Absolute ordering
   – web.xml - <absolute-ordering>
• Relative ordering
   – web-fragment.xml - <ordering>
• Ordering is name based
               <web-fragment>
                 <name>MyWebFragment1</name>
                 <ordering>
                   <after>MyWebFragment2</after>
                   <before><others/></before>
                 </ordering>
               </web-fragment>
Dynamic configuration

• Programatically add
   – Servlets
   – Filters
• To a ServletContext
• Can only be done during the ServletContext initialization
   – contextInitialized() method of ServletContextListener
     interface javax.servlet.ServletContext {
       FilterRegistration addFilter(
         String filterName, String|Class filterClass);

         ServletRegistration addServlet(
           String servletName, String|Class servletClass);
     }
Dynamic configuration

• Registration objects


        interface Servlet/Filter-Registration{
          setDescription(String);

            setInitParameter(String name,Object value);

            setInitParameters(Map<String,Object> p);

            setAsyncSupported(boolean supported);

            addMappingForUrlPatterns(...);
        }
Annotations

• New annotations added
   –   @WebServlet (must extend HttpServlet)
   –   @WebFilter (must implement Filter)
   –   @WebInitParam (both servlets/filters)
   –   @WebListener
        • ServletContextListener (& attr listener)
        • HttpSessionListener (& attr listener)
        • ServletRequestListener (& attr listener)
• Can be on any class in any jar
   – Providing the class implements the right interfaces
Programmatic login

• New methods
          interface HttpServletRequest{

              login(HttpServletResponse resp);

              login(String username, String password);

              logout();

          }

• Allow a login to happen on a non constrained request
• Sensitive to the response being committed
   – In order to set a session cookie, when configured
Session cookie configuration

• Configure the session cookie


       interface javax.servlet.SessionCookieConfig {

           setName(String name);
           setSecure(boolean isSecure);
           setHttpOnly(boolean isHttpOnly);
           setPath(String path);
           setDomain(String domain);
           setComment(String comment);

       }
Other possible changes

•   Generics
•   More deprecation
•   Delete deprecated methods???
•   File upload
    – is being considered for addition
    – challenge: Servlet 3.0 doesn't have non blocking IO
    – removes the usefulness of having yet another file upload API
Current status

• API changes complete
   – Based on public draft
   – We know this is going to change
• Dynamic configuration complete
   – We know this is going to change
• Session cookie configuration complete
   – We know this is going to change
Current status

• Asynchronous processing
   – Filip has a plan :)
• Web fragments
   – I had a plan
   – Spec changes means more complex implementation required
• Annotations
   – I have a plan
Questions?

•   markt@apache.org
•   users@tomcat.apache.org
•   dev@tomcat.apache.org
•   http://people.apache.org/~markt/presentations

• mark.thomas@springsource.com
• http://www.springsource.com/webinars

More Related Content

What's hot

Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1
vikram singh
 
Javax.servlet,http packages
Javax.servlet,http packagesJavax.servlet,http packages
Javax.servlet,http packages
vamsi krishna
 
Chapter 3 servlet & jsp
Chapter 3 servlet & jspChapter 3 servlet & jsp
Chapter 3 servlet & jsp
Jafar Nesargi
 
Gwt and rpc use 2007 1
Gwt and rpc use 2007 1Gwt and rpc use 2007 1
Gwt and rpc use 2007 1
Sam Muhanguzi
 
An Introduction To Java Web Technology
An Introduction To Java Web TechnologyAn Introduction To Java Web Technology
An Introduction To Java Web Technology
vikram singh
 

What's hot (20)

Tomcatx performance-tuning
Tomcatx performance-tuningTomcatx performance-tuning
Tomcatx performance-tuning
 
Tomcat next
Tomcat nextTomcat next
Tomcat next
 
Async fun
Async funAsync fun
Async fun
 
Akka Cluster in Java - JCConf 2015
Akka Cluster in Java - JCConf 2015Akka Cluster in Java - JCConf 2015
Akka Cluster in Java - JCConf 2015
 
Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1
 
Http programming in play
Http programming in playHttp programming in play
Http programming in play
 
Javax.servlet,http packages
Javax.servlet,http packagesJavax.servlet,http packages
Javax.servlet,http packages
 
Chapter 3 servlet & jsp
Chapter 3 servlet & jspChapter 3 servlet & jsp
Chapter 3 servlet & jsp
 
Celery introduction
Celery introductionCelery introduction
Celery introduction
 
Servlets
ServletsServlets
Servlets
 
Gwt and rpc use 2007 1
Gwt and rpc use 2007 1Gwt and rpc use 2007 1
Gwt and rpc use 2007 1
 
An Introduction To Java Web Technology
An Introduction To Java Web TechnologyAn Introduction To Java Web Technology
An Introduction To Java Web Technology
 
Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java
 
Presentation: Everything you wanted to know about writing async, high-concurr...
Presentation: Everything you wanted to know about writing async, high-concurr...Presentation: Everything you wanted to know about writing async, high-concurr...
Presentation: Everything you wanted to know about writing async, high-concurr...
 
Above the clouds: introducing Akka
Above the clouds: introducing AkkaAbove the clouds: introducing Akka
Above the clouds: introducing Akka
 
Apache Commons Pool and DBCP - Version 2 Update
Apache Commons Pool and DBCP - Version 2 UpdateApache Commons Pool and DBCP - Version 2 Update
Apache Commons Pool and DBCP - Version 2 Update
 
Servlet life cycle
Servlet life cycleServlet life cycle
Servlet life cycle
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
Servlet lifecycle
Servlet lifecycleServlet lifecycle
Servlet lifecycle
 
Exploring Twitter's Finagle technology stack for microservices
Exploring Twitter's Finagle technology stack for microservicesExploring Twitter's Finagle technology stack for microservices
Exploring Twitter's Finagle technology stack for microservices
 

Viewers also liked

Enterprise(d) Tomcat & httpd
Enterprise(d) Tomcat & httpdEnterprise(d) Tomcat & httpd
Enterprise(d) Tomcat & httpd
Vaclav Tunka
 
Multithreading, Blocking IO and Async IO
Multithreading, Blocking IO and Async IOMultithreading, Blocking IO and Async IO
Multithreading, Blocking IO and Async IO
Directi Group
 

Viewers also liked (12)

Ob1k presentation at Java.IL
Ob1k presentation at Java.ILOb1k presentation at Java.IL
Ob1k presentation at Java.IL
 
Enterprise(d) Tomcat & httpd
Enterprise(d) Tomcat & httpdEnterprise(d) Tomcat & httpd
Enterprise(d) Tomcat & httpd
 
Websockets on the JVM: Atmosphere to the rescue!
Websockets on the JVM: Atmosphere to the rescue!Websockets on the JVM: Atmosphere to the rescue!
Websockets on the JVM: Atmosphere to the rescue!
 
Fastest Servlets in the West
Fastest Servlets in the WestFastest Servlets in the West
Fastest Servlets in the West
 
Asynchronous design with Spring and RTI: 1M events per second
Asynchronous design with Spring and RTI: 1M events per secondAsynchronous design with Spring and RTI: 1M events per second
Asynchronous design with Spring and RTI: 1M events per second
 
Multithreading, Blocking IO and Async IO
Multithreading, Blocking IO and Async IOMultithreading, Blocking IO and Async IO
Multithreading, Blocking IO and Async IO
 
Async IO and Multithreading explained
Async IO and Multithreading explainedAsync IO and Multithreading explained
Async IO and Multithreading explained
 
Auxiliary : Tomcat
Auxiliary : TomcatAuxiliary : Tomcat
Auxiliary : Tomcat
 
Async servlets
Async servletsAsync servlets
Async servlets
 
Introduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationIntroduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 Presentation
 
NetflixOSS season 2 episode 2 - Reactive / Async
NetflixOSS   season 2 episode 2 - Reactive / AsyncNetflixOSS   season 2 episode 2 - Reactive / Async
NetflixOSS season 2 episode 2 - Reactive / Async
 
MicroServices at Netflix - challenges of scale
MicroServices at Netflix - challenges of scaleMicroServices at Netflix - challenges of scale
MicroServices at Netflix - challenges of scale
 

Similar to Introduction tomcat7 servlet3

Servletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postServletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,post
vamsitricks
 
Servletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postServletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,post
vamsitricks
 

Similar to Introduction tomcat7 servlet3 (20)

Java Servlets.pdf
Java Servlets.pdfJava Servlets.pdf
Java Servlets.pdf
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
 
Servlets 3.0 - Asynchronous, Easy, Extensible @ Silicon Valley Code Camp 2010
Servlets 3.0 - Asynchronous, Easy, Extensible @ Silicon Valley Code Camp 2010Servlets 3.0 - Asynchronous, Easy, Extensible @ Silicon Valley Code Camp 2010
Servlets 3.0 - Asynchronous, Easy, Extensible @ Silicon Valley Code Camp 2010
 
JAVA Servlets
JAVA ServletsJAVA Servlets
JAVA Servlets
 
Servlets
ServletsServlets
Servlets
 
Wt unit 3 server side technology
Wt unit 3 server side technologyWt unit 3 server side technology
Wt unit 3 server side technology
 
Wt unit 3 server side technology
Wt unit 3 server side technologyWt unit 3 server side technology
Wt unit 3 server side technology
 
Lecture 3: Servlets - Session Management
Lecture 3:  Servlets - Session ManagementLecture 3:  Servlets - Session Management
Lecture 3: Servlets - Session Management
 
Servlet and JSP
Servlet and JSPServlet and JSP
Servlet and JSP
 
JavaOne India 2011 - Servlets 3.0
JavaOne India 2011 - Servlets 3.0JavaOne India 2011 - Servlets 3.0
JavaOne India 2011 - Servlets 3.0
 
Servlets 3.0 - Asynchronous, Extensibility, Ease-of-use @ JavaOne Brazil 2010
Servlets 3.0 - Asynchronous, Extensibility, Ease-of-use @ JavaOne Brazil 2010Servlets 3.0 - Asynchronous, Extensibility, Ease-of-use @ JavaOne Brazil 2010
Servlets 3.0 - Asynchronous, Extensibility, Ease-of-use @ JavaOne Brazil 2010
 
Java Servlet Programming under Ubuntu Linux by Tushar B Kute
Java Servlet Programming under Ubuntu Linux by Tushar B KuteJava Servlet Programming under Ubuntu Linux by Tushar B Kute
Java Servlet Programming under Ubuntu Linux by Tushar B Kute
 
Servletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postServletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,post
 
Servletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postServletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,post
 
GWT Web Socket and data serialization
GWT Web Socket and data serializationGWT Web Socket and data serialization
GWT Web Socket and data serialization
 
Advance Java Topics (J2EE)
Advance Java Topics (J2EE)Advance Java Topics (J2EE)
Advance Java Topics (J2EE)
 
Servlet
ServletServlet
Servlet
 
SERVIET
SERVIETSERVIET
SERVIET
 
Servlet 3.0
Servlet 3.0Servlet 3.0
Servlet 3.0
 
Java EE 8
Java EE 8Java EE 8
Java EE 8
 

More from JavaEE Trainers

More from JavaEE Trainers (10)

Introduction to java servlet 3.0 api javaone 2009
Introduction to java servlet 3.0 api javaone 2009Introduction to java servlet 3.0 api javaone 2009
Introduction to java servlet 3.0 api javaone 2009
 
Introduction to java servlet 3.0 api javaone 2008
Introduction to java servlet 3.0 api javaone 2008Introduction to java servlet 3.0 api javaone 2008
Introduction to java servlet 3.0 api javaone 2008
 
Servlet/JSP course chapter 2: Introduction to JavaServer Pages (JSP)
Servlet/JSP course chapter 2: Introduction to JavaServer Pages (JSP)Servlet/JSP course chapter 2: Introduction to JavaServer Pages (JSP)
Servlet/JSP course chapter 2: Introduction to JavaServer Pages (JSP)
 
Servlet/JSP course chapter 1: Introduction to servlets
Servlet/JSP course chapter 1: Introduction to servletsServlet/JSP course chapter 1: Introduction to servlets
Servlet/JSP course chapter 1: Introduction to servlets
 
Introduction to the Servlet / JSP course
Introduction to the Servlet / JSP course Introduction to the Servlet / JSP course
Introduction to the Servlet / JSP course
 
Jsp quick reference card
Jsp quick reference cardJsp quick reference card
Jsp quick reference card
 
jsp, javaserver pages, Card20
jsp, javaserver pages, Card20jsp, javaserver pages, Card20
jsp, javaserver pages, Card20
 
Struts2 course chapter 2: installation and configuration
Struts2 course chapter 2: installation and configurationStruts2 course chapter 2: installation and configuration
Struts2 course chapter 2: installation and configuration
 
Struts2 course chapter 1: Evolution of Web Applications
Struts2 course chapter 1: Evolution of Web ApplicationsStruts2 course chapter 1: Evolution of Web Applications
Struts2 course chapter 1: Evolution of Web Applications
 
Struts2 Course: Introduction
Struts2 Course: IntroductionStruts2 Course: Introduction
Struts2 Course: Introduction
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Recently uploaded (20)

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 

Introduction tomcat7 servlet3

  • 1. Tomcat 7 & Servlet 3 Mark Thomas April 2009
  • 2. Who am I? • Apache Tomcat committer • Resolved 1,500+ Tomcat bugs • Apache Tomcat PMC member • Member of the Apache Software Foundation • Member of the ASF security committee • Created the Tomcat security pages • Senior Software Engineer and Consultant at SpringSource
  • 3. Agenda • Tomcat versions vs Servlet & JSP specification versions • New features for Tomcat 7 • Specification timeline and process • New features / changes in Servlet 3.0 – Asynchronous processing – Dynamic configuration – Web fragments – Annotations – Programmatic login – Session cookie configuration – Other possible changes • Current status of Tomcat 7 development
  • 4. Tomcat and specification versions Tomcat Servlet JSP JDK version version version version 7.0.x 3.0 2.1? 1.6+ 6.0.x 2.5 2.1 1.5+ 5.0.x / 5.5.x 2.4 2.0 1.4+ 4.1.x 2.3 1.2 1.3+ 3.x 2.2 1.2 1.2+ (?)
  • 5. New for Tomcat 7 • Servlet 3.0 support • Cluster communication via UDP • Significantly improved JMX support - GSOC • Replace Valves with Filters - GSOC • Bayeux • Numerous smaller improvements • Code clean up – Remove unused stuff – Resolve inconsistencies
  • 6. Servlet 3.0 timeline • Early draft review – May 2008 • Public review – December 2008 • Final release – planned for June 2009 • Final release probably September 2009 – Lots of changes since public review – JEE needs more time – Likely to be another public review
  • 7. Asynchronous processing • One of the major improvements • Most containers already have this in some form • Tomcat offers the CometProcessor interface • What is it? – Decouple container request thread from ServletRequest/ServletResponse objects • What is it NOT? – Non blocking servlet IO implementation – This was briefly discussed – Backwards compatibility challenges – Very complex programming model
  • 8. Asynchronous processing doFilter(Request req, Response res, FilterChain chain) { //pre filter actions chain.doFilter(req,res); //post filter action } // recycle request/response objects service(Request req, Response res) { //read request //write response } // recycle request/response objects (no filter)
  • 9. Asynchronous processing • Backwards compatibility • Servlet/Filters are non asynchronous by default – Asynchronous processing requires explicit support in code – Currently done using annotation – Still looking at other ways of enabling @WebFilter(asyncSupported=true) public class MyFilter { } @WebServlet(asyncSupported=true) public class MyServlet { }
  • 10. Asynchronous processing • Starting interface javax.servlet.ServletRequest { AsyncContext startAsync(); AsyncContext startAsync(Request,Response); } // throws IllegalStateException if // isAsyncSupported() returns false
  • 11. Asynchronous processing • javax.servlet.AsyncContext • Similarities to CometEvent in Tomcat – Wraps request/response objects – Can dispatch the request to a URL – Can request a container thread to execute a task – Can notify container that the request is complete
  • 12. Asynchronous processing • Example service(Request req, Response res) { AsyncContext actx = req.startAsync(); Runnable runnable = new Runnable() { public void run() { Message m = jmsTemplate.receive(); res.write(m); req.complete(); } }; executor.submit(runnable); }
  • 13. Asynchronous processing • Defensive programming service(Request req, Response res) { if (req.isAsyncSupported() && !req.isAsyncStarted()) { AsyncContext actx = req.getAsyncContext(): req.startAsync(); ... } else { ... } }
  • 14. Asynchronous processing • Forwarding to a content generator interface javax.servlet.AsyncContext { void dispatch(); void dispatch(String path); void dispatch(ServletContext ctx, String path); } // Dispatches to a container thread
  • 15. Asynchronous processing • Forwarding to a content generator service(Request req, Response res) { final AsyncContext actx = req.startAsync(); Runnable runnable = new Runnable() { public void run() { Message m = jmsTemplate.receive(); req.setAttribute(“quote”,m); actx.dispatch(“/stock/quote.jsp”); } }; executor.submit(runnable); }
  • 16. Asynchronous processing • Receiving events interface javax.servlet.AsyncListener { void onComplete(AsyncEvent event); void onTimeout(AsyncEvent event); }
  • 17. Web fragments • Ability to submit web.xml fragments with JAR packaged libraries • Can be disabled using – <metadata-complete>true</metadata-complete> • META-INF/web-fragment.xml • Essentially same content as web.xml
  • 18. Web fragments • mylib.jar/META-INF/web-fragment.xml <web-fragment> <servlet> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>foo.bar.MyServlet</servlet-class> </servlet> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>*.tsp</url-pattern> </servlet-mapping> </web-fragment>
  • 19. Web fragments • Ordering of web fragments • Absolute ordering – web.xml - <absolute-ordering> • Relative ordering – web-fragment.xml - <ordering> • Ordering is name based <web-fragment> <name>MyWebFragment1</name> <ordering> <after>MyWebFragment2</after> <before><others/></before> </ordering> </web-fragment>
  • 20. Dynamic configuration • Programatically add – Servlets – Filters • To a ServletContext • Can only be done during the ServletContext initialization – contextInitialized() method of ServletContextListener interface javax.servlet.ServletContext { FilterRegistration addFilter( String filterName, String|Class filterClass); ServletRegistration addServlet( String servletName, String|Class servletClass); }
  • 21. Dynamic configuration • Registration objects interface Servlet/Filter-Registration{ setDescription(String); setInitParameter(String name,Object value); setInitParameters(Map<String,Object> p); setAsyncSupported(boolean supported); addMappingForUrlPatterns(...); }
  • 22. Annotations • New annotations added – @WebServlet (must extend HttpServlet) – @WebFilter (must implement Filter) – @WebInitParam (both servlets/filters) – @WebListener • ServletContextListener (& attr listener) • HttpSessionListener (& attr listener) • ServletRequestListener (& attr listener) • Can be on any class in any jar – Providing the class implements the right interfaces
  • 23. Programmatic login • New methods interface HttpServletRequest{ login(HttpServletResponse resp); login(String username, String password); logout(); } • Allow a login to happen on a non constrained request • Sensitive to the response being committed – In order to set a session cookie, when configured
  • 24. Session cookie configuration • Configure the session cookie interface javax.servlet.SessionCookieConfig { setName(String name); setSecure(boolean isSecure); setHttpOnly(boolean isHttpOnly); setPath(String path); setDomain(String domain); setComment(String comment); }
  • 25. Other possible changes • Generics • More deprecation • Delete deprecated methods??? • File upload – is being considered for addition – challenge: Servlet 3.0 doesn't have non blocking IO – removes the usefulness of having yet another file upload API
  • 26. Current status • API changes complete – Based on public draft – We know this is going to change • Dynamic configuration complete – We know this is going to change • Session cookie configuration complete – We know this is going to change
  • 27. Current status • Asynchronous processing – Filip has a plan :) • Web fragments – I had a plan – Spec changes means more complex implementation required • Annotations – I have a plan
  • 28. Questions? • markt@apache.org • users@tomcat.apache.org • dev@tomcat.apache.org • http://people.apache.org/~markt/presentations • mark.thomas@springsource.com • http://www.springsource.com/webinars