From: pmz on
Dear Friends,

I was wondering whether it's possible to manage such solution:

1. I create simple servlet (let me call it MyServlet) with all of
those base methods (doPost, doGet, processRequest etc.)
2. I've mapped the servlet in web.xml, as following:

<servlet>
<servlet-name>MyServlet</servlet-name>
<jsp-file>/useServlet.jsp</jsp-file>
</servlet>

3. I'd like to play with database data and pass it into the
userServlet.jsp. I've tried to do it via init() overridden method,
with getServletContext().setAttribute("MyVar", Object), with no use -
the ${MyVar} is pretty empty.

What am I doing wrong? I'm not happy when I need to code HTML with
println() inside the servlet, anyway I've done it before, but I'm not
able to detect what I've forgot or what is missing in my configs.

All the best,
Przemek M. Zawada
From: Lew on
pmz wrote:
> I was wondering whether it's possible to manage such solution:
>
> 1. I create simple servlet (let me call it MyServlet) with all of
> those base methods (doPost, doGet, processRequest etc.)
> 2. I've mapped the servlet in web.xml, as following:
>
> <servlet>
>   <servlet-name>MyServlet</servlet-name>
>   <jsp-file>/useServlet.jsp</jsp-file>
> </servlet>
>

It's largely unnecessary to map JSPs in the web.xml. What's confusing
is that our comments say you've written a servlet, MyServlet, whose
source presumably resides in MyServlet.java, but you map it to a JSP
file. I don't understand. What is this JSP file?

> 3. I'd like to play with database data and pass it into the
> userServlet.jsp. I've tried to do it via init() overridden method,
> with getServletContext().setAttribute("MyVar", Object), with no use -
> the ${MyVar} is pretty empty.
>

How are you accessing servlet methods from a JSP?

Don't do that.

> What am I doing wrong? I'm not happy when I need to code HTML with
> println() inside the servlet, anyway I've done it before, but I'm not
> able to detect what I've forgot or what is missing in my configs.
>

Part one is the confusion over whether you're mapping a servlet (.java
source) or a JSP (.jsp source). If it's a .java servlet, it shouldn't
have any HTML (or other markup) in it at all. If it's a .jsp source
JSP, then it should have only markup with EL, and no Java scriptlet at
all.

A good model-view-controller (MVC) separation of concerns makes that
easier. Just remember:

.java servlet: controller
.jsp JSP: view
.java POJO: model

This has been mentioned in other threads you've seen.

The controller (there can be more than one, but let's stay simple for
a minute) accepts each client request, does some minimal extraction of
parameters to determine its handler, then passes the request or its
extracted parameters to the handler, a POJO (Plain Ol' Java Object).
The controller uses the request parameters and the outcome of the POJO
action to determine the next screen, a JSP. It places the handler
into the request context, then uses a RequestDispatcher#forward() call
to forward control to the next view JSP.

The view JSP builds itself using callbacks into the POJO (obtained via
EL from the request context) to get at results, e.g.,

<c:out value="#{handler.result.title}" />

No HTML in the servlet, no Java in the JSP, and (very nearly) no web-
app consciousness in the POJOs.

Look up "Model 2" architecture - weren't you part of the recent
conversations where links to this were provided?

--
Lew
From: markspace on
pmz wrote:
> Dear Friends,
>
> I was wondering whether it's possible to manage such solution:
>
> 1. I create simple servlet (let me call it MyServlet) with all of
> those base methods (doPost, doGet, processRequest etc.)
> 2. I've mapped the servlet in web.xml, as following:
>
> <servlet>
> <servlet-name>MyServlet</servlet-name>
> <jsp-file>/useServlet.jsp</jsp-file>
> </servlet>


Off the top of my head, this is normally paired with a <servlet-mapping>
element. Do you have one?


>
> 3. I'd like to play with database data and pass it into the
> userServlet.jsp. I've tried to do it via init() overridden method,
> with getServletContext().setAttribute("MyVar", Object), with no use -
> the ${MyVar} is pretty empty.


You'll have to show us the code that sets MyVar, there's no way we can
guess what might go wrong just from "${MyVar} is pretty empty." Also
include any error messages or stack traces and the exact final output.

Also, what is MyVar's type? Do you have an adequate toString() method?
What are you actually doing with MyVar? Just trying to display it
exactly as you show? The latter would be kinda wonky, imo. Normally
you invoke some property of the object.