1 / 52

JSP and web applications

JSP and web applications. Java 2 Enterprise Edition. J2EE Edition of Java Architecture specially designed for server-based applications Including web applications Highly compatible with M-V-C Client Tier Middle Tier Enterprise Information System Tier. J2EE Overview. EJB Container.

tanner
Download Presentation

JSP and web applications

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JSP and web applications

  2. Java 2 Enterprise Edition • J2EE • Edition of Java • Architecture specially designed for server-based applications • Including web applications • Highly compatible with M-V-C • Client Tier • Middle Tier • Enterprise Information System Tier

  3. J2EE Overview EJB Container application EJB EJB Database Web Container JMS JavaIDL RMI JNDI XML servlet servlet browser JSP JDBC JTA/JTS Client Tier Middle Tier EIS Tier

  4. Which J2EE components? • Pure JSP • Simple applications • Prototyping • Use M-V-C • Business logic pages (model) • presentation pages (view) • Request processing pages (controller) • Enhance with JavaBeans components and custom tags

  5. Tomcat web container Tomcat subdirectories: • bin • scripts to run Tomcat • common/lib • jar archives with javax.servlet class files • src • interface definitions for javax.servlet classes • conf • configuration files (Tomcat parameters)

  6. Tomcat web container • docs • HTML documentation about Tomcat • work • a working directory for temporary files and generated servlets • webapps • all web applications run on Tomcat are placed in subdirectories of this

  7. deploying a web application • create a subdirectory of webapps, e.g. myDir • create a WEB-INF subdirectory of myDir • WEB-INF contains • web.xml file • specifies deployment parameters for the web application • lib directory (optional) • contains any special class libraries (.jar files) needed • .classes directory • class files for servlet and helper classes defined for the specific application

  8. the web.xml file • written in XML and contains environment data • descriptions of servlet names and locations • custom tag libraries • security constraints on particular servlets • multiple url aliases for servlets • etc

  9. Creating a web app in NetBeans

  10. Creating a web app in NetBeans

  11. Creating a web app in NetBeans

  12. Creating a web app in NetBeans

  13. Creating a web app in NetBeans

  14. Creating a web app in NetBeans

  15. Creating a web app in NetBeans

  16. Adding a JSP to the Web App

  17. Adding a JSP to the Web App

  18. Adding a JSP to the Web App

  19. Adding a JSP to the Web App

  20. Running the Web App

  21. Browsing the JSP

  22. Adding custom tags to a JSP

  23. custom tags • used to farm out processing to specialised classes or Beans • identified by a tag library directive • basic JSP tag library • e.g. <jsp:useBean … /> • Apache Taglib custom tag library • JavaServerFaces, struts libraries • can define your own custom tags

  24. custom tags • defined as Java classes that extend base classes in javax.servlet.jsp.tagext package • represented in a JSP using the syntax • <lib:tag att1=“...” att1=“...” att1=“...” /> • (can also have element content) • custom tag in JSP replaced by code in the servelet on translation

  25. custom tag example package myPack; import java.util.*; import java.io.*; import javax.servelet.jsp.*; import javax.servelet.jsp.tagext .*; public class DateStamper extends TagSupport { protected String comment = null; public String getComment () { return comment; }

  26. public void setComment (String cm) { comment = cm; } public int doEndTag () { try { String dateStr = (new Date()).toString (); pageContext.getOut ().println ( “<hr>This page entitled, “ + comment + “, was printed on “ + dateStr + “<br>”); } catch (Exception e) {//error handling} return EVAL_PAGE; }}

  27. <taglib> <tlibversion>1.0 </tlibversion> <jspversion>1.1 </jspversion> <shortname>myTags</shortname> <tag> <name>DateStamper</name> <tagclass>myPack.DateStamper</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>comment</name> <required>true</required> </attribute> </tag> </taglib> tag library definition file, myTags.tld

  28. deployment in a web application <web-app> <taglib> <taglib-uri> /myTags </taglib-uri> <taglib-location> /WEB-INF/tlds/myTags.tld </taglib-location </taglib> </web-app>

  29. Tag libraries

  30. using the tag in a JSP <%@ taglib uri=“/myTagLibrary” prefix = “myTags” %> <html><head><title>Using a custom tag</title></head> <body bgcolor = “FFFFFF”> <h1>Using a custom tag</h1> <p>Hello World. My custom tag has the following to say: <myTags:DateStamper comment=“This is a custom tag” /> </body></html>

  31. JSP, Bean and Servelet example

  32. description • football league result web application • users request match results • different requests possible • database search • html front end • user interaction through web-browser • servelet/JSP request handling and data processing

  33. system architecture holds a single table Teams containing match data football.jsp highly graphic interactive results page football.html Database handles the request, submits SQL and processes result FootballSearchBean represents football game data contained in a DB table FootballGame static page to request results helper class to create the DB connection DBInfo tomcat

  34. call JSP with a search parameter call JSP with a search parameter football.html <html><head><title>Football Search</title></head> <body bgcolor = “white”> <h1>Search the football league table</h1> <ul><li> <a href = “http://localhost:8080/jspeg/football.jsp?searchType=all”> List all games </a> </li><li> <a href = http://localhost:8080/jspeg/football.jsp?searchType=drawn> List drawn matches </a> </li></ul> </body></html>

  35. to handle results of data query loads DB query result into the FootballGame object FootballGame class package football; import java.sql; public class FootballGame { private String team1,team2 private int score1, score2; public String getTeam1 () {return team1;} // similar methods to get team2, score1, score2 public void loadFromResultSet (ResultSet r) throws SQLException { team1 = r.getString (“TEAM1”); // ditto for team2 score1 = r.getInt (“SCORE1”); // ditto for score2 } }

  36. handle DB queries to use Java Iterator class set up SQL query strings searchType query parameter from football.html ends up here FootballSearchBean package football; import java.sql; import java.util; public class FootballSearchbean { private static final allstr = “select * from TEAMS”; private static final drawstr = “select * from TEAMS where SCORE1=SCORE2”; private String searchType; public void setSearchType (String type) { searchType = type; }

  37. contains results from the DB query for manipulating retrieved data counts the number of results FootballSearchBean private Vector results; public Iterator games () { if (results != null) return results.iterator (); else return null; } public int numGames () { if (results != null) return results.size (); else return 0; }

  38. connect to the database create a Statement object (SQL query) to be fired at the DB FootballSearchBean public void doSearch () { results = new Vector (); try { Connection db = DBInfo.connectToDatabase (); Statement stmt = db.createStatement (); String request = allstr; if (“drawn”.equals (searchType)) request = drawstr; // else add code for other search options

  39. fire the query at the DB and store the retrieved rows create a FootballGame object for each retrieved table row add the FootballGame to the results Vector FootballSearchBean ResultSet r = stmt.executeQuery (request); while (r.next ()) { FootballGame fg = new FootballGame (); fg.loadFromResultSet r; results.addElement (fg); } r.close (); stmt.close (); db.close (); } catch (Exception e) {// error-handling code here} } }

  40. util package for the Iterator class football package with its classes Bean created and given an Id searchType property from football.html passed to Bean here football.jsp <%@ page import = “java.util.*” %> <%@ page import = “football.*” %> <html><head><title>League Results</title></head><body> <!-- cool and flashy DHTML content inserted here by the web designer. Embedded amongst that will be: --> <h1>Results</h1> <jsp:useBean id = “theLeague” class = “football.FootballSearchBean” /> <jsp:setProperty name = “theLeague” property = “*”/>

  41. searches the database with the user selected search option determines the size of the result set and acts accordingly football.jsp <% theLeague.doSearch (); %> <% if (theLeague.numGames () == 0) { %> <p> No games played yet </p> <% } else { %> <!-- there are results so set up a table --> <table> <caption>Results</caption> <tr> <th align = “center”>Home Team</th> <th align = “center”>Home Team Score</th> <th align = “center”>Away Team</th> <th align = “center”>Away Team Score</th> </tr>

  42. creates an Iterator containing FootballGame objects explicit typecast of each object to access the get methods use expressions to insert names and scores for each game in table cells football.jsp <% Iterator it = theLeague.games (); while (it.hasNext ()) { FootballGame fg = (FootballGame) it.next (); %> <tr> <td><%= fg.getTeam1 () %> </td> <td><%= fg.getScore1 () %> </td> <td><%= fg.getTeam2 () %> </td> <td><%= fg.getScore2 () %> </td> </tr> <% } %> </table> <% } %> </body></html>

  43. some design issues • Java code in the JSP fragmented through the HTML • difficult to trace errors • brackets • parameter declarations • incorrect program logic • web designer could unwittingly break the code

  44. revised system architecture Match Report.jsp No Result.jsp football.html Database FootballSearchBean web.xml preprcessing servelet FootballGame hyperlinks now go to a pre-processing servelet DBInfo tomcat

  45. web.xml <web-app> <servelet> <servelet-name>FootballServelet</servelet-name> <servelet-class>PreprocessServelet</servelet-class> </servelet> <servelet-mapping> <servelet-name>FootballServelet</servelet-name> <url-pattern>/FootballInfo</url-pattern> </servelet-mapping> </web-app>

  46. PreprocessServelet // import all the usual servelet stuff import football.*; public class preprocessServelet extends HttpServelet { private static final String allstr = “no results available yet”; private static final String drawstr = “there have been no drawn games”; private static final String homestr = “there have been no home wins”; private static final String awaystr = “there have been no away wins”; private static final String jspFailPage = “NoResult.jsp”; private static final String jspReportPage = “MatchReport.jsp”;

  47. PreprocessServelet public void doGet () {HttpServeletRequest req, HttpServeletresponse res) throws ServeletException, IOException { String search = req.getParameter (“searchType”); FootballSearchBean fsb = new FootballSearchBean (); fsb.setSearchType (search); fsb.doSearch (); if (fsb.numGames () == 0) { doSearchFail (search, req, res); else doSuccess (fsb, req, res); }

  48. PreprocessServelet private void doSearchFail (String search, HttpServeletRequest req, HttpServeletresponse res) throws ServeletException, IOException { String reason = allstr; if (“drawn”.equals (search)) reason = drawstr; // add similar clauses for other possible reasons req.setAttribute (“Message”, reason); RequestDispatcher d = req.getRequestDispatcher (jspFailPage); d.forward (req, res); }

  49. PreprocessServelet private void doSuccess (FootballSearchBean fsb, HttpServeletRequest req, HttpServeletresponse res) throws ServeletException, IOException { req.setAttribute (“theLeague”, fsb); RequestDispatcher d = req.getRequestDispatcher (jspReportPage); d.forward (req, res); } // end of PreprocessServelet }

  50. revised JSP pages // NoResult.jsp <!-- contains the following minimal content --> <jsp:useBean scope=“request” id=“Message” class=“String”> <%= Message %> ********************************************************** //MatchReport.jsp <jsp:useBean scope=“request” id=“theLeague” class=“football.FootballSearchBean”> ... <% Iterator it = theLeague.games (); while (it.hasNext ()) { FootballGame fg = (FootballGame) it.next (); %> <tr><td><%= fg.getTeam1 () %> </td> <!-- etc. -->

More Related