Lekcija10 - 01_Web_Applications_2013-11-07 - files-ante-lv

Download Report

Transcript Lekcija10 - 01_Web_Applications_2013-11-07 - files-ante-lv

Web Applications - Basics
Introduction to Web
• Web features
•
•
•
•
Clent/Server
HyperText Transfer Protocol
HyperText Markup Language
URL addresses
• Web server - a computer program that is
responsible for accepting HTTP requests from
clients and serving them HTTP responses
• Web application - a dynamic extension of a web
or application server
Web (HTTP) servers
• A Web server handles the HTTP protocol
• To process a HTTP request, a Web server may
•
•
•
respond with a static HTML page or image
send a redirect
delegate the dynamic response generation to some other
program such as
•
•
•
•
CGI scripts
JSPs (JavaServer Pages), servlets
server-side JavaScripts
or some other server-side technology
Web server diagram
http://www.resultantsys.com/appServer.htm
Web server features
In practice many web servers implement the
following features:
•
•
•
•
•
•
•
Authentication
Handling of static and dynamic content
HTTPS support (by SSL or TLS)
Content compression (i.e. by gzip encoding)
Virtual hosting
Large file support
Bandwidth throttling
Web server statistics
Web server software vendors statistics
http://news.netcraft.com/archives/web_server_survey.html
Totals for Active Sites Across All Domains:
Web server statistics
Web server software vendors statistics
http://news.netcraft.com/archives/web_server_survey.html
Application servers
• Application server is responsible for handling the
business logic of the system
• Separation of business logic from the presentation
logic and the database logic: 3-tier architecture
http://www.cavehill.uwi.edu/fpas/cmp/online/cs14k/client_server_model/webserver.htm
Application server diagram
Application servers extend web servers to support dynamic content
http://www.resultantsys.com/appServer.htm
Application server features
• The application server manages its own resources
and may provide features such as:
•
Security
•
Transaction management
•
Database connection pooling
•
Clustering support
•
Messaging
• Most application servers also contain a Web server
Web Applications & Components
• Web application is a dynamic extension of a web
or application server
• Two types of web applications:
•
•
Presentation-oriented (HTML, XML pages)
Service-oriented (Web services)
• Web components provide the dynamic extension
capabilities for a web server:
•
•
•
Java servlets
JSP pages
Web service endpoints
Web Application Interaction
•
[client] sends an HTTP request to the web server
•
[web server] HTTP request  HTTPServletRequest
•
This object is delivered to a web component, which can
interact with JavaBeans or a DB to generate dynamic
content
•
[web component] generates an HTTPServletResponse or
pass the request to another web component
•
[web server] HTTPServletResponse  HTTP response
•
[web server] returns HTTP response to the client
Web Application Interaction
Java Enterprise Edition
• Java EE is a comprehensive platform for multiuser, enterprise-wide applications
• It is based on Java SE
and adds APIs
for Internet-based
server-side
computing
http://docs.oracle.com/javaee/7/tutorial/doc/
Java EE architecture
Java EE defines an architecture for implementing
services through the use of a Java EE server as
multi-tier applications that deliver the scalability,
accessibility, and manageability needed by
enterprise-level applications
•
The business and presentation logic has to be
implemented by the developer
•
The standard system services are provided by the
Java EE platform
Java EE versions
• J2EE 1.2 (December 12, 1999)
• Java EE 5 (May 11, 2006)
• Java EE 6 (Dec 10, 2009)
• Java EE 7 (May 28, 2013)
Java EE 7 technologies
• Web Application Technologies
•
•
•
Java Servlet 3.1
JavaServer Pages 2.3
JavaServer Faces 2.2
• Web Services Technologies
•
JAX-RS 2.0, JAX-WS 2.2, JAXB 2.2, StAX …
• Enterprise Application Technologies
•
EJB 3.2, JMS 2.0, JPA 2.1, JTA 1.2, JavaMail 1.5…
http://www.oracle.com/technetwork/java/javaee/tech/index.html
Java EE components
• Java EE applications are made up of components
• A Java EE component is a self-contained
functional software unit that is assembled into a
Java EE application with its related classes and
files and that communicates with other
components
Java EE components
• Components are compiled in the same way as any
program in the Java language
• Components are assembled into a Java EE
application, are verified to be in compliance with
the Java EE specification, and are deployed to
production, where they are run and managed by a
Java EE server
Java Web Application Technologies
Java Servlet technology is the foundation of all
the web application technologies
Servlets and JSPs
• Servlets - Java classes that dynamically process
requests and construct responses
• JSP pages - text-based documents that execute as
servlets, but allow a more natural approach to
creating static content
• Appropriate usage
•
•
Servlets - service-oriented applications, control
functions
JSP - generating text-based markup
(HTML, SVG, WML, XML)
Web Containers
• Web components are supported by the services of
a runtime platform called a web container
• In Java EE, a web container "implements the web
component contract of the Java EE architecture“
• Web container services:
•
•
•
•
•
request dispatching
security
concurrency
life-cycle management
naming, transactions, email APIs
Web Container Examples
• Non-commercial
•
•
•
Apache Tomcat
Jetty
Commertial
• Sun Java System Application Server
• BEA WebLogic Server
• Oracle Application Server
• WebSphere
• Open source
•
JBoss
Deployment
• Web components have to be installed or
deployed to the web container
• Aspects of web application behaviour can be
configured during application deployment
• The configuration information is maintained in a
XML file called a web application deployment
descriptor
Web Application Development
• A web application consists of:
•
•
•
Web components
Static resource files (such as images, css)
Helper classes and libraries
• The process for creating and running a web
application is different from that of traditional
stand-alone Java classes
Development Cycle
1. Develop the web component code
2. Develop the web application deployment
descriptor
3. Compile the web application components and
helper classes referenced by the components
4. Optionally package the application into a
deployable unit
5. Deploy the application into a web container
6. Access a URL that references the web
application
Web Modules
• According to Java EE architecture and Java
Servlet Specification:
•
Web components and static web content files
such as images are called web resources
•
A web module is the smallest deployable and
usable unit of web resources
•
Web module corresponds to a web application
• A web module has a specific structure
Web Module Structure
•
The top-level directory
of a web module is the
document root of
the application
•
The document root contains:
• JSP pages
• client-side classes
• client-side archives
• static web resources
Web Module Structure
•
The document root contains
a subdirectory /WEB-INF/
•
web.xml: web application
deployment descriptor
•
lib: JAR archives of
libraries called by
server-side classes
Web Module Structure
classes: server-side classes:
servlets
utility classes
JavaBeans components
tags: tag files, which are
implementations of
tag libraries
Configuring Web Applications
• Web applications are configured via (optional)
deployment descriptor
/WEB-INF/web.xml file
• Configuration options:
•
•
•
•
•
Map URLs to web components
Set initialization parameters
Map errors to error screens
Declare welcome files
Declare resource references
Mapping URLs to Web Components
• When a request is received by the web container
it must determine which web component should
handle the request
• Need to add a servlet definition and a servlet
mapping for each servlet to web.xml file
<servlet>
<servlet-name>ServletName</servlet-name>
<servlet-class>ServletClass</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletName</servlet-name>
<url-pattern>/path</url-pattern>
</servlet-mapping>
Initialization Parameters
• It's possible to pass initialization parameters to
the context or to a web component
• Context parameters:
<context-param>
<param-name>name</param-name>
<param-value>value</param-value>
</context-param>
• Servlet parameters (within servlet definition):
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
Handling Errors
• Web container generates default error page
• You can specify custom default page to be
displayed instead
• Steps to handle errors
•
•
Create appropriate error HTML pages for error
conditions
Modify the web.xml accordingly
Example: Setting Error Pages
<error-page>
<exception-type>
exception.BookNotFoundException
</exception-type>
<location>/errorpage1.html</location>
</error-page>
<error-page>
<exception-type>
exception.BooksNotFoundException
</exception-type>
<location>/errorpage2.html</location>
</error-page>
<error-page>
<exception-type>
exception.OrderException
</exception-type>
<location>/errorpage3.html</location>
</error-page>
Example: web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Your team project name</display-name>
<description>Team N servlets</description>
<context-param>
<param-name>name_of_context_initialization_parameter</param-name>
<param-value>value_of_context_initializtion_parameter</param-value>
</context-param>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.web.demo.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
</web-app>
WAR Files
• A web module can be deployed as an unpacked
file structure or can be packaged in a JAR file
known as a Web Archive File
• WAR file can be created by:
•
•
•
•
executing jar command
using Ant target
using IDE (Eclipse for instance)
using Maven
Setting a Context Root
• A context root identifies a web application in a
Java EE server
• The server is responsible for mapping URL’s that
start with a specific prefix to the location of a
web application
• Usually this is done with a web server
configuration file
Using Maven & Jetty
• A convenient way to develop, build, deploy and
run Web application is by using:
• Maven build tool
http://maven.apache.org/
• Jetty web server
http://www.mortbay.org/
Creating Directory Structure
• Maven supports the notion of creating a complete
project template with a simple command
• To create Web project template need to use
maven-archetype-webapp archetype type in
a single line:
mvn archetype:create
-DgroupId=com.maven2example
-DartifactId=maven2example_webapp
-DarchetypeArtifactId=maven-archetype-webapp
Maven Web Directory Structure
<root>/src/main/webapp/
- directory structure for a WAR
Packaging
• Executing the command
mvn package
creates a WAR file
Running with Jetty
• It’s easy to run application by using Jetty plugin
for Maven
• Jetty is an open-source, standards-based, fullfeatured web server implemented entirely in Java
• First created in 1995
• Stable release: 9.0.4 / 2013-06-26
Jetty Maven Plugin
• Useful for rapid development and testing
• You can add it to any webapp project that is
structured according to the usual Maven defaults
• The plugin can then periodically scan your
project for changes and automatically redeploy
the webapp if any are found
http://www.eclipse.org/jetty/documentation/current/jettymaven-plugin.html
Running with Jetty
• Add the Jetty plugin to the pom.xml
<build>
<finalName>maven2example_webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.13.v20130916</version>
</plugin>
</plugins>
</build>
Running with Jetty
• Execute mvn jetty:run command
>mvn jetty:run
[INFO] Scanning for projects...
. . .
[INFO] --- jetty-maven-plugin:8.1.13.v20130916:run (default-cli)
@ servlet-jpa-app --[INFO] Configuring Jetty for project: servlet-jpa-app
[INFO] webAppSourceDirectory not set. Defaulting to
C:\tmp\servlet-jpa-app\src\main\webapp
[INFO] Reload Mechanic: automatic
[INFO] Classes = C:\tmp\servlet-jpa-app\target\classes
[INFO] Context path = /servlet-jpa-app
[INFO] Tmp directory = C:\tmp\servlet-jpa-app\target\tmp
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
[INFO] Web overrides = none
[INFO] web.xml file = file:/C:/tmp/servlet-jpa-app/src/main/webapp/WEB-INF/web.xml
[INFO] Webapp directory = C:\tmp\servlet-jpa-app\src\main\webapp
...
[INFO] Started Jetty Server
Stop by Ctrl+C
Opening the Application
Open your web browser to
http://localhost:8080/
Context Path Configuration
<build>
<finalName>maven2example_webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.13.v20130916</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webApp>
<contextPath>/my-super-app</contextPath>
</webApp>
</configuration>
</plugin>
</plugins>
</build>
Now valid URL is:
http://localhost:8080/my-super-app
Opening the Application
Open your web browser to
http://localhost:8080/
Resources
•
Introduction to Java Platform, Enterprise Edition 7
http://www.oracle.com/technetwork/java/javaee/javaee7whitepaper-1956203.pdf
•
The Java EE 7 Tutorial
http://download.oracle.com/javaee/7/tutorial/doc/
•
Article “App server, Web server: What's the difference?”
http://www.javaworld.com/javaqa/2002-08/01-qa-0823appvswebserver.html
Resources
•
Building Web Applications with Maven 2
http://today.java.net/pub/a/today/2007/03/01/building-webapplications-with-maven-2.html
•
Jetty Maven Plugin
http://www.eclipse.org/jetty/documentation/current/jettymaven-plugin.html