aspose file tools*
The moose likes Servlets and the fly likes URL not getting through to servlet Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Servlets
Bookmark "URL not getting through to servlet" Watch "URL not getting through to servlet" New topic
Author

URL not getting through to servlet

Paul Hennessey
Greenhorn

Joined: Jul 23, 2005
Posts: 15
Hi all

I have some strange behaviour in my application that I don't understand. I've cut it down to the bare minimum, and will try to explain the problem.

I have a mainmenu.jsp file which looks like this:



I also have a slimmed-down controller which looks like this:



As you can see, all four of the links just return you to the same page. All, that is, apart from the fourth one, logout.do, which simply doesn't work. My Logger class, which just writes the incoming URLs to a file, registers nothing, and instead of returning to the mainmenu.jsp page I get a completely different page. The page that I'm getting is the home page of the app, which is really where I want the logout link to go, but it seems to be getting there by some weird route that doesn't involve my controller at all.


I'm approaching the hair-tearing out stage here. Can anyone suggest what might be happening?

Paul
Martin Koelowitz
Greenhorn

Joined: Aug 06, 2005
Posts: 6
Have you had a look at the log of the HTTP server?
This should show all requests that come in from the browser, maybe
it gives some more insight?

Another thing to look at might be the file in which you tell the application server to route requests to your controller servlet. It might contain a special entry for the request that behaves in a strange way.

Also, you never know, it could be that your HTML causes the problem. You should put </a> before </p>.

Good luck!


SCJP 1.4
Makarand Parab
Ranch Hand

Joined: Dec 10, 2004
Posts: 121
Paul
Check your mapping file of struts. The problem lies there is what i sense. Check out your mapping for logout.do.

Let me know...

Regards
Makarand Parab
Paul Hennessey
Greenhorn

Joined: Jul 23, 2005
Posts: 15
Hi Martin and Makarand,

Thanks for your suggestions. I've had a look at the logs and something seems to be wrong, but I don't understand the messages. I'll show you some edited highlights of the localhost.log:



SEVERE: Servlet /BeerStruts threw load() exception
java.lang.NoClassDefFoundError: org/apache/commons/collections/FastHashMap
at org.apache.struts.action.ActionServlet.<init>(ActionServlet.java:348)
.
.
.
INFO: Marking servlet org.apache.catalina.INVOKER.Kodaly-v11 as unavailable
07-Aug-2005 10:41:47 org.apache.catalina.core.ApplicationContext log
SEVERE: Error loading WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@192a848
Kodaly-v11
java.lang.ClassNotFoundException: Kodaly-v11
.
.
.
07-Aug-2005 10:41:47 org.apache.catalina.core.ApplicationContext log
SEVERE: invoker: Cannot allocate servlet instance for path /servlet/Kodaly-v11/logout.do
javax.servlet.ServletException: Wrapper cannot find servlet class Kodaly-v11 or a class it depends on
.
.
.
INFO: Marking servlet org.apache.catalina.INVOKER.logout.do as unavailable
07-Aug-2005 10:42:03 org.apache.catalina.core.ApplicationContext log
SEVERE: Error loading WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@192a848
logout.do
java.lang.ClassNotFoundException: logout.do


As you suggested, Makarand, Struts seems to be involved in these exceptions, but the odd thing is I'm not using Struts in this app, although I do have it on my system.

Can anyone suggest what might be causing these errors?

Paul
Lars Vonk
Ranch Hand

Joined: Aug 05, 2005
Posts: 30
Paul,
Did you check the web.xml to verify that the struts action servlet is not loaded at startup? Because it seems that the struts action servlet is loading on startup but is missing the commons collections jars from apache. If you don't need struts try not loading the struts action servlet at startup.
Paul Hennessey
Greenhorn

Joined: Jul 23, 2005
Posts: 15
Hi Lars,

Here is my web.xml.



As you can see, I don't explicitly load the Struts action servlet, although I admit I don't really understand everything that the header is doing, I just typed it in from the HFSJ book.

Paul
Lars Vonk
Ranch Hand

Joined: Aug 05, 2005
Posts: 30
Indeed you are not loading the struts servlet in this application. Maybe another application on your server attempts to load it? Although i am not sure if this error then relates to your problem because it is not in the same application. But maybe its worth a look.
The header information tells you you are using Servlet specification version 2.4. You should check that the version of your server supports this version. If you are using Tomcat: Tomcat 4.1 supports version 2.3, tomcat 5 supports 2.4.

Hope this helps keeping your hair
Paul Hennessey
Greenhorn

Joined: Jul 23, 2005
Posts: 15
Well, I've made some progress, but not much.

I found that there was a struts jar file in my CLASSPATH , so I removed it. After that, I stopped getting all those exceptions in the logs, so that's good.

However, the problem hasn't gone away. The logout.do link that I mentioned in my first email still goes to my homepage, index.html, when it shouldn't. I don't understand how - is there any other place that Tomcat stores mappings, other than web.xml, which I've already checked?

Even more bizarrely, the index.html that is being called shouldn't even exist any more. I've renamed it myindex.html, and have changed the text that it displays, but it is the old file that keeps appearing. This suggests to me that Tomcat caches these things somewhere, but the problem persists even afer rebooting the machine.

Paul (still tearing hair!)
ramprasad madathil
Ranch Hand

Joined: Jan 24, 2005
Posts: 489


Originally posted by Paul.
The logout.do link that I mentioned in my first email still goes to my homepage, index.html, when it shouldn't


1. Right click and view the html source. Does the link's href still point to index.html ?

2. If the answer to #1 is 'yes', force a jsp recompile. Just add a space somewhere and then delete the extra space. The timestamp would change forcing the jsp to be recompiled and then test again.


Even more bizarrely, the index.html that is being called shouldn't even exist any more.


Check #1 above. The index.html may probably be cached by the browser.

cheers,
ram.
Paul Hennessey
Greenhorn

Joined: Jul 23, 2005
Posts: 15
I've managed to make the test app that I was moaning about earlier work most of the time now - I suspect stuff was being cached by the browser as Ramprasad suggested. But my real app still isn't right. This is what I think should happen:

- Mainmenu.jsp sends logout.do to my controller servlet.
- Controller routes request to logoutAction class.
- LogoutActionclass does some tidying up, invalidates the session, then returns 'index.html' to controller.
- Controller forwards index.html to browser.

To check what's going on, my controller writes all incoming URLs to a file. The first time round, everything works fine, but after that the URL that asks for logout.do simply doesn't get sent to the controller. Despite that, my system still goes to index.html.

What this means is that it looks as if it's working, but it really isn't because my LogoutAction class with its tidying up code isn't getting called. I've worked round it for now by putting all the tidying up stuff elsewhere, but I'm still puzzled and would love to know what's going on.

Could the browser somehow be creating a map between logout.do and index.html?

Paul

Paul
Lars Vonk
Ranch Hand

Joined: Aug 05, 2005
Posts: 30
Paul,
Do I understand it correct that the first time you sends logout.do it works fine and gets logged by the Controller, but the second time and so on it doesn't get to the Controller anymore?
Do you still get exceptions in your log? Which type/version of server are you using?
Lars
Paul Hennessey
Greenhorn

Joined: Jul 23, 2005
Posts: 15
Yes, that's it, after the first time any call to logout.do does not get to the controller, it's as if the browser just switches to my home page (index.html) without bothering to send a message to the server. Very strange.

I'm using Tomcat 5.5.9.
Lars Vonk
Ranch Hand

Joined: Aug 05, 2005
Posts: 30
Hello Paul,
I tried your example application and it worked fine on my pc. Are there no more exception's in your log that gives you more information?

Maybe you can try to delete the compiled jsp's that tomcat uses from tomcat's working directory. That directory can be found in \Tomcat5.5\work\Catalina\localhost. There delete your application directory (Kodaly-v11) there and start tomcat again. (although editing your jsp should force tomcat to recompile your jsp like ramprasad said).

You can also try the TCP Tunnel that comes with Apache SOAP. With this tool you can see what request actually is send to the server (is it really asking for logout.do?). A good quick tutorial can be found here: http://builder.com.com/5100-6389-1049605.html.

Good luck!
Paul Hennessey
Greenhorn

Joined: Jul 23, 2005
Posts: 15
OK, I'll try that and let you know how I get on.

Thanks for your help.

Paul
Tauri Valor
Ranch Hand

Joined: Aug 03, 2005
Posts: 166
Try commenting the <Context path> tags in your server.xml in conf folder for all other apps . Restart and check.


A Moment's insight is sometimes worth a Life's experience.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: URL not getting through to servlet