Upload
billdigman
View
328
Download
1
Embed Size (px)
DESCRIPTION
http://wiki4.caucho.com/Java_EE_Tutorial_covering_JSP_2.2,_and_Servlets_3.0This tutorial focuses on using Servlet's and JSP the right way. Servlet and JSP have evolved over the years, and now there is often more than one way to do things. For example, this tutorial uses EL and JSTL not JSP scriptlets, it uses JSPs in a Model 2/MVC style not in a model 1 style, etc. Consider it a tutorial that focuses only on the best practices and not the legacy ways to do things.There are other tutorials on this subject, but this tutorial is going to be different in that it is going to put all code into github, and you can follow along with Eclipse. Also instead of focusing on JSF, we are going to focus on JSP and Servlets as the main view technology.Java EE, JSP and Servlets have added a lot of features that are in other frameworks, making those other frameworks less relevant then they were before Java EE garnered these extra abilities. Even is you decide to use JSF, Struts, Stripes, Spring MVC, JSF, etc., this tutorial should help you have a better understanding of the JSP/Servlets core that they build on.We are going to start by building a simple bookstore. We will progressively add more features to the bookstore and as we do we will use more of Java EE/CDI, JSP and Servlets.For this tutorial, I am going to use Resin 4.0.x, but you could use any Java EE 6 Web Profile compliant application server.
Citation preview
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Java EE Servlet/JSP Tutorial
Second cookbook, getting started with Model 2: Servlet and JSPImplementing the Edit/Update, Add
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
•This cookbook in the Java EE Servlet /JSP tutorial covers building CRUD Operations in a Model 2 architecture
•This is a continuation of Building a simple listing in JSP using Java EE and Servlets (Part 1).
•This is part 2, must do part 1 first
•Part 1 Slides
•Covers working with Servlet doGet/doPost methods, JSTL, redirec8on versus forwarding
Cookbook: Intro to Serlvets and JSP
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
• Very liNle knowledge of HTML, Java and JSP is assumed
• HTML and Java not covered length, but pointers in the right direc8on
• Focus is Java Servlets and JSP (Java Server Pages)
• Use whatever IDE you would like, but direc8ons focus on Eclipse
Redux: About tutorial
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Redux: App you are building
Sorting
Remove
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Outline• 1 Java EE Servlet Tutorial: Implementing a basic CRUD listing• 2 Adding a link to the book listing to edit a book
• 2.1 Adding an edit book link to book-list.jsp listing• 3 Adding a link to the book listing to add a book
• 3.1 Adding an add book link to book-list.jsp listing• 4 Servlet doGet to load a Book form
• 4.1 BookEditorServlet.java doGet• 4.2 BookEditorServlet.java doGet() delegate to book-form.jsp page• 4.3 BookEditorServlet.java doGet() delegate to book-form.jsp page
• 5 Rendering the book form HTML• 5.1 book-form.jsp Renders form to update or add a Book• 5.2 book-form.jsp using JSTL c:choose to display update or add status• 5.3 book-form.jsp using JSTL c:if to hidden id field for edit/update operation
• 6 Creating a doPost method to handle the form submission• 6.1 BookEditorServlet.java doPost
• 7 Quick review of what we have so far• 7.1 ./WebContent/WEB-INF/pages/book-form.jsp full listing• 7.2 ./WebContent/WEB-INF/pages/book-list.jsp full listing• 7.3 ./src/META-INF/beans.xml full listing• 7.4 ./src/com/bookstore/Book.java• 7.5 ./src/com/bookstore/BookRepositoryImpl.java full listing (testing only)• 7.6 ./src/com/bookstore/BookRepository.java full listing• 7.7 ./src/com/bookstore/web/BookEditorServlet.java• 7.8 ./src/com/bookstore/web/BookListServlet.java
• 8 Technical debt• 9 Cookbooks and Tutorials
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Where we leX off in last example• BookListServlet uses a BookRepository object (DAO) to load a list of books
• BookListServlet then delegated to book-‐list.jsp to render the book lis8ng with JSTL and Unified EL
• In this cookbook,
• add a link to the book lis9ng for edi9ng a book
• add a link so that the end user can add a new book to the lis9ng
• Create backend Servlets to handle new links on book lis9ng
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Model 2 MVCModel View Controller
•Book•BookRepositoryImpl•BookRepository
•book-form.jsp•book-list.jsp
•BookListingServlet•BookEditorServlet
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Add a new link to book-‐lis8ng.jsp• Add link to edit opera8on
• Edit opera8on pulls up form with details of Book 8tle that is clicked
• Uses <a href=””
• Uses expression pageContext.request.contextPath/book to address new Edit Servlet
• Servlet created later, id parameter implies edit opertaion
• EL expression pageContext.request.contextPath refers to the URI, web app (war file) is mapped to in Servlet container
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Edit Link on Title
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
What gets rendered• The following links with URI (/bookstore) of webapp get rendered when book-‐
lis8ng.jsp loads
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Adding a “add a book” link to book lis8ng
• Now that links are going to URI /book,
• You need a Servlet that handles links
• For add opera9on and edit opera9on
• New BookEditorServlet will handle both add and edit book func8ons
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Add Link Above Table
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
BookEditorServlet•@WebServlet("/book") maps BookEditorServlet to the URI /book
• Common to load a form from a doGet method, and to handle the form submission via doPost
• Follows REST and HTTP principles GET opera8ons reads data,
• later POST data modifies data
• doGet method uses id being empty or not to
• determine if this is a load "Add Book Form" or
• load "Update Book Form" opera9on
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
BookEditorServlet
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
BookEditorServlet.doGet loads edit/add form
Edit Link
Add Link
doGet is load form operation
book-form.jsp
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Model 2 and BookEditorServlet.doGet• In Model 2, Servlets (controllers/ac8ons) prepares model data for the view
• This includes date formagng
Notice “book” is mapped into request scope
“book” will get used from book-form.jsp
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
Model 2 and BookEditorServlet.doGet (cont)• To render the HTML form, the servlet delegates to book-‐form.jsp
book-form.jsp
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
book-‐form.jsp (1 of 3)• book-‐form.jsp renders form to edit book
• If book.id present then edit opera8on, otherwise add opera8on
• JSTL c:choose, c:otherwise to display correct 9tle based on Update (Edit) or Add opera9on
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
book-‐form.jsp (2 of 3)• Uses Unified EL to render values and then just plain HTML for form fields
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
book-‐form.jsp (3 of 3)• hidden id property is rendered if edit (Update) opera8on
• Cancel buNon takes them back to lis8ng (/book/ is lis8ng).
• Submit buNon POST form to BookEditorServlet.doPost (defined next)
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
BookEditorServlet.doPost()• if id request parameter is null then BookEditorServlet.doPost calls bookRepo.addBook,
• otherwise it calls bookRepo.updateBook
• Then, doPost redirects to /book/
• redirect means an extra hit to the server,
• basically telling browser to load another link
• Not forward like before because of bookmarking
• Remember URL /book/ (ending in slash) represents a collec9on of books, while /book (no slash) represents a single book
• If doPost did a forward, then browser would show wrong link for lis9ng
• Use sendRedirect instead of a forward for bookmarking
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
BookEditorServlet.doPost()
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
BookEditorServlet.doPostbook-form.jsp
BookListServlet
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
• Book Form
• ./WebContent/WEB-‐INF/pages/book-‐form.jsp
• Book Lis8ng
• ./WebContent/WEB-‐INF/pages/book-‐list.jsp
• Needed for Java EE dependency injec8on (CDI)
• ./src/META-‐INF/beans.xml
• Domain/model object
• ./src/com/bookstore/Book.java
• Repository implementa8on using Java collec8ons (just for tes8ng)
• ./src/com/bookstore/BookRepositoryImpl.java
• Interface to Book Repository so we can swap it out with JDBC, JPA, JCache and MongoDB version later
• ./src/com/bookstore/BookRepository.java
• Servlet that loads Book (doGet) form and handles Book form submissions (doPost).
./src/com/bookstore/web/BookEditorServlet.java
• Servlet that looks up a list of books and displays the lis8ng
./src/com/bookstore/web/BookListServlet.java
Review of CRUD lis8ng
RESIN PRO Web Profile Health System Cloud Support
Open%Source,%Reliable%and%Lightweight%Java%EE%Applica;on%Server%
Caucho Home | Contact Us | Caucho Blog | Wiki | Applica8on Server
• Caucho Technology | Home Page
• Resin | Applica8on Server
• Resin | Java EE Web Profile Applica8on Server
• Resin -‐ Cloud Support | 3G -‐ Java Clustering
• Resin | Java CDI | Dependency Injec8on / IoC
• Resin -‐ Health System | Java Monitoring and Server Monitoring
• Download Resin | Applica8on Server
•Watch Resin | Applica8on Server Featured Video
More Info