Passing result from java class to servlet class?

I would like to know if there is some way to share a variable or an object between two or more Servlets, I mean some "standard" way. I suppose that this is not a good practice but is a easier way to build a prototype.

I don't know if it depends on the technologies used, but I'll use Tomcat 5.5



I want to share a Vector of objects of a simple class (just public attributes, strings, ints, etc). My intention is to have a static data like in a DB, obviously it will be lost when the Tomcat is stopped. (it's just for Testing)

Replay

I think what you're looking for here is request, session or application data.

In a servlet you can add an object as an attribute to the request object, session object or servlet context object:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    String shared = "shared";
    request.setAttribute("sharedId", shared); // add to request
    request.getSession().setAttribute("sharedId", shared); // add to session
    this.getServletConfig().getServletContext().setAttribute("sharedId", shared); // add to application context
    request.getRequestDispatcher("/URLofOtherServlet").forward(request, response);
}

If you put it in the request object it will be available to the servlet that is forwarded to until the request is finished:

request.getAttribute("sharedId");

If you put it in the session it will be available to all the servlets going forward but the value will be tied to the user:

request.getSession().getAttribute("sharedId");

Until the session expires based on inactivity from the user.

Is reset by you:

request.getSession().invalidate();

Or one servlet removes it from scope:

request.getSession().removeAttribute("sharedId");

If you put it in the servlet context it will be available while the application is running:

this.getServletConfig().getServletContext().getAttribute("sharedId");

Until you remove it:

this.getServletConfig().getServletContext().removeAttribute("sharedId");

Depends on the scope of the intended use of the data.

If the data is only used on a per-user basis, like user login info, page hit count, etc. use the session object (httpServletRequest.getSession().get/setAttribute(String [,Object]))

If it is the same data across multiple users (total web page hits, worker threads, etc) use the ServletContext attributes. servlet.getServletCongfig().getServletContext().get/setAttribute(String [,Object])). This will only work within the same war file/web applicaiton. Note that this data is not persisted across restarts either.

Put it in one of the 3 different scopes.

request - lasts life of request

session - lasts life of user's session

application - lasts until applciation is shut down

You can access all of these scopes via the HttpServletRequest variable that is passed in to the methods that extend from the HttpServlet class

Couldn't you just put the object in the HttpSession and then refer to it by its attribute name in each of the servlets?

e.g:

getSession().setAttribute("thing", object);

...then in another servlet:

Object obj = getSession.getAttribute("thing");

Another option, share data betwheen contexts...

share-data-between-servlets-on-tomcat

  <Context path="/myApp1" docBase="myApp1" crossContext="true"/>
  <Context path="/myApp2" docBase="myApp2" crossContext="true"/>

On myApp1:

  ServletContext sc = getServletContext();
  sc.setAttribute("attribute", "value");

On myApp2:

  ServletContext sc = getServletContext("/myApp1");
  String anwser = (String)sc.getAttribute("attribute");

Category: java Time: 2008-09-23 Views: 1

Related post

iOS development

Android development

Python development

JAVA development

Development language

PHP development

Ruby development

search

Front-end development

Database

development tools

Open Platform

Javascript development

.NET development

cloud computing

server

Copyright (C) avrocks.com, All Rights Reserved.

processed in 0.121 (s). 12 q(s)