How to get Server/Servlet Context without HttpServlet or HttpServletRequest? [duplicate]
up vote
0
down vote
favorite
This question already has an answer here:
Using special auto start servlet to initialize on startup and share application data
1 answer
Suppose I host a JavaEE WebApp on Payara/Glassfish (or any other WebContainer for that matter).
I would reach the Servlets under the address https://a.b/appname/myservleturlpattern
or as https://a.b/myservleturlpattern
if the VirtualServer-Config points to the app as default.
Usually I can get that address easily inside any HttpServlet (ServletContext).
But now, when I'm running a Background task (@Schedule) in a non-servlet class, how would I get that address?
What I want: get the app's base address https://a.b/appname/
or as https://a.b/
from any class, especially from non-Servlet classes. (Cant get and don't need the myservleturlpattern
because I'm not in a servlet.)
So far, my only idea is to listen to all my Servlets (extending the same custom HttpServlet anyway) and on the first call set a static variable, but thats really really unclean and hack-isch.
Any better ideas?
java-ee web-applications
marked as duplicate by BalusC
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 8 at 20:32
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
up vote
0
down vote
favorite
This question already has an answer here:
Using special auto start servlet to initialize on startup and share application data
1 answer
Suppose I host a JavaEE WebApp on Payara/Glassfish (or any other WebContainer for that matter).
I would reach the Servlets under the address https://a.b/appname/myservleturlpattern
or as https://a.b/myservleturlpattern
if the VirtualServer-Config points to the app as default.
Usually I can get that address easily inside any HttpServlet (ServletContext).
But now, when I'm running a Background task (@Schedule) in a non-servlet class, how would I get that address?
What I want: get the app's base address https://a.b/appname/
or as https://a.b/
from any class, especially from non-Servlet classes. (Cant get and don't need the myservleturlpattern
because I'm not in a servlet.)
So far, my only idea is to listen to all my Servlets (extending the same custom HttpServlet anyway) and on the first call set a static variable, but thats really really unclean and hack-isch.
Any better ideas?
java-ee web-applications
marked as duplicate by BalusC
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 8 at 20:32
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
What do you want from the servlet context?
– Lev Kuznetsov
Nov 8 at 11:29
What I want: get the app's base address a.b/appname or as a.b from any class, especially from non-Servlet classes. (Cant get and don't need the myservleturlpattern because I'm not in a servlet.)
– JayC667
Nov 8 at 12:23
1
You can't get that information without a request. The container isn't aware of any of the routes a client may reach it, which is actually almost always numerous. It's available with a request because the client tells the container how it called the container. If you have to have this information I suggest you instead make an endpoint available and use a cron job to call it externally. Ideally your app should not depend on this, it makes deployments difficult. Your own solution doesn't work: what if no requests are made before the schedule?
– Lev Kuznetsov
Nov 8 at 12:35
Yeah, I know that my solution is not the best. Ticket stackoverflow.com/questions/53206594/… has exactly the same problems as I do... Thought I can guarantee that I will not be behind load balancing or proxies.
– JayC667
Nov 8 at 12:38
Proper Linkt to other topic: stackoverflow.com/questions/675730/…
– JayC667
Nov 8 at 12:51
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
This question already has an answer here:
Using special auto start servlet to initialize on startup and share application data
1 answer
Suppose I host a JavaEE WebApp on Payara/Glassfish (or any other WebContainer for that matter).
I would reach the Servlets under the address https://a.b/appname/myservleturlpattern
or as https://a.b/myservleturlpattern
if the VirtualServer-Config points to the app as default.
Usually I can get that address easily inside any HttpServlet (ServletContext).
But now, when I'm running a Background task (@Schedule) in a non-servlet class, how would I get that address?
What I want: get the app's base address https://a.b/appname/
or as https://a.b/
from any class, especially from non-Servlet classes. (Cant get and don't need the myservleturlpattern
because I'm not in a servlet.)
So far, my only idea is to listen to all my Servlets (extending the same custom HttpServlet anyway) and on the first call set a static variable, but thats really really unclean and hack-isch.
Any better ideas?
java-ee web-applications
This question already has an answer here:
Using special auto start servlet to initialize on startup and share application data
1 answer
Suppose I host a JavaEE WebApp on Payara/Glassfish (or any other WebContainer for that matter).
I would reach the Servlets under the address https://a.b/appname/myservleturlpattern
or as https://a.b/myservleturlpattern
if the VirtualServer-Config points to the app as default.
Usually I can get that address easily inside any HttpServlet (ServletContext).
But now, when I'm running a Background task (@Schedule) in a non-servlet class, how would I get that address?
What I want: get the app's base address https://a.b/appname/
or as https://a.b/
from any class, especially from non-Servlet classes. (Cant get and don't need the myservleturlpattern
because I'm not in a servlet.)
So far, my only idea is to listen to all my Servlets (extending the same custom HttpServlet anyway) and on the first call set a static variable, but thats really really unclean and hack-isch.
Any better ideas?
This question already has an answer here:
Using special auto start servlet to initialize on startup and share application data
1 answer
java-ee web-applications
java-ee web-applications
edited Nov 8 at 12:23
asked Nov 8 at 11:12
JayC667
659718
659718
marked as duplicate by BalusC
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 8 at 20:32
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by BalusC
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 8 at 20:32
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
What do you want from the servlet context?
– Lev Kuznetsov
Nov 8 at 11:29
What I want: get the app's base address a.b/appname or as a.b from any class, especially from non-Servlet classes. (Cant get and don't need the myservleturlpattern because I'm not in a servlet.)
– JayC667
Nov 8 at 12:23
1
You can't get that information without a request. The container isn't aware of any of the routes a client may reach it, which is actually almost always numerous. It's available with a request because the client tells the container how it called the container. If you have to have this information I suggest you instead make an endpoint available and use a cron job to call it externally. Ideally your app should not depend on this, it makes deployments difficult. Your own solution doesn't work: what if no requests are made before the schedule?
– Lev Kuznetsov
Nov 8 at 12:35
Yeah, I know that my solution is not the best. Ticket stackoverflow.com/questions/53206594/… has exactly the same problems as I do... Thought I can guarantee that I will not be behind load balancing or proxies.
– JayC667
Nov 8 at 12:38
Proper Linkt to other topic: stackoverflow.com/questions/675730/…
– JayC667
Nov 8 at 12:51
add a comment |
What do you want from the servlet context?
– Lev Kuznetsov
Nov 8 at 11:29
What I want: get the app's base address a.b/appname or as a.b from any class, especially from non-Servlet classes. (Cant get and don't need the myservleturlpattern because I'm not in a servlet.)
– JayC667
Nov 8 at 12:23
1
You can't get that information without a request. The container isn't aware of any of the routes a client may reach it, which is actually almost always numerous. It's available with a request because the client tells the container how it called the container. If you have to have this information I suggest you instead make an endpoint available and use a cron job to call it externally. Ideally your app should not depend on this, it makes deployments difficult. Your own solution doesn't work: what if no requests are made before the schedule?
– Lev Kuznetsov
Nov 8 at 12:35
Yeah, I know that my solution is not the best. Ticket stackoverflow.com/questions/53206594/… has exactly the same problems as I do... Thought I can guarantee that I will not be behind load balancing or proxies.
– JayC667
Nov 8 at 12:38
Proper Linkt to other topic: stackoverflow.com/questions/675730/…
– JayC667
Nov 8 at 12:51
What do you want from the servlet context?
– Lev Kuznetsov
Nov 8 at 11:29
What do you want from the servlet context?
– Lev Kuznetsov
Nov 8 at 11:29
What I want: get the app's base address a.b/appname or as a.b from any class, especially from non-Servlet classes. (Cant get and don't need the myservleturlpattern because I'm not in a servlet.)
– JayC667
Nov 8 at 12:23
What I want: get the app's base address a.b/appname or as a.b from any class, especially from non-Servlet classes. (Cant get and don't need the myservleturlpattern because I'm not in a servlet.)
– JayC667
Nov 8 at 12:23
1
1
You can't get that information without a request. The container isn't aware of any of the routes a client may reach it, which is actually almost always numerous. It's available with a request because the client tells the container how it called the container. If you have to have this information I suggest you instead make an endpoint available and use a cron job to call it externally. Ideally your app should not depend on this, it makes deployments difficult. Your own solution doesn't work: what if no requests are made before the schedule?
– Lev Kuznetsov
Nov 8 at 12:35
You can't get that information without a request. The container isn't aware of any of the routes a client may reach it, which is actually almost always numerous. It's available with a request because the client tells the container how it called the container. If you have to have this information I suggest you instead make an endpoint available and use a cron job to call it externally. Ideally your app should not depend on this, it makes deployments difficult. Your own solution doesn't work: what if no requests are made before the schedule?
– Lev Kuznetsov
Nov 8 at 12:35
Yeah, I know that my solution is not the best. Ticket stackoverflow.com/questions/53206594/… has exactly the same problems as I do... Thought I can guarantee that I will not be behind load balancing or proxies.
– JayC667
Nov 8 at 12:38
Yeah, I know that my solution is not the best. Ticket stackoverflow.com/questions/53206594/… has exactly the same problems as I do... Thought I can guarantee that I will not be behind load balancing or proxies.
– JayC667
Nov 8 at 12:38
Proper Linkt to other topic: stackoverflow.com/questions/675730/…
– JayC667
Nov 8 at 12:51
Proper Linkt to other topic: stackoverflow.com/questions/675730/…
– JayC667
Nov 8 at 12:51
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
ServletContextListener serves exactly this purpose but there may be better solutions depending on what you want to do with with it
Awesome! Thanx! Didnt think about the initializers...
– JayC667
Nov 8 at 12:33
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
ServletContextListener serves exactly this purpose but there may be better solutions depending on what you want to do with with it
Awesome! Thanx! Didnt think about the initializers...
– JayC667
Nov 8 at 12:33
add a comment |
up vote
1
down vote
accepted
ServletContextListener serves exactly this purpose but there may be better solutions depending on what you want to do with with it
Awesome! Thanx! Didnt think about the initializers...
– JayC667
Nov 8 at 12:33
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
ServletContextListener serves exactly this purpose but there may be better solutions depending on what you want to do with with it
ServletContextListener serves exactly this purpose but there may be better solutions depending on what you want to do with with it
answered Nov 8 at 11:38
Lev Kuznetsov
1,8751923
1,8751923
Awesome! Thanx! Didnt think about the initializers...
– JayC667
Nov 8 at 12:33
add a comment |
Awesome! Thanx! Didnt think about the initializers...
– JayC667
Nov 8 at 12:33
Awesome! Thanx! Didnt think about the initializers...
– JayC667
Nov 8 at 12:33
Awesome! Thanx! Didnt think about the initializers...
– JayC667
Nov 8 at 12:33
add a comment |
What do you want from the servlet context?
– Lev Kuznetsov
Nov 8 at 11:29
What I want: get the app's base address a.b/appname or as a.b from any class, especially from non-Servlet classes. (Cant get and don't need the myservleturlpattern because I'm not in a servlet.)
– JayC667
Nov 8 at 12:23
1
You can't get that information without a request. The container isn't aware of any of the routes a client may reach it, which is actually almost always numerous. It's available with a request because the client tells the container how it called the container. If you have to have this information I suggest you instead make an endpoint available and use a cron job to call it externally. Ideally your app should not depend on this, it makes deployments difficult. Your own solution doesn't work: what if no requests are made before the schedule?
– Lev Kuznetsov
Nov 8 at 12:35
Yeah, I know that my solution is not the best. Ticket stackoverflow.com/questions/53206594/… has exactly the same problems as I do... Thought I can guarantee that I will not be behind load balancing or proxies.
– JayC667
Nov 8 at 12:38
Proper Linkt to other topic: stackoverflow.com/questions/675730/…
– JayC667
Nov 8 at 12:51