SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
<Insert Picture Here>




Servlets 3.0
Asynchronous, Extensible, Ease-of-use
Arun Gupta, Java EE & GlassFish Guy
blogs.oracle.com/arungupta, @arungupta
The preceding is intended to outline our general product
direction. It is intended for information purposes only,
and may not be incorporated into any contract. It is
not a commitment to deliver any material, code, or
functionality, and should not be relied upon in making
purchasing decisions.
The development, release, and timing of any features
or functionality described for Oracle’s products remains
at the sole discretion of Oracle.


                                                           2
Agenda
• Overview
• Ease of Development
• Dynamic Registration of Servlets etc
• Pluggability
• Asynchronous Support
• Security Enhancements
• Miscellaneous




                                         3
Overview
l
    Java Servlet 3.0 done as part of JSR 315
l
    ~20 members in the expert group
    –Major Java EE vendors, open source web container developers, framework
     authors
l
    Main areas of focus
    –Ease of Development
    –Pluggability
    –Asynchronous support
    –Security



                                                                          4
Ease of Development

l
    Enhanced APIs to use new Java SE language features introduced
    since J2SE 5.0
    l
        Generics for type safety in API where possible
l
    Annotations for declarative style of programming
    l
        Optional web.xml
l
    Convention over configuration




                                                                5
Ease of Development
       Use of annotations

l
    Annotations to declare Servlets, Filters, Listeners and servlet
    security
    –@WebServlet – Define a Servlet
    –@WebFilter – Define a Filter
    –@WebListener – Define a Listener
    –@WebInitParam – Define init param
    –@MultipartConfig – Define file upload properties
    –@ServletSecurity – Define security constraints
l
    Can override using “web.xml”

                                                                      6
Servlet 2.5 example
      At least 2 files

<!--Deployment descriptor web.xml -->   /* Code in Java Class */
<web-app>
  <servlet>                             package com.sun;
    <servlet-name>MyServlet             public class MyServlet extends HttpServlet
                   </servlet-name>      {
        <servlet-class>                     public void
          com.sun.MyServlet                 doGet(HttpServletRequest
        </servlet-class>                    req,HttpServletResponse res)
   </servlet>                                {
   <servlet-mapping>
                                                  ...
     <servlet-name>MyServlet
        </servlet-name>                      }
     <url-pattern>/myApp/*                  ...
        </url-pattern>
   </servlet-mapping>                   }
    ...
 </web-app>




                                                                                     7
@WebServlet – Sample Code
@WebServlet(urlPatterns={“/myApp”})
public class SimpleSample extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res) {


    }
}




                                                                           8
@WebServlet Async – Sample Code
@WebServlet(urlPatterns=“/myApp”, name=”MyServlet”, asyncSupported=true)
public class SimpleSample extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res) {


    }
}




                                                                           9
Dynamic Registration
        Create and/or register
• ServletContext#add[Servlet | Filter]
        • Overloaded versions take [Servlet | Filter] name and
           – Fully qualified [Servlet | Filter] class name or
           – Class <? extends [Servlet | Filter]> or
           – [Servlet | Filter] instance
        • User returned Registration handle to configure all aspects of [Servlet |
          Filter]
l
    ServletContext#create[Servlet | Filter]
    –Takes Class<? Extends [Servlet | Filter]> argument
    –Supports resource injection by container
    –Returned [Servlet | Filter] instance may be fully customized before it is registered

                                                                                      10
Dynamic Registration
       Lookup


l
    ServletContext#find[Servlet |Filter]Registration
    –Takes [Servlet | Filter] name as argument
    –Returned Registration handle provides subset of configuration methods
    –May only be used to add initialization parameters and mappings
    –Conflict returned as java.util.Set




                                                                             11
Dynamic Registration
  Register example


ServletRegistration.Dynamic dynamic =
    servletContext.addServlet(
         "DynamicServlet",
         "com.mycom.MyServlet");
dynamic.addMapping("/dynamicServlet");
dynamic.setAsyncSupported(true);




                                         12
Dynamic Registration
    Lookup example


ServletRegistration declared =
    servletContext.getServletRegistration("DeclaredServlet");
declared.addMapping("/declaredServlet");
declared.setInitParameter("param", "value");




                                                                13
Pluggability
• Plugin libraries using web fragments
  – Modular web.xml
  – Absolute ordering: <absolute-ordering>
  – Relative ordering: <ordering>, <before>, <after>
• Bundled in framework *.jar/META-INF
• Zero-configuration, drag-and-drop for web frameworks
  – Servlets, servlet filters, context listeners for a framework get discovered
    and registered by the container
• Only JAR files in WEB-INF/lib are used


                                                                                  14
Pluggability – Sample Code


<web-fragment>
    <filter>
           <filter-name>wicket.helloworld</filter-name>
           <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
           <init-param>
                 <param-name>applicationClassName</param-name>
                 <param-value>...</param-value>
           </init-param>
    </filter>
    <filter-mapping>
           <filter-name>wicket.helloworld</filter-name>
           <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-fragment>


http://blogs.oracle.com/arungupta/entry/totd_91_applying_java_ee


                                                                                       15
Pluggability – Sample Code

<web-fragment>
  <filter>
     <filter-name>LiftFilter</filter-name>
      <display-name>Lift Filter</display-name>
      <description>The Filter that intercepts lift calls</description>
      <filter-class>net.liftweb.http.LiftFilter</filter-class>
  </filter>
   <filter-mapping>
     <filter-name>LiftFilter</filter-name>
     <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-fragment>

http://blogs.oracle.com/arungupta/entry/totd_101_applying_servlet_3


                                                                         16
Extensibility
  ServletContainerInitializer

• Shared copies of frameworks
• Container installed JARs
  – App or Library
• Discovered using the service provider API
  – META-INF/services/javax.servlet.ServletContainerInitializer
• Expresses interest in classes via @HandlesTypes




                                                                  17
Extensibility
  ServletContainerInitializer

• Who uses it ?
  – Mojarra (JSF2) is bootstrapped into GlassFish
     • No “faces-config.xml” or “web.xml”
  – Jersey (JAX-RS) registers root Application
     • No (or portable) “web.xml”




                                                    18
Dynamic Registration
Java Server Faces
@SuppressWarnings({"UnusedDeclaration"})
@HandlesTypes({
ManagedBean.class,
FacesComponent.class,
FacesValidator.class,
FacesConverter.class,
FacesBehaviorRenderer.class,
ResourceDependency.class,
ResourceDependencies.class,
ListenerFor.class,
ListenersFor.class,
UIComponent.class,
Validator.class,
Converter.class,
Renderer.class
})
public class FacesInitializer implements ServletContainerInitializer {
    // NOTE: Loggins should not be used with this class.
    private static final String FACES_SERVLET_CLASS = FacesServlet.class.getName();




                                                                                      19
Dynamic Registration
Java Server Faces


public void onStartup(Set<Class<?>> classes, ServletContext servletContext)
throws ServletException {
       if (shouldCheckMappings(classes, servletContext)) {
            Map<String,? extends ServletRegistration> existing =
servletContext.getServletRegistrations();
            for (ServletRegistration registration : existing.values()) {
                if (FACES_SERVLET_CLASS.equals(registration.getClassName())) {
                    // FacesServlet has already been defined, so we're
                    // not going to add additional mappings;
                    return;
                }
            }
            ServletRegistration reg =
                  servletContext.addServlet("FacesServlet",
                                            "javax.faces.webapp.FacesServlet");
            reg.addMapping("/faces/*", "*.jsf", "*.faces");
            servletContext.setAttribute(RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED,
Boolean.TRUE);




                                                                                        20
Resource Sharing

• Static and JSP not confined to document root of the web
  application
• May be placed in WEB-INF/lib/[*.jar]/META-
  INF/resources
• Resources in root take precedence over those in bundled JAR
• Container must honor this new location when
  – Processing HTTP requests
  – Calls to ServletContext#getResource[AsStream]



                                                                21
Resource Sharing – Sample Code




myapp.war
  WEB-INF/lib/catalog.jar
             /META-INF/resources/catalog/books.html



http://localhost:8080/myapp/catalog/books.html




                                                      22
Why Asynchronous Servlets?

l
    Not for Async IO
    –Requests mostly small (single packet)
    –Hard to asynchronously produce large responses
    –Async IO support waiting for NIO2

l
    Async Servlets are for:
    –Waiting for resources (eg JDBC connection)
    –Waiting for events (eg Chat)
    –Waiting for responses (eg web services)


                                                      23
Blocking waiting consumes resources

l
    Web Application using remote web services
    –Handling 1000 requests / sec
    –50% requests call remote web service
    –500 threads in container thread pool

l
    If remote web service is slow (1000ms)
    –Thread starvation in 1 second!
    –50% of requests use all 500 threads




                                                24
Asynchronous API
    Enable asynchronous support


l
    Configured in
    –web.xml:
     <async-supported>true</async-supported>
    –With annotation: @WebServlet(asyncSupported=true)
    –Programmatic: registration.setAsyncSupported(true)




                                                          25
Asynchronous Servlets – Sample Code

    AsyncContext context = request.startAsync();
    context.addListener(new AsyncListener() { … });
    context.dispatch(“/request.jsp”);
    //context.start(Runnable action);
    . . .
    context.complete();




http://blogs.oracle.com/arungupta/entry/totd_139_asynchronous_request_processing


                                                                                   26
Security
    Annotations to define security constraints

l
  @ServletSecurity used to define access control constraints
l
  @HttpConstraint for all HTTP methods
l
  @HttpMethodConstraint for specific HTTP methods
l
  More specific wins




                                                               27
Security – Sample Code


@ServletSecurity(
  httpMethodConstraints = {
      @HttpMethodConstraint(value = "GET", rolesAllowed = "R1"),
      @HttpMethodConstraint(value = "POST", rolesAllowed = "R2")
    }
)
public class MyServlet extends HttpServlet {
    // Servlet methods
}




                                                                   28
Security
   Programmatic container authentication and logout


>HttpServletRequest#login(String username, String
 password)
–Replacement for FBL
–Application supervises credential collection
>HttpServletRequest#authenticate(HttpServletRespo
 nse)
–Application initiates container mediated authentication from a resource that is
 not covered by any authentication constraints
–Application decides when authentication must occur


                                                                                   29
Miscellaneous Features
l
    Session tracking cookie configuration
    –Via web.xml
    –Programmatic via javax.servlet.SessionCookieConfig
l
    Support for HttpOnly cookie attribute
    –Example:
     servletContext.getSessionCookieConfig().setHttpOnly(true)
l
    Default error page                        <error-page>
                                       <error-code>...</error-code>
                                  <exception-type>...</exception-type>
                                     <location>/404.html</location>
                                             </error-page>



                                                                         30
Miscellaneous Features / API (contd)


ServletRequest#getServletContext
ServletRequest#getDispatcherType
Servlet[Request|
Response]Wrapper#isWrapperFor
HttpServletResponse#getStatus
HttpServletResponse#getHeader
HttpServletResponse#getHeaders
HttpServletResponse#getHeaderNames

                                        31
Miscellaneous Features / API (contd)
 File upload


ServletRequest#getParts
ServletRequest#getPart
@MultipartConfig
Changes to web.xml




                                        32
Summary
l
  Major revision since Servlet 2.5
l
  Comprehensive set of new features enable modern style of web
  applications and greatly increases developer productivity
l
  Simplifies assembly of large applications from reusable
  components




                                                                 33
Servlets 3.1 (JSR 340)
    http://jcp.org/en/jsr/detail?id=340
                                                        NEW

• Cloud support
• Multi-tenancy
     – Security / Session state / Resources isolation
•   Asynchronous IO based on NIO2
•   Simplified Asynchronous Servlets
•   Utilize Java EE concurrency utilities
•   Enable support for Web Sockets


                                                              34
References


•   oracle.com/javaee
•   glassfish.org
•   oracle.com/goto/glassfish
•   blogs.oracle.com/theaquarium
•   youtube.com/GlassFishVideos
•   Follow @glassfish




                                   35
<Insert Picture Here>




Servlets 3.0
Asynchronous, Extensible, Ease-of-use
Arun Gupta, Java EE & GlassFish Guy
blogs.oracle.com/arungupta, @arungupta

Mais conteúdo relacionado

Mais procurados

Servlet api &amp; servlet http package
Servlet api &amp; servlet http packageServlet api &amp; servlet http package
Servlet api &amp; servlet http package
renukarenuka9
 
Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1
vikram singh
 

Mais procurados (20)

Multi Client Development with Spring
Multi Client Development with SpringMulti Client Development with Spring
Multi Client Development with Spring
 
RESTing with JAX-RS
RESTing with JAX-RSRESTing with JAX-RS
RESTing with JAX-RS
 
Multi Client Development with Spring
Multi Client Development with SpringMulti Client Development with Spring
Multi Client Development with Spring
 
RESTful Web services using JAX-RS
RESTful Web services using JAX-RSRESTful Web services using JAX-RS
RESTful Web services using JAX-RS
 
Java EE 6 & GlassFish = Less Code + More Power at CEJUG
Java EE 6 & GlassFish = Less Code + More Power at CEJUGJava EE 6 & GlassFish = Less Code + More Power at CEJUG
Java EE 6 & GlassFish = Less Code + More Power at CEJUG
 
Spring Portlet MVC
Spring Portlet MVCSpring Portlet MVC
Spring Portlet MVC
 
Weblogic Administration Managed Server migration
Weblogic Administration Managed Server migrationWeblogic Administration Managed Server migration
Weblogic Administration Managed Server migration
 
Knowledge Sharing : Java Servlet
Knowledge Sharing : Java ServletKnowledge Sharing : Java Servlet
Knowledge Sharing : Java Servlet
 
JDBC
JDBCJDBC
JDBC
 
Multi client Development with Spring
Multi client Development with SpringMulti client Development with Spring
Multi client Development with Spring
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Lecture 5 JSTL, custom tags, maven
Lecture 5   JSTL, custom tags, mavenLecture 5   JSTL, custom tags, maven
Lecture 5 JSTL, custom tags, maven
 
Weblogic
WeblogicWeblogic
Weblogic
 
Servlet api &amp; servlet http package
Servlet api &amp; servlet http packageServlet api &amp; servlet http package
Servlet api &amp; servlet http package
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVC
 
Arun Gupta: London Java Community: Java EE 6 and GlassFish 3
Arun Gupta: London Java Community: Java EE 6 and GlassFish 3 Arun Gupta: London Java Community: Java EE 6 and GlassFish 3
Arun Gupta: London Java Community: Java EE 6 and GlassFish 3
 
java servlet and servlet programming
java servlet and servlet programmingjava servlet and servlet programming
java servlet and servlet programming
 
Java server pages
Java server pagesJava server pages
Java server pages
 
Java Server Faces (JSF) - Basics
Java Server Faces (JSF) - BasicsJava Server Faces (JSF) - Basics
Java Server Faces (JSF) - Basics
 
Web Tech Java Servlet Update1
Web Tech   Java Servlet Update1Web Tech   Java Servlet Update1
Web Tech Java Servlet Update1
 

Destaque

Jfokus 2012: PaaSing a Java EE Application
Jfokus 2012: PaaSing a Java EE ApplicationJfokus 2012: PaaSing a Java EE Application
Jfokus 2012: PaaSing a Java EE Application
Arun Gupta
 
Sarah grier passport1
Sarah grier passport1Sarah grier passport1
Sarah grier passport1
Janet Painter
 
Cregg Laws having+what+it+takes
Cregg Laws having+what+it+takesCregg Laws having+what+it+takes
Cregg Laws having+what+it+takes
Janet Painter
 
Alex global+education
Alex global+educationAlex global+education
Alex global+education
Janet Painter
 
Healthcare Reform Seminar May 2010
Healthcare Reform Seminar May 2010Healthcare Reform Seminar May 2010
Healthcare Reform Seminar May 2010
cliff_rudolph
 
2013 03-12 Change – How long does it take?
2013 03-12 Change – How long does it take?2013 03-12 Change – How long does it take?
2013 03-12 Change – How long does it take?
Staffan Nöteberg
 
Jfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
Jfokus 2012 : The Java EE 7 Platform: Developing for the CloudJfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
Jfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
Arun Gupta
 

Destaque (17)

S314168 - What's New in Enterprise Java Bean Technology @ JavaOne Brazil 2010
S314168 - What's New in Enterprise Java Bean Technology @ JavaOne Brazil 2010S314168 - What's New in Enterprise Java Bean Technology @ JavaOne Brazil 2010
S314168 - What's New in Enterprise Java Bean Technology @ JavaOne Brazil 2010
 
XML-Free Programming : Java Server and Client Development without &lt;>
XML-Free Programming : Java Server and Client Development without &lt;>XML-Free Programming : Java Server and Client Development without &lt;>
XML-Free Programming : Java Server and Client Development without &lt;>
 
GlassFish in the Virtual World
GlassFish in the Virtual WorldGlassFish in the Virtual World
GlassFish in the Virtual World
 
Jfokus 2012: PaaSing a Java EE Application
Jfokus 2012: PaaSing a Java EE ApplicationJfokus 2012: PaaSing a Java EE Application
Jfokus 2012: PaaSing a Java EE Application
 
Sarah grier passport1
Sarah grier passport1Sarah grier passport1
Sarah grier passport1
 
Cregg Laws having+what+it+takes
Cregg Laws having+what+it+takesCregg Laws having+what+it+takes
Cregg Laws having+what+it+takes
 
Alex global+education
Alex global+educationAlex global+education
Alex global+education
 
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
 
leadership beyond words-nspra
leadership beyond words-nspraleadership beyond words-nspra
leadership beyond words-nspra
 
Healthcare Reform Seminar May 2010
Healthcare Reform Seminar May 2010Healthcare Reform Seminar May 2010
Healthcare Reform Seminar May 2010
 
Power Csba
Power CsbaPower Csba
Power Csba
 
Basketball Camp Spanien 2011
Basketball Camp  Spanien 2011Basketball Camp  Spanien 2011
Basketball Camp Spanien 2011
 
Dia 8
Dia 8Dia 8
Dia 8
 
Stage baskete Epagne flyer
Stage baskete Epagne flyerStage baskete Epagne flyer
Stage baskete Epagne flyer
 
2013 03-12 Change – How long does it take?
2013 03-12 Change – How long does it take?2013 03-12 Change – How long does it take?
2013 03-12 Change – How long does it take?
 
Jfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
Jfokus 2012 : The Java EE 7 Platform: Developing for the CloudJfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
Jfokus 2012 : The Java EE 7 Platform: Developing for the Cloud
 
Kindercamps in Spanien 2009
Kindercamps in Spanien 2009Kindercamps in Spanien 2009
Kindercamps in Spanien 2009
 

Semelhante a JavaOne India 2011 - Servlets 3.0

Java EE 6 - Deep Dive - Indic Threads, Pune - 2010
Java EE 6 - Deep Dive - Indic Threads, Pune - 2010Java EE 6 - Deep Dive - Indic Threads, Pune - 2010
Java EE 6 - Deep Dive - Indic Threads, Pune - 2010
Jagadish Prasath
 
Java EE 6 = Less Code + More Power (Tutorial) [5th IndicThreads Conference O...
Java EE 6 = Less Code + More Power (Tutorial)  [5th IndicThreads Conference O...Java EE 6 = Less Code + More Power (Tutorial)  [5th IndicThreads Conference O...
Java EE 6 = Less Code + More Power (Tutorial) [5th IndicThreads Conference O...
IndicThreads
 
Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
Tuna Tore
 
springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892
Tuna Tore
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
Nitin Pai
 

Semelhante a JavaOne India 2011 - Servlets 3.0 (20)

Java EE 6 - Deep Dive - Indic Threads, Pune - 2010
Java EE 6 - Deep Dive - Indic Threads, Pune - 2010Java EE 6 - Deep Dive - Indic Threads, Pune - 2010
Java EE 6 - Deep Dive - Indic Threads, Pune - 2010
 
Java EE 6 = Less Code + More Power (Tutorial) [5th IndicThreads Conference O...
Java EE 6 = Less Code + More Power (Tutorial)  [5th IndicThreads Conference O...Java EE 6 = Less Code + More Power (Tutorial)  [5th IndicThreads Conference O...
Java EE 6 = Less Code + More Power (Tutorial) [5th IndicThreads Conference O...
 
Java servlet technology
Java servlet technologyJava servlet technology
Java servlet technology
 
Boston 2011 OTN Developer Days - Java EE 6
Boston 2011 OTN Developer Days - Java EE 6Boston 2011 OTN Developer Days - Java EE 6
Boston 2011 OTN Developer Days - Java EE 6
 
Java EE 6 & GlassFish 3: Light-weight, Extensible, and Powerful @ Silicon Val...
Java EE 6 & GlassFish 3: Light-weight, Extensible, and Powerful @ Silicon Val...Java EE 6 & GlassFish 3: Light-weight, Extensible, and Powerful @ Silicon Val...
Java EE 6 & GlassFish 3: Light-weight, Extensible, and Powerful @ Silicon Val...
 
Servlets
ServletsServlets
Servlets
 
ADP - Chapter 2 Exploring the java Servlet Technology
ADP - Chapter 2 Exploring the java Servlet TechnologyADP - Chapter 2 Exploring the java Servlet Technology
ADP - Chapter 2 Exploring the java Servlet Technology
 
JAX-RS 2.0 and OData
JAX-RS 2.0 and ODataJAX-RS 2.0 and OData
JAX-RS 2.0 and OData
 
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnition
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnitionJava EE 6 & GlassFish = Less Code + More Power @ DevIgnition
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnition
 
Java EE 6 = Less Code + More Power
Java EE 6 = Less Code + More PowerJava EE 6 = Less Code + More Power
Java EE 6 = Less Code + More Power
 
UNIT-3 Servlet
UNIT-3 ServletUNIT-3 Servlet
UNIT-3 Servlet
 
JAVA Servlets
JAVA ServletsJAVA Servlets
JAVA Servlets
 
Wt unit 3
Wt unit 3 Wt unit 3
Wt unit 3
 
Servlet30 20081218
Servlet30 20081218Servlet30 20081218
Servlet30 20081218
 
Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
 
springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892springmvc-150923124312-lva1-app6892
springmvc-150923124312-lva1-app6892
 
Unit 07: Design Patterns and Frameworks (3/3)
Unit 07: Design Patterns and Frameworks (3/3)Unit 07: Design Patterns and Frameworks (3/3)
Unit 07: Design Patterns and Frameworks (3/3)
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
 
SCWCD : Thread safe servlets : CHAP : 8
SCWCD : Thread safe servlets : CHAP : 8SCWCD : Thread safe servlets : CHAP : 8
SCWCD : Thread safe servlets : CHAP : 8
 
Introduction tomcat7 servlet3
Introduction tomcat7 servlet3Introduction tomcat7 servlet3
Introduction tomcat7 servlet3
 

Mais de Arun Gupta

Mais de Arun Gupta (20)

5 Skills To Force Multiply Technical Talents.pdf
5 Skills To Force Multiply Technical Talents.pdf5 Skills To Force Multiply Technical Talents.pdf
5 Skills To Force Multiply Technical Talents.pdf
 
Machine Learning using Kubernetes - AI Conclave 2019
Machine Learning using Kubernetes - AI Conclave 2019Machine Learning using Kubernetes - AI Conclave 2019
Machine Learning using Kubernetes - AI Conclave 2019
 
Machine Learning using Kubeflow and Kubernetes
Machine Learning using Kubeflow and KubernetesMachine Learning using Kubeflow and Kubernetes
Machine Learning using Kubeflow and Kubernetes
 
Secure and Fast microVM for Serverless Computing using Firecracker
Secure and Fast microVM for Serverless Computing using FirecrackerSecure and Fast microVM for Serverless Computing using Firecracker
Secure and Fast microVM for Serverless Computing using Firecracker
 
Building Java in the Open - j.Day at OSCON 2019
Building Java in the Open - j.Day at OSCON 2019Building Java in the Open - j.Day at OSCON 2019
Building Java in the Open - j.Day at OSCON 2019
 
Why Amazon Cares about Open Source
Why Amazon Cares about Open SourceWhy Amazon Cares about Open Source
Why Amazon Cares about Open Source
 
Machine learning using Kubernetes
Machine learning using KubernetesMachine learning using Kubernetes
Machine learning using Kubernetes
 
Building Cloud Native Applications
Building Cloud Native ApplicationsBuilding Cloud Native Applications
Building Cloud Native Applications
 
Chaos Engineering with Kubernetes
Chaos Engineering with KubernetesChaos Engineering with Kubernetes
Chaos Engineering with Kubernetes
 
How to be a mentor to bring more girls to STEAM
How to be a mentor to bring more girls to STEAMHow to be a mentor to bring more girls to STEAM
How to be a mentor to bring more girls to STEAM
 
Java in a World of Containers - DockerCon 2018
Java in a World of Containers - DockerCon 2018Java in a World of Containers - DockerCon 2018
Java in a World of Containers - DockerCon 2018
 
The Serverless Tidal Wave - SwampUP 2018 Keynote
The Serverless Tidal Wave - SwampUP 2018 KeynoteThe Serverless Tidal Wave - SwampUP 2018 Keynote
The Serverless Tidal Wave - SwampUP 2018 Keynote
 
Introduction to Amazon EKS - KubeCon 2018
Introduction to Amazon EKS - KubeCon 2018Introduction to Amazon EKS - KubeCon 2018
Introduction to Amazon EKS - KubeCon 2018
 
Mastering Kubernetes on AWS - Tel Aviv Summit
Mastering Kubernetes on AWS - Tel Aviv SummitMastering Kubernetes on AWS - Tel Aviv Summit
Mastering Kubernetes on AWS - Tel Aviv Summit
 
Top 10 Technology Trends Changing Developer's Landscape
Top 10 Technology Trends Changing Developer's LandscapeTop 10 Technology Trends Changing Developer's Landscape
Top 10 Technology Trends Changing Developer's Landscape
 
Container Landscape in 2017
Container Landscape in 2017Container Landscape in 2017
Container Landscape in 2017
 
Java EE and NoSQL using JBoss EAP 7 and OpenShift
Java EE and NoSQL using JBoss EAP 7 and OpenShiftJava EE and NoSQL using JBoss EAP 7 and OpenShift
Java EE and NoSQL using JBoss EAP 7 and OpenShift
 
Docker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developersDocker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developers
 
Thanks Managers!
Thanks Managers!Thanks Managers!
Thanks Managers!
 
Migrate your traditional VM-based Clusters to Containers
Migrate your traditional VM-based Clusters to ContainersMigrate your traditional VM-based Clusters to Containers
Migrate your traditional VM-based Clusters to Containers
 

Último

Último (20)

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
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
 
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
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day 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...
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 

JavaOne India 2011 - Servlets 3.0

  • 1. <Insert Picture Here> Servlets 3.0 Asynchronous, Extensible, Ease-of-use Arun Gupta, Java EE & GlassFish Guy blogs.oracle.com/arungupta, @arungupta
  • 2. The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. 2
  • 3. Agenda • Overview • Ease of Development • Dynamic Registration of Servlets etc • Pluggability • Asynchronous Support • Security Enhancements • Miscellaneous 3
  • 4. Overview l Java Servlet 3.0 done as part of JSR 315 l ~20 members in the expert group –Major Java EE vendors, open source web container developers, framework authors l Main areas of focus –Ease of Development –Pluggability –Asynchronous support –Security 4
  • 5. Ease of Development l Enhanced APIs to use new Java SE language features introduced since J2SE 5.0 l Generics for type safety in API where possible l Annotations for declarative style of programming l Optional web.xml l Convention over configuration 5
  • 6. Ease of Development Use of annotations l Annotations to declare Servlets, Filters, Listeners and servlet security –@WebServlet – Define a Servlet –@WebFilter – Define a Filter –@WebListener – Define a Listener –@WebInitParam – Define init param –@MultipartConfig – Define file upload properties –@ServletSecurity – Define security constraints l Can override using “web.xml” 6
  • 7. Servlet 2.5 example At least 2 files <!--Deployment descriptor web.xml --> /* Code in Java Class */ <web-app> <servlet> package com.sun; <servlet-name>MyServlet public class MyServlet extends HttpServlet </servlet-name> { <servlet-class> public void com.sun.MyServlet doGet(HttpServletRequest </servlet-class> req,HttpServletResponse res) </servlet> { <servlet-mapping> ... <servlet-name>MyServlet </servlet-name> } <url-pattern>/myApp/* ... </url-pattern> </servlet-mapping> } ... </web-app> 7
  • 8. @WebServlet – Sample Code @WebServlet(urlPatterns={“/myApp”}) public class SimpleSample extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) { } } 8
  • 9. @WebServlet Async – Sample Code @WebServlet(urlPatterns=“/myApp”, name=”MyServlet”, asyncSupported=true) public class SimpleSample extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) { } } 9
  • 10. Dynamic Registration Create and/or register • ServletContext#add[Servlet | Filter] • Overloaded versions take [Servlet | Filter] name and – Fully qualified [Servlet | Filter] class name or – Class <? extends [Servlet | Filter]> or – [Servlet | Filter] instance • User returned Registration handle to configure all aspects of [Servlet | Filter] l ServletContext#create[Servlet | Filter] –Takes Class<? Extends [Servlet | Filter]> argument –Supports resource injection by container –Returned [Servlet | Filter] instance may be fully customized before it is registered 10
  • 11. Dynamic Registration Lookup l ServletContext#find[Servlet |Filter]Registration –Takes [Servlet | Filter] name as argument –Returned Registration handle provides subset of configuration methods –May only be used to add initialization parameters and mappings –Conflict returned as java.util.Set 11
  • 12. Dynamic Registration Register example ServletRegistration.Dynamic dynamic = servletContext.addServlet( "DynamicServlet", "com.mycom.MyServlet"); dynamic.addMapping("/dynamicServlet"); dynamic.setAsyncSupported(true); 12
  • 13. Dynamic Registration Lookup example ServletRegistration declared = servletContext.getServletRegistration("DeclaredServlet"); declared.addMapping("/declaredServlet"); declared.setInitParameter("param", "value"); 13
  • 14. Pluggability • Plugin libraries using web fragments – Modular web.xml – Absolute ordering: <absolute-ordering> – Relative ordering: <ordering>, <before>, <after> • Bundled in framework *.jar/META-INF • Zero-configuration, drag-and-drop for web frameworks – Servlets, servlet filters, context listeners for a framework get discovered and registered by the container • Only JAR files in WEB-INF/lib are used 14
  • 15. Pluggability – Sample Code <web-fragment> <filter> <filter-name>wicket.helloworld</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>...</param-value> </init-param> </filter> <filter-mapping> <filter-name>wicket.helloworld</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-fragment> http://blogs.oracle.com/arungupta/entry/totd_91_applying_java_ee 15
  • 16. Pluggability – Sample Code <web-fragment> <filter> <filter-name>LiftFilter</filter-name> <display-name>Lift Filter</display-name> <description>The Filter that intercepts lift calls</description> <filter-class>net.liftweb.http.LiftFilter</filter-class> </filter> <filter-mapping> <filter-name>LiftFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-fragment> http://blogs.oracle.com/arungupta/entry/totd_101_applying_servlet_3 16
  • 17. Extensibility ServletContainerInitializer • Shared copies of frameworks • Container installed JARs – App or Library • Discovered using the service provider API – META-INF/services/javax.servlet.ServletContainerInitializer • Expresses interest in classes via @HandlesTypes 17
  • 18. Extensibility ServletContainerInitializer • Who uses it ? – Mojarra (JSF2) is bootstrapped into GlassFish • No “faces-config.xml” or “web.xml” – Jersey (JAX-RS) registers root Application • No (or portable) “web.xml” 18
  • 19. Dynamic Registration Java Server Faces @SuppressWarnings({"UnusedDeclaration"}) @HandlesTypes({ ManagedBean.class, FacesComponent.class, FacesValidator.class, FacesConverter.class, FacesBehaviorRenderer.class, ResourceDependency.class, ResourceDependencies.class, ListenerFor.class, ListenersFor.class, UIComponent.class, Validator.class, Converter.class, Renderer.class }) public class FacesInitializer implements ServletContainerInitializer { // NOTE: Loggins should not be used with this class. private static final String FACES_SERVLET_CLASS = FacesServlet.class.getName(); 19
  • 20. Dynamic Registration Java Server Faces public void onStartup(Set<Class<?>> classes, ServletContext servletContext) throws ServletException { if (shouldCheckMappings(classes, servletContext)) { Map<String,? extends ServletRegistration> existing = servletContext.getServletRegistrations(); for (ServletRegistration registration : existing.values()) { if (FACES_SERVLET_CLASS.equals(registration.getClassName())) { // FacesServlet has already been defined, so we're // not going to add additional mappings; return; } } ServletRegistration reg = servletContext.addServlet("FacesServlet", "javax.faces.webapp.FacesServlet"); reg.addMapping("/faces/*", "*.jsf", "*.faces"); servletContext.setAttribute(RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED, Boolean.TRUE); 20
  • 21. Resource Sharing • Static and JSP not confined to document root of the web application • May be placed in WEB-INF/lib/[*.jar]/META- INF/resources • Resources in root take precedence over those in bundled JAR • Container must honor this new location when – Processing HTTP requests – Calls to ServletContext#getResource[AsStream] 21
  • 22. Resource Sharing – Sample Code myapp.war WEB-INF/lib/catalog.jar /META-INF/resources/catalog/books.html http://localhost:8080/myapp/catalog/books.html 22
  • 23. Why Asynchronous Servlets? l Not for Async IO –Requests mostly small (single packet) –Hard to asynchronously produce large responses –Async IO support waiting for NIO2 l Async Servlets are for: –Waiting for resources (eg JDBC connection) –Waiting for events (eg Chat) –Waiting for responses (eg web services) 23
  • 24. Blocking waiting consumes resources l Web Application using remote web services –Handling 1000 requests / sec –50% requests call remote web service –500 threads in container thread pool l If remote web service is slow (1000ms) –Thread starvation in 1 second! –50% of requests use all 500 threads 24
  • 25. Asynchronous API Enable asynchronous support l Configured in –web.xml: <async-supported>true</async-supported> –With annotation: @WebServlet(asyncSupported=true) –Programmatic: registration.setAsyncSupported(true) 25
  • 26. Asynchronous Servlets – Sample Code AsyncContext context = request.startAsync(); context.addListener(new AsyncListener() { … }); context.dispatch(“/request.jsp”); //context.start(Runnable action); . . . context.complete(); http://blogs.oracle.com/arungupta/entry/totd_139_asynchronous_request_processing 26
  • 27. Security Annotations to define security constraints l @ServletSecurity used to define access control constraints l @HttpConstraint for all HTTP methods l @HttpMethodConstraint for specific HTTP methods l More specific wins 27
  • 28. Security – Sample Code @ServletSecurity( httpMethodConstraints = { @HttpMethodConstraint(value = "GET", rolesAllowed = "R1"), @HttpMethodConstraint(value = "POST", rolesAllowed = "R2") } ) public class MyServlet extends HttpServlet { // Servlet methods } 28
  • 29. Security Programmatic container authentication and logout >HttpServletRequest#login(String username, String password) –Replacement for FBL –Application supervises credential collection >HttpServletRequest#authenticate(HttpServletRespo nse) –Application initiates container mediated authentication from a resource that is not covered by any authentication constraints –Application decides when authentication must occur 29
  • 30. Miscellaneous Features l Session tracking cookie configuration –Via web.xml –Programmatic via javax.servlet.SessionCookieConfig l Support for HttpOnly cookie attribute –Example: servletContext.getSessionCookieConfig().setHttpOnly(true) l Default error page <error-page> <error-code>...</error-code> <exception-type>...</exception-type> <location>/404.html</location> </error-page> 30
  • 31. Miscellaneous Features / API (contd) ServletRequest#getServletContext ServletRequest#getDispatcherType Servlet[Request| Response]Wrapper#isWrapperFor HttpServletResponse#getStatus HttpServletResponse#getHeader HttpServletResponse#getHeaders HttpServletResponse#getHeaderNames 31
  • 32. Miscellaneous Features / API (contd) File upload ServletRequest#getParts ServletRequest#getPart @MultipartConfig Changes to web.xml 32
  • 33. Summary l Major revision since Servlet 2.5 l Comprehensive set of new features enable modern style of web applications and greatly increases developer productivity l Simplifies assembly of large applications from reusable components 33
  • 34. Servlets 3.1 (JSR 340) http://jcp.org/en/jsr/detail?id=340 NEW • Cloud support • Multi-tenancy – Security / Session state / Resources isolation • Asynchronous IO based on NIO2 • Simplified Asynchronous Servlets • Utilize Java EE concurrency utilities • Enable support for Web Sockets 34
  • 35. References • oracle.com/javaee • glassfish.org • oracle.com/goto/glassfish • blogs.oracle.com/theaquarium • youtube.com/GlassFishVideos • Follow @glassfish 35
  • 36. <Insert Picture Here> Servlets 3.0 Asynchronous, Extensible, Ease-of-use Arun Gupta, Java EE & GlassFish Guy blogs.oracle.com/arungupta, @arungupta