tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From André Warnier ...@ice-sa.com>
Subject Re: JSP pages are not loaded. Only HTML source code
Date Wed, 09 Mar 2011 16:02:06 GMT
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 <aw@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 <aw@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-unsubscribe@tomcat.apache.org
>>>> For additional commands, e-mail: users-help@tomcat.apache.org
>>>>
>>>>
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>
> 
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message