Re: JSP Web-Development [newbie]
On 7/28/2010 12:31 PM, pmz wrote:
Dear Group,
1. At the beginning I'd like to apologize you for any mistakes or
misunderstood's, which might occur in message below, but I'm a quite
beginner in JSP so maybe some of my problems aren't really problems ;)
My Java knowledge is intermediate, but the structures of JSP or JSF or
any other frameworks is pretty bad, but I do not have any idea how to
start.
Personally, I prefer JSTL over straight JSP, to reduce jumping back and
forth between HTML and Java syntax. So iteration over a collection is
<ul>
<c:forEach var="item" items="${myObj.thingies}">
<li><c:out value="${item}" /></li>
</c:forEach>
</ul>
instead of
<ul>
<% for (Object item : myObj.getThingies()) { %>
<li><%= item %></li>
<% } <%>
</ul>
With more nesting, those separated braces get annoying fast.
2. I'm trying to build bit complex website based on JSP (which I've
done a lot in PHP, so the main idea of website engineering is quite
common for me), but I a bit confused about the architecture/structure
of a JSP webpage building. The problem is, I'm not able to imagine in
my mind, how the architecture (directory structure) should be found,
how do I divide the template files, the engine core, etc.
You can do almost anything, but don't put pages and other user-viewable
items under WEB-INF. WEB-INF is for libraries, class files, and XML
configuration files. So you could have
webapp/
pages/
jsp files
styles/
css files
images/
...
WEB-INF/
classes/
...
...
and other flatter or more nested structures as you choose.
3. What I've done in PHP, is quite simple structural solution, which
looked like following:
mainFile {
switch( __mainArgument from _GET ) {
case "myPlugin":
include "myPlugin.inc.php";
break;
/// And so on, and so on
}
}
The problem is, that the switch() java statement is not supporting
Strings - okay - so I'm not able to such as above.
I don't know PHP so I don't know what mainArgument is, but if there's a
URL parameter thing for selecting what to include, e.g.,
/myApp?thing=myPlugin, then you could do something like that with this JSTL:
<c:choose>
<c:when test='${param.thing == "myPlugin"}'>
<jsp:include page="myPlugin.jsp" />
</c:when>
...
<c:otherwise>
<jsp:include page="myDefault.jsp" />
</c:otherwise>
</c:choose>
Whether that's a good way to do this is not for me to say.
I
was wondering what about dynamic elements, which are visible in any
index.jsp (and \*\index.jsp) file? Let me show it on an example:
/// index.jsp
<html>
<body>
<div>
[DEPEND ON \%s\index.jsp CONTENT HERE] [1]
</div>
<div>
[DEFAULT CONTENT of \%s\index.jsp] [2]
</div>
</body>
</html>
The [2] position is quite simple, because it might be defined directly
in my file, but what if I include in [1] position a file, which is
also included in base index.jsp (ROOT)? There should be a submenu
display, which should display menu items regarding to the module
selected.
This may be a paradigm difference with PHP. In JSP, you don't do a lot
of including of other JSP files. That's mostly for common blocks of
HTML/JSP code, like a navigation bar.
Most of the dynamic content is created by the use of c:forEach and
c:choose and so on, along with Java object containers, like this:
<p>Welcome, <c:out value="${user.fullName}" />!</p>
where user is a session attribute set up by a backend Java application.
JSP/JSTL/JSF are used for front-end display -- the view and controller
in model-view-controller. The more complex model logic is done in Java.
Google for Java JSTL best practices and you'll get sites like
http://www.oracle.com/technetwork/articles/javase/servlets-jsp-140445.html
Javaworld, IBM and Sun/Oracle are reliable sources.