It may seem that servlets and JSPs are mutually exclusive, but in fact they work well together. You can reduce the amount of Java coding in your JSP by passing control from a servlet to a JSP.
Model-View-Controller is a paradigm for building programs that interact well with the user. The Model is an object or collection that represents your data; the View is what the user sees; and the Controller responds to user request. Think of a slide-show (presentation) program: you probably have a text view, a slide view, and a sorter view. Yet when you change the data in any view, all the other views are updated immediately. This is because MVC allows a single model to have multiple views attached to it. MVC provides the basis for most well-designed GUI applications.
Using the Model-View-Controller paradigm, a
servlet can be the controller
and the JSP can be the view. A servlet, for example, could
receive the initial request from the form, interrogate a database
based upon the query, construct a collection of objects matching the
user’s query, and forward it to a JSP to be displayed (the
servlet can attach data it found to the request). A good example of
this is a search page, which might have only a few (or even one) form
parameters, so using a JSP with a bean to receive the results would
be overkill. A better design is to have a servlet retrieve the form
parameter and contact the search API or database. From there, it
would retrieve a list of pages matching the query. It could package
these into a Vector
or
ArrayList
, attach this to the request, and forward
it to a JSP for formatting.
The basic syntax of this is:
ArrayList searchResultsList = // get from the query RequestDispatcher disp; disp = getServletContext( ).getRequestDispatcher("searchresults.jsp"); request.setAttribute("my.search.results", searchResultsList); disp.forward(request, response);
This causes the servlet to pass the search results to the JSP. The JSP can retrieve the result set using this code:
ArrayList myList = (ArrayList) request.getAttribute("my.search.results");
You can then use a for
loop to print the contents
of the search request. Note that the URL in the
getRequestDispatcher( )
call must be a call to the
same web server, not to a server on a different port or machine.
3.15.34.39