The comprehensive Wrox guide for creating Java web applications for the enterprise
This guide shows Java software developers and software engineers how to build complex web applications in an enterprise environment. You'll begin with an introduction to the Java Enterprise Edition and the basic web application, then set up a development application server environment, learn about the tools used in the development process, and explore numerous Java technologies and practices. The book covers industry-standard tools and technologies, specific technologies, and underlying programming concepts.
Java is an essential programming language used worldwide for both Android app development and enterprise-level corporate solutionsAs a step-by-step guide or a general reference, this book provides an all-in-one Java development solutionExplains Java Enterprise Edition 7 and the basic web application, how to set up a development application server environment, which tools are needed during the development process, and how to apply various Java technologiesCovers new language features in Java 8, such as Lambda Expressions, and the new Java 8 Date& Time API introduced as part of JSR 310, replacing the legacy Date and Calendar APIsDemonstrates the new, fully-duplex WebSocket web connection technology and its support in Java EE 7, allowing the reader to create rich, truly interactive web applications that can push updated data to the client automaticallyInstructs the reader in the configuration and use of Log4j 2.0, Spring Framework 4 (including Spring Web MVC), Hibernate Validator, RabbitMQ, Hibernate ORM, Spring Data, Hibernate Search, and Spring SecurityCovers application logging, JSR 340 Servlet API 3.1, JSR 245 JavaServer Pages (JSP) 2.3 (including custom tag libraries), JSR 341 Expression Language 3.0, JSR 356 WebSocket API 1.0, JSR 303/349 Bean Validation 1.1, JSR 317/338 Java Persistence API (JPA) 2.1, full-text searching with JPA, RESTful and SOAP web services, Advanced Message Queuing Protocol (AMQP), and OAuth
Professional Java for Web Applications is the complete Wrox guide for software developers who are familiar with Java and who are ready to build high-level enterprise Java web applications.
Introduction xxiii
Part I: Creating Enterprise Applications
Chapter 1: Introducing Java Platform, Enterprise Edition 3
A Timeline of Java Platforms 3
Understanding the Basic Web Application Structure 13
Summary 18
Chapter 2: Using Web Containers 19
Choosing a Web Container 19
Installing Tomcat on Your Machine 23
Deploying and Undeploying Applications in Tomcat 27
Debugging Tomcat from Your IDE 30
Summary 39
Chapter 3: Writing Your First Servlet 41
Creating a Servlet Class 42
Configuring a Servlet for Deployment 46
Understanding doGet(), doPost(), and Other Methods 51
Using Parameters and Accepting Form Submissions 56
Configuring your Application Using Init Parameters 61
Uploading Files from a Form 64
Making Your Application Safe for Multithreading 69
Summary 71
Chapter 4: Using JSPs to Di splay Content 73
is Easier Than output.println() 74
Creating Your First JSP 78
Using Java within a JSP (and Why You Shouldnt!) 88
Combining Servlets and JSPs 94
A Note about JSP Documents (JSPX) 102
Summary 104
Chapter 5: Maintaining State Using Sessions 105
Understanding Why Sessions are Necessary 106
Using Session Cookies and URL Rewriting 107
Storing Data in a Session 116
Applying Sessions Usefully 129
Clustering an Application That Uses Sessions 139
Summary 142
Chapter 6: U sing the Expression Language in JSPs 143
Understanding Expression Language 144
Writing with the EL Syntax 147
Using Scoped Variables in EL Expressions 160
Accessing Collections with the Stream API 167
Replacing Java Code with Expression Language 172
Summary 175
Chapter 7: U sing the Java Standard Tag Library 177
Introducing JSP Tags and the JSTL 178
Using the Core Tag Library (C Namespace) 182
Using the Internationalization and Formatting Tag Library (FMT Namespace) 193
Using the Database Access Tag Library (SQL Namespace) 203
Using the XML Processing Tag Library (X Namespace) 205
Replacing Java Code with JSP Tags 205
Summary 208
Chapter 8: Writing Custom Tag and Function Libraries 209
Understanding TLDs, Tag Files, and Tag Handlers 210
Creating Your First Tag File to Serve as an HTML Template 219
Creating a More Useful Date Formatting Tag Handler 221
Creating an EL Function to Abbreviate Strings 226
Replacing Java Code with Custom JSP Tags 227
Summary 232
Chapter 9: Improving Your Application Using Filters 233
Understanding the Purpose of Filters 234
Creating, Declaring, and Mapping Filters 235
Ordering Your Filters Properly 239
Investigating Practical Uses for Filters 247
Simplifying Authentication with a Filter 254
Summary 255
Chapter 10: Making Your Application Interactive with WebSockets 257
Evolution: From Ajax to WebSockets 258
Understanding the WebSocket APIs 268
Creating Multiplayer Games with WebSockets 273
Using WebSockets to Communicate in a Cluster 284
Adding Chat with Support to the Customer Support Application 288
Summary 296
Chapter 11: Using Logging to Monitor Your Application 297
Understanding the Concepts of Logging 298
Using Logging Levels and Categories 303
Choosing a Logging Framework 305
Integrating Logging into Your Application 312
Summary 320
Part II: Adding Spring Framework Into the Mix
Chapter 12: Introducing Spring Framework 323
What is Spring Framework? 324
Why Spring Framework? 326
Understanding Application Contexts 327
Bootstrapping Spring Framework 329
Configuring Spring Framework 336
Utilizing Bean Definition Profiles 349
Summary 353
Chapter 13: Replacing Your Servlets with Controllers 355
Understanding @RequestMapping 356
Using Spring Frameworks Model and View Pattern 370
Making Your Life Easier with Form Objects 380
Updating the Customer Support Application 384
Summary 387
Chapter 14: Using Services and Repositories to Support Your Controllers 389
Understanding Model-View-Controller Plus Controller-Service-Repository 390
Using the Root Application Context Instead of a Web Application Context 394
Improving Services with Asynchronous and Scheduled Execution 404
Applying Logic Layer Separation to WebSockets 409
Summary 416
Chapter 15: Internationalizing Your Application with Spring Framework i18n 417
Why Do You Need Spring Framework i18n? 418
Using the Basic Internationalization and Localization APIs 419
Configuring Internationalization in Spring Framework 424
Internationalizing Your Code 430
Summary 440
Chapter 16: Using JSR 349, Spring Framework, and Hibernate Validator for Bean Validation 441
What is Bean Validation? 442
Configuring Validation in the Spring Framework Container 445
Adding Constraint Validation Annotations to Your Beans 450
Configuring Spring Beans for Method Validation 458
Writing Your Own Validation Constraints 466
Integrating Validation in the Customer Support Application 470
Summary 472
Chapter 17: Creating RESTful and SOAP Web Services 473
Understanding Web Services 474
Configuring RESTful Web Services with Spring MVC 484
Testing Your Web Service Endpoints 496
Using Spring Web Services for SOAP 500
Summary 508
Chapter 18: Using Messaging and Clustering for Flexibility and Reliability 509
Recognizing When You Need Messaging and Clustering 510
Adding Messaging Support to your Application 520
Making your Messaging Distributable Across a Cluster 525
Distributing Events with AMQP 534
Summary 540
Part III: Persisting Data with JPA and Hibernate ORM
Chapter 19: Introducing Java Persistence API and Hibernate ORM 543
What is Data Persistence? 543
What is an Object-Relational Mapper? 547
A Brief Look at Hibernate ORM 552
Preparing a Relational Database 559
A Note About Maven Dependencies 564
Summary 564
Chapter 20: Mapping Entities to Tables with JPA Annotations 565
Getting Started with Simple Entities 566
Creating and Using a Persistence Unit 581
Mapping Complex Data Types 590
Summary 596
Chapter 21: Using JPA in Spring Framework Repositories 597
Using Spring Repositories and Transactions 598
Configuring Persistence in Spring Framework 602
Creating and Using JPA Repositories 610
Converting Data with DTOs and Entities 624
Summary 632
Chapter 22: Eliminating Boilerplate Repositories with Spring Data JPA 633
Understanding Spring Datas Unified Data Access 634
Configuring and Creating Spring Data JPA Repositories 646
Refactoring the Customer Support Application 656
Summary 661
Chapter 23: Searching for Data with JPA and Hibernate Search 663
An Introduction to Searching 664
Using Advanced Criteria to Locate Objects 666
Taking Advantage of Full-Text Indexes with JPA 676
Indexing Any Data with Apache Lucene and Hibernate Search 684
Summary 692
Chapter 24: Creating Advanced Mappings and Custom Data Types 693
Whats Left? 694
Converting Nonstandard Data Types 695
Embedding POJOs Within Entities 699
Defining Relationships Between Entities 703
Addressing Other Common Situations 709
Creating Programmatic Triggers 717
Refining the Customer Support Application 720
Summary 725
Part IV: Securing Your Application with Spring Security
Chapter 25: Introducing Spring Security 729
What is Authentication? 729
Why Spring Security? 743
Summary 746
Chapter 26: Authenticating Users with Spring Security 747
Choosing and Configuring an Authentication Provider 748
Writing Your Own Authentication Provider 766
Summary 778
Chapter 27: Using Authorization Tags and Annotations 779
Authorizing by Declaration 780
Understanding Authorization Decisions 794
Creating Access Control Lists for Object Security 798
Adding Authorization to Customer Support 804
Summary 814
Chapter 28: Securing RESTful Web Services with OAuth 815
Understanding Web Service Security 816
Introducing OAuth 818
Using Spring Security OAuth 833
Finishing the Customer Support Application 840
Creating an OAuth Client Application 856
Summary 862
Index 865