290 likes | 414 Views
Basic Java Servlet/JSP Web Development. David Lucek Lucek Consulting www.lucek.com dave@lucek.com. Download the Sample Application. Download from www.lucek.com , select the downloads tab Includes the full source Unzip to c: drive or $HOME/lucek. What is a Servlet?.
E N D
Basic Java Servlet/JSP Web Development David Lucek Lucek Consulting www.lucek.com dave@lucek.com @2003 Lucek Consulting
Download the Sample Application • Download from www.lucek.com, select the downloads tab • Includes the full source • Unzip to c:\ drive or $HOME/lucek
What is a Servlet? • Java Servlets/JSP are part of the Sun’s J2EE Enterprise Architecture • The web development part • Java Servlet • is a simple, consistent mechanism for extending the functionality of a web server • Are precompiled Java programs that are executed on the server side. • Require a Servlet container to run in • Latest Servlet Spec is 2.3
What is a Java Server Page (JSP) • Java Server Pages (JSP) • A simplified, fast way to create dynamic web content • HTML or XML pages with embedded Java Code or Java Beans • Can be a mix of template data in HTML/XML with some dynamic content • A JSP is a complied to a Java Servlet automatically by the Servlet container, it is then cached • Latest JSP Spec is 1.2
Why Use Servlets? • Work well in a Heterogeneous Environments • OS and platform neutral • Work with all major web servers (IIS, Apache,etc..) • Well defined Web Architecture framework • Standard built in services such as: • Standard Approach to Authentication using declarative security vice programmatic security • Database connection pooling • Complete support for sessions via cookies and/or URL re-writing • Has automatic fallback to URL re-writing
Why Use Servlets Con’t? • Robust Object-Orientated API in Java language • Ever try to maintain a large ASP, Perl, or PHP site • Clean separation of Controller/Logic from Presentation • Efficient, scales very well • There are good free Servlet/JSP containers and connectors • That run under both UNIX and win32
J2EE Web Application Components • Java Servlets • Extend off of HttpServlet • JSP pages, normally for Presentation • Java Beans • Normally used as value objects, pass to data to JSPs • Tag Libraries – XML based JSP elements • Web Deployment Descriptor • /web-inf/web.xml
Web Deployment Descriptor • /web-inf/web.xml • Part of the standard • Defines servlets used in the web application • Maps servlets to URLs • A servlet can map to many URLs • Defines resources available to the web app • Defines security constraints • Defines other stuff like • Welcome file list • Session timeout • Error page mapping
J2EE Web Directory Structure 1 • Top Directory is normally the context Path • /tomcat/webapps/servletdemo • Normally, the URL would be http://localhost:8080/servletdemo • Contains JSP and other static content plus the web-inf directory • /web-inf directory • This is a protected directory, can not point browser to any file in this directory • /classes – unpacked web application classes, auto-magically added to CLASS_PATH • /lib – web application JAR files • /taglib – tag library descriptor files
J2EE Web Directory Structure 2 • /web-inf/web.xml • /web-inf/* • Would normally put any static or JSP files here • Protects them from Direct Invocation • Always best to call a JSP through a servlet first
JSP Constructs 1 • Used in JSP pages, pages that end *.jsp • Comment <%-- Comment --%> • Declaration <%! int x = 0; %> • Expression <%= expression %> • Outputs to the Response stream • Like a “printf” to the browser • Do NOT use semi-colon to terminate the line • Scriplets - contains Java Code • <% code fragments %>
JSP Constructs 2 <% if (value.getName().length != 0) { %> <H2>The value is: <%= value.getName() %></H2> <% } else { %> <H2>Value is empty</H2> <% } %> • Implicit objects always available in the JSP Page • “request” – Browser’s Request Object • Use to get HTTP headers, length etc.. • “response” - HttpResponse Object
JSP Constructs 3 • “session” – internal HttpSession Object • “pageContext” • “application” • “out”, same as <%= %> • “config” – servlet configuration • “page” • “exception” • JSP Directives • Are messages or instructions to the JSP container
JSP Constructs 4 • Do not produce any output • “page” directive • <%@ page import=“com.lucek.*” %> • Commonly used for importing class paths • “include” directive • <%@ include file=“header.htm” %> • Good for including static content • “taglib” – lists the tag library descriptor location • Required when using tab libraries
Java Beans as Used in Web Apps • Normally used for all data transfers and business components • Similar to how Java Beans are used in Swing and AWT • But do not need the full implementation • Must have no constructor or no-arg constructor • Must have setter and getter methods for each property value • JSP constructs/tags use Java Beans
JSP Actions • JSP actions are special tags that affect the output stream and are normally used with Java beans • Most commonly used: • <jsp:useBean>, <jsp:getProperty>, <jsp:setProperty> • The code below will display the lastName property of the student bean on the output stream <jsp:useBean id="student" scope="request" class="com.lucek.dto.StudentValue" /> <jsp:getProperty name="student" property="lastName" />
Servlet Container/Engine • Servlets/JSP require a Container • Apache Tomcat is the reference implementation of the Servlet/JSP Specs • It is open source, small, install quickly,and is FREE • Latest Version is 4.1.24 • Web Site: jakarta.apache.org/tomcat • It include a simple HTTP 1.1 server, good enough for development and small intranets.
Tomcat Install • Requires a JDK, get 1.4.1 and install into c:\jdk or $HOME/jdk • Add JAVA_HOME to your environment and the “bin” directory to your PATH • Good practice to unpack into c:\tomcat or $HOME/tomcat • Add CATALINA_HOME to your environment and the “bin” directory to your PATH
Tomcat Directory Structure • Everything is relative to $CATALINA_HOME • /bin – Startup/shutdown scripts • /conf • Server.xml – main configuration file • /common – common class and jar files used by Tomcat and web applications • Put JDBC drivers here • /server – class and jar files used by Tomcat internally • /shared – class and jar files for all web applications • /webapps – This is where you put your web application in a sub-directory or external context file.
Starting Tomcat • /bin/startup.bat or startup.sh • Point Browers to http://localhost:8080, should see default page • All the Docs are there on the default page! • Check out the examples pages, good tutorials
Other Development Tools 1 • Ant Build Tool • Standard Java Build tool • Basic on UNIX make, but much better • Site: http://ant.apache.org • Install in c:\ant or $HOME/ant • Java IDE • Try NetBeans, it is nice • Tomcat is built in, but is an older version • Includes full Servlet and JSP debugging • Site: www.netbeans.org
Other Development Tools 2 • Junit • Standard Automated Unit Testing Tool • Site: http://junit.sourceforge.net • Jedit • Slick Programmer’s Editor • Written in Java • Site: jedit.org
Simple Servlet Application 1 • See “servletdemo” code • Mount the servletdemo, servletdemo/java/src, and servletdemo/web in NetBeans Explorer Tab • For a Hello World Servlet look at: • Java/src/com/lucek/action/HelloWorld.java • To build and run • $ cd servletdemo • Setup the proper build variables in the build.properties file • $ ant all • $ ant deploy • Point your browsers at http://localhost:8080/servletdemo
Simple Servlet Application 2 • Look at the web.xml file and how the same servlet can be mapped to many URLs • Look at SimpleBean.java which should how to pass a Java Bean to a JSP page • Look at the different ways a bean’s value can be obtained in the EditStudent.jsp
Best Practices/Patterns • Always Separate out the logic from the presentation • Use servlets for the logic/controller and JSP’s for presentation • Ideally should never have Java Code in the JSP page • Have a clean separation between your data access and controller layers (DAO) • Always use DTO or value object • Use a Model-View-Controller Architecture • Do not write it, use Struts • Site: jakarta.apache.org/struts/ • Use Unit tests • Junit Automation via Ant build tasks
What we have not talked about • All the specific Servlet APIs • Tag libraries • Sessions, cookies • JDBC service support from the container • Container based authentication • Lots of other stuff
Next Presentation? • Create a data driven web site using MySql and Servlets/JSP • Setup Authentication Realm with declarative security • Setup JDBC connection pooling • Struts?