Now from the train..
When you request a URL such as this from Tomcat :
(http://hostname)/ABC/DEF/hij.jsp
Tomcat uses the first component of the path (/ABC) as mapping for the "web
application".
It then passes the request to the application "ABC".
*Within* that application, there are servlets or jsp pages (or any other file).
If that application contains a "WEB-INF/web.xml" file, Tomcat will look there for specific
mappings *within* the application.
That means, that it will remove the first component of the path (the one used to select
the application, such as "/ABC" above), and try to match the rest with a <url-pattern> tag.
So in this case, it will try to match "/DEF/hij.jsp".
If it finds a match, then it will pass the request to the corresponding servlet (or
compiled jsp page, which internally is the same).
If it does not find a match, then it will pass the request to the "default servlet", which
is implicitly part of every web application, and which handles basically static content
(like html pages e.g.).
What I am saying is that you must make sure that the URLs which you pass to Tomcat conform
to this mechanism.
If you pass to Tomcat a URL like :
http://yourhost/XYtest/servlet/jsp/Viewer/Viewer.jsp
then Tomcat is going to :
- use "/XYtest" to select the web application. In your case, that leads to the application
"XYtest", whose "top" is in the directory /opt/test/servlet.
- then it will strip the "/XYtest" part, and in the file /opt/test/servlet/WEB-INF/web.xml
it will look for a URL pattern matching the rest, which is "/servlet/jsp/Viewer/Viewer.jsp".
Do you have a url-pattern matching this in the web.xml file ?
No. You only have a pattern "/jsp/Viewer/*.jsp".
So something is wrong...
Instead of
<frame src="/XYtest/servlet/jsp/Viewer/View.jsp" ...
you should probably be using
<frame src="/XYtest/jsp/Viewer/View.jsp"
That is what I meant when saying that you have a "servlet" too many somewhere.
Of course, make sure that your proxy statements in Apache still match this new
URL.
Petr Hracek wrote:
You mean that in HTML file I should remove servlet?
Is this web.xml file correct?
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<display-name>Viewer</display-name>
<jsp-property-group>
<url-pattern>/jsp/Viewer/*.jsp</url-pattern>
</jsp-property-group>
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>
<taglib-location>/WEB-INF/c-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
best regards
Petr
2011/3/9 André Warnier <a...@ice-sa.com>:
Quickly, because I have to get a train..
I think that this :
<Context docBase="/opt/test/servlet" allowLinking="true">
togethet with this :
<frame src="/XYtest/servlet/jsp/Viewer/View.jsp"
is wrong. You have a "servlet" too many there.
In other words,
"/XYtest/" already points to "/opt/test/servlet".
If you say "/XYtest/servlet/x", you are pointing to
"/opt/test/servlet/servlet/x", no ?
Petr Hracek wrote:
I have changed sources so that the actuall state is following:
Apache things are in directory
/opt/test/htdocs
tomcat things are in directory
/opt/test/servlet
XYtest.xml is now:
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="/opt/test/servlet" allowLinking="true">
</Context>
And jsp are stored in
/opt/test/servlet/jsp/Viewer/View.jsp
Updated HTML file stored in /opt/test/htdocs is:
<frameset rows="63,40,*" frameborder="0">
<frame src="logo.html" name="logo" noresize scrolling="no"
marginwidth="0" marginheight="
0">
<frame src="/XYtest/servlet/jsp/Viewer/View.jsp" name="toolbar"
noresize scrolling="no"
marginwidth="0" marginhei
ght="0">
<frame src="/XYtest/servlet/jsp/Viewer/View2.jsp" name="ctrl">
</frameset>
Apache has been updated accordingly:
ProxyPass /XYtest/servlet ajp://localhost:8009/XYtest/servlet
ProxyPassReverse /XYtest/servlet ajp://localhost:8009/XYtest/servlet
Unfortunatelly it shows me: HTTP 404
message /XYtest/servlet/jsp/Viewer/View.jsp
description The requested resource
(/XYtest/servlet/jsp/Viewer/View.jsp) is not available.
What is wrong?
Other servlets which did not used JSP are working properly.
Thank you in advance
Petr
2011/3/8 André Warnier <a...@ice-sa.com>:
Petr Hracek wrote:
Dear users,
I would like to asked you on the some thing regarding JSP pages.
On the Linux whereis installed apache 2.2.14 and tomcat 5.5.28
that's an old version of Tomcat. You should be using at least a 6.0.x
version by now.
I would
like to run
JSP pages.
JSP pages should be run over mod_proxy_ajp.
URL is:
http://<IP_address>/XYtest/jsp/Viewer/index.html
ProxyPass /XYtest/*.jsp ajp://localhost:8009/XYtest
ProxyPassReverse /XYtest/*.jsp ajp://localhost:8009/XYtest
JSP page is called from HTML (index.html) and FRAME src "view.jsp"
mentioned above.
but instead of showing JSP page HTML source code is shown.
Do you know what could be a reason?
in the Catalina configuration directory
(/etc/tomcat5/base/Catalina/localhost/XYtest.xml) is following context
file
test# cat /etc/tomcat/5/base/Catalina/locahost/XYtest.xml
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="/opt/test/XYtest" allowLinking="true">
</Context>
test#
structure in Linux is:
/opt/test/XYtest/jsp/Viewer where are located files index.html and
view.jsp which is part of FRAME
As a general observation : it looks like you are trying to serve the same
directory from Apache httpd and from Tomcat. That is generally a quite
bad
idea in terms of security, and also in terms of confusion, as you are
experiencing here.
To understand what is happening, you must look at it from the browser
point
of view.
Step 1 :
Your initial html document "index.html" is :
<frameset rows="63,40,*" frameborder="0">
<frame src="logo.html" name="logo" noresize scrolling="no"
marginwidth="0" marginheight="
0">
<frame src="View.jsp" name="toolbar" noresize scrolling="no"
marginwidth="0" marginhei
ght="0">
<frame src="View2.jsp" name="ctrl">
</frameset>
and the browser loads it from the URL :
http://<IP_address>/XYtest/jsp/Viewer/index.html
Step 2 :
In this document, the browser finds a reference to another document :
<frame src="View.jsp" ..>
The browser interprets that relative URL on the base of the origin of the
current page, and then it asks the server for that document.
So the browser requests the document (the inside frame) from the URL :
http://<IP_address>/XYtest/jsp/Viewer/View.jsp
Step 3 :
The Apache httpd server receives the request for
http://<IP_address>/XYtest/jsp/Viewer/View.jsp
and it tries to match it with your proxy statement :
ProxyPass /XYtest/*.jsp ajp://localhost:8009/XYtest
It does not match (see below), so Apache httpd serves it itself, directly
from disk.
That is why you see the source : Tomcat never sees this request, and
Apache
has no idea that a ".jsp" file is anything else than text.
Now why does it not match ?
Because the ProxyPass directive does not understand wildcards or regexp.
For that, you should us "ProxyPassMatch", for example like this :
ProxyPassMatch "/XYtest/.*\.jsp$" ajp://localhost:8009/XYtest
But it is still a bad idea.
Why ?
Suppose that in the directory /opt/test/XYtest, there is a sub-directory
named "WEB-INF", and in that directory is a file "web.xml".
This file is a configuration file for your Tomcat web application, and it
may contain things like passwords for accessing a database for example.
For that reason (security), Tomcat /never/ allows a user to request a
document within the WEB-INF sub-directory of a web application.
But with your setup, anyone can ask for the URL :
http://<IP_address>/XYtest/WEB-INF/web.xml
and Apache httpd will happily return that file (also as a text file).
So, with you setup, you are bypassing an important security feature of
Tomcat, because you are allowing Apache httpd to go "around it".
There are different possibilities to fix your configuration.
The first one would be to do this in Apache :
ProxyPass /XYtest ajp://localhost:8009/XYtest
and NOT define the directory /opt/test/XYtest in any way in Apache.
That way, any request for a URL starting will /XYtest will be forwarded
directly to Tomcat, and Tomcat will happily serve html pages (like
index.html) as well as Apache.
And it knows how to handle jsp pages too.
Now, if all you want to do is serve html pages and jsp pages, you could
also
wonder if you need Apache httpd and mod_prox_ajp at all. You could set
Tomcat to answer directly on port 80, get rid of Apache httpd, and
simplify
your configuration.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org