Good suggestion, I moved the content_type to the top of the handler routine in Handler.pm, so it now looks like: ------------------------------------------------------------------- sub handler { my $self = shift; $self->content_type('text/html'); my $view = Myserver::View->new(); $view->mainpage; # Obligatory stuff for the handler return Apache2::Const::OK; } ------------------------------------------------------------------- I am still getting a blank page, though. Here is the latest lwp-request output: ------------------------------------------------------------------- $ lwp-request -s -U -S -e -m GET "http://localhost/admin/" GET http://localhost/admin/ User-Agent: lwp-request/2.07 GET http://localhost/admin/ --> 200 OK Connection: close Date: Thu, 13 Mar 2008 15:45:08 GMT Server: Apache Content-Length: 0 Content-Type: text/html; charset=UTF-8 Client-Date: Thu, 13 Mar 2008 15:45:09 GMT Client-Peer: 127.0.0.1:80 Client-Response-Num: 1 ------------------------------------------------------------------- On Thu, 2008-03-13 at 16:38 +0100, André Warnier wrote: > Hi. > > First, don't take my suggestions as gospel, I don't know the TT2 and do > not really know how you're supposed to work with it. > But it seems to me that this is in the wrong order : > > $view->mainpage; > $self->content_type('text/html'); > > I think you should trigger the HTTP header before you generate the > content. Now, whether that is the reason of your current problem or > not, I haven't a clue. > > But I'm trying, and I'm really interested, because I am starting to want > to know more about TT2 (and Catalyst) these days. So your > "from-the-very beginning" approach is also very helpful to me. > (And I do have a certain experience of Apache2/mod_perl2) > > And, re-check your lwp-request switches, you might have disabled the > display of the response content (remove the -d). > > André > > > > xyon wrote: > > Thanks for the reply. > > > > I thought as you did (that there were too many "Content-Type" > > definitions), so commented out this line in the View.pm module, but that > > doesn't seem to have changed anything: > > > > 'print "Content-Type: text/html\n\n";' > > > > > > > > > > Here is the lwp command and output: > > ------------------------------------------------------------------- > > $ lwp-request -e -S -s -U -m GET -Sed "http://localhost/admin/" > > GET http://localhost/admin/ > > User-Agent: lwp-request/2.07 > > > > GET http://localhost/admin/ --> 200 OK > > Connection: close > > Date: Thu, 13 Mar 2008 15:24:23 GMT > > Server: Apache > > Content-Length: 0 > > Content-Type: text/html; charset=UTF-8 > > Client-Date: Thu, 13 Mar 2008 15:24:23 GMT > > Client-Peer: 127.0.0.1:80 > > Client-Response-Num: 1 > > ------------------------------------------------------------------- > > > > > > On Thu, 2008-03-13 at 16:11 +0100, André Warnier wrote: > >> Hi. > >> > >> First, a small disgression : along with perl, comes a beautiful test > >> tool for HTTP stuff, called "lwp-request". > >> Like, at the command-line : > >> lwp-request (to see the options) > >> lwp-request -m GET -Sed "http://myserver/myURL" > >> (that will show you what you get as a response, without a browser > >> getting in the way) > >> > >> Then, below, are you not now sending one "Content-type" too many ? > >> It looks like you are doing it once in handler(), and once in mainpage(). > >> > >> André > >> > >> xyon wrote: > >>> That worked great with the test script ( print $template->output; ), but > >>> unfortunately, I'm having trouble getting the display onto a web page > >>> (via the Handler). The resulting web page is blank, with no source. > >>> > >>> > >>> Below are my Apache configs for the handler, logs, and the handler and > >>> view module's latest code. I've also included the test script code, just > >>> in case there is some obvious reason it would work and the handler > >>> won't. > >>> > >>> > >>> > >>> > >>> Apache config: > >>> ---------------------------------------------------- > >>> PerlRequire /etc/httpd/perl/startup.pl > >>> > >>> SetHandler modperl > >>> PerlResponseHandler Myserver::Handler > >>> > >>> ---------------------------------------------------- > >>> > >>> > >>> > >>> > >>> /etc/httpd/perl/startup.pl: > >>> ---------------------------------------------------- > >>> use lib qw(/home/Perl/); > >>> 1; > >>> ---------------------------------------------------- > >>> > >>> > >>> > >>> > >>> Apache log: > >>> ---------------------------------------------------- > >>> ==> /var/log/httpd/error_log <== > >>> ### HTML::Template Debug ### In _parse: > >>> ### HTML::Template _param Stack Dump ### > >>> > >>> $VAR1 = [ > >>> \'Test! > >>> ' > >>> ]; > >>> > >>> ### HTML::Template Debug ### In output > >>> ### HTML::Template output Stack Dump ### > >>> > >>> $VAR1 = [ > >>> \'Test! > >>> ' > >>> ]; > >>> > >>> > >>> ==> /var/log/httpd/ssl_request_log <== > >>> [13/Mar/2008:10:48:38 -0400] 10.5.5.5 TLSv1 DHE-RSA-AES256-SHA > >>> "GET /admin/ HTTP/1.1" - > >>> > >>> ==> /var/log/httpd/ssl_access_log <== > >>> 10.5.5.5 - - [13/Mar/2008:10:48:38 -0400] "GET /admin/ HTTP/1.1" 200 - > >>> ---------------------------------------------------- > >>> > >>> > >>> > >>> > >>> /home/Perl/Myserver/Handler.pm > >>> ---------------------------------------------------- > >>> package Myserver::Handler; > >>> > >>> #Setup some essentials > >>> use strict; #strict tolerance for code > >>> use Carp; #debugging > >>> use diagnostics; #more debugging > >>> use warnings; #more debugging > >>> > >>> #Handler-related stuff > >>> use Apache2::RequestRec (); > >>> use Apache2::RequestIO (); > >>> use Apache2::Const -compile => qw(OK); > >>> > >>> sub handler { > >>> my $self = shift; > >>> > >>> my $view = Myserver::View->new(); > >>> $view->mainpage; > >>> > >>> # Obligatory stuff for the handler > >>> $self->content_type('text/html'); > >>> return Apache2::Const::OK; > >>> > >>> } > >>> > >>> 1; > >>> > >>> ---------------------------------------------------- > >>> > >>> > >>> > >>> > >>> /home/Perl/Myserver/View.pm: > >>> ---------------------------------------------------- > >>> package Myserver::View; > >>> > >>> #Setup some essentials > >>> use strict; #strict tolerance for code > >>> use Carp; #debugging > >>> use diagnostics; #more debugging > >>> use warnings; #more debugging > >>> > >>> #Loadup some needed functions > >>> use HTML::Template; > >>> > >>> sub new { > >>> my $self = shift; > >>> return $self; > >>> } > >>> > >>> sub mainpage { > >>> my $self = shift; > >>> my $template = HTML::Template->new( > >>> filename => '/home/Perl/tmpl/mainpage.tmpl', > >>> cache => 1, > >>> debug => 1, > >>> stack_debug => 1 ); > >>> print "Content-Type: text/html\n\n"; > >>> print $template->output; > >>> return $self; > >>> } > >>> > >>> 1; > >>> ---------------------------------------------------- > >>> > >>> > >>> > >>> > >>> /home/Perl/tmpl/mainpage.tmpl: > >>> ---------------------------------------------------- > >>> Test! > >>> ---------------------------------------------------- > >>> > >>> > >>> > >>> > >>> /home/Perl/tests/View_mainpage.pl > >>> ---------------------------------------------------- > >>> #!/usr/bin/perl -w > >>> > >>> # Test printing of the main page > >>> print "Main Page.."; > >>> > >>> #Let's load the view module > >>> use lib "../"; > >>> use Myserver::View; > >>> #Now let's load some things that are very handy > >>> use strict; #strict tolerance for code > >>> use Carp; #debugging > >>> use warnings; #more debugging > >>> use diagnostics; #even more debugging > >>> > >>> # Let's create an object > >>> my $view = Myserver::View->new; > >>> > >>> # Now, let's tell View to display the main page > >>> $view->mainpage; > >>> > >>> print ".OK"; > >>> > >>> 1; > >>> ---------------------------------------------------- > >>> > >>> > >>> > >>> > >>> On Thu, 2008-03-13 at 13:29 +0800, Foo JH wrote: > >>>> try print $template->output; > >>>> > >>>> You forgot the print(); > >>>> > >>>> xyon wrote: > >>>>> Hey everyone, > >>>>> > >>>>> Firstly, I apologize I sent the previous email under an incorrect subject line. > >>>>> > >>>>> I am working on my first Object-Oriented project, and have hit a slight > >>>>> snag. I am using HTML::Template to output within the View module, but it > >>>>> never outputs. I don't see any errors in the logs, I just get a blank > >>>>> page. Below is pertinent information including a test script with its > >>>>> output: > >>>>> > >>>>> > >>>>> > >>>>> OS Info: > >>>>> ---------------------------------------------------- > >>>>> CentOS release 4.6 (Final) > >>>>> ---------------------------------------------------- > >>>>> > >>>>> > >>>>> > >>>>> Package info: > >>>>> ---------------------------------------------------- > >>>>> perl-5.8.8-11 > >>>>> perl-HTML-Template-2.9-1 > >>>>> httpd-2.0.59-1.el4s1.10.el4.centos > >>>>> mod_perl-2.0.3-1.el4s1.3 > >>>>> ---------------------------------------------------- > >>>>> > >>>>> > >>>>> > >>>>> /home/perl/Myserver/View.pm > >>>>> ---------------------------------------------------- > >>>>> package Myserver::View; > >>>>> > >>>>> #Setup some essentials > >>>>> use strict; #strict tolerance for code > >>>>> use Carp; #debugging > >>>>> use diagnostics; #more debugging > >>>>> use warnings; #more debugging > >>>>> > >>>>> #Loadup some needed functions > >>>>> use HTML::Template; > >>>>> > >>>>> sub new { > >>>>> my $self = shift; > >>>>> return $self; > >>>>> } > >>>>> > >>>>> sub mainpage { > >>>>> my $self = shift; > >>>>> my $template = HTML::Template->new( filename => > >>>>> '/home/Perl/tmpl/mainpage.tmpl', > >>>>> cache => 1, > >>>>> debug => 1, > >>>>> stack_debug => 1 ); > >>>>> print "Content-Type: text/html\n\n"; > >>>>> $template->output; > >>>>> return $self; > >>>>> } > >>>>> > >>>>> 1; > >>>>> ---------------------------------------------------- > >>>>> > >>>>> > >>>>> > >>>>> /home/Perl/tests/View_mainpage.pl > >>>>> ---------------------------------------------------- > >>>>> #!/usr/bin/perl -w > >>>>> > >>>>> # Test printing of the main page > >>>>> print "Main Page.."; > >>>>> > >>>>> #Let's load the view module > >>>>> use lib "../"; > >>>>> use Myserver::View; > >>>>> #Now let's load some things that are very handy > >>>>> use strict; #strict tolerance for code > >>>>> use Carp; #debugging > >>>>> use warnings; #more debugging > >>>>> use diagnostics; #even more debugging > >>>>> > >>>>> # Let's create an object > >>>>> my $view = Myserver::View->new; > >>>>> > >>>>> # Now, let's tell View to display the main page > >>>>> $view->mainpage; > >>>>> > >>>>> print ".OK"; > >>>>> > >>>>> 1; > >>>>> ---------------------------------------------------- > >>>>> > >>>>> > >>>>> > >>>>> /home/Perl/tmpl/mainpage.tmpl: > >>>>> ---------------------------------------------------- > >>>>> Test! > >>>>> ---------------------------------------------------- > >>>>> > >>>>> > >>>>> > >>>>> Output with debugging on (as above): > >>>>> ---------------------------------------------------- > >>>>> $ tests/View_mainpage.pl > >>>>> ### HTML::Template Debug ### In _parse: > >>>>> ### HTML::Template _param Stack Dump ### > >>>>> > >>>>> $VAR1 = [ > >>>>> \'Test! > >>>>> ' > >>>>> ]; > >>>>> > >>>>> Main Page..Content-Type: text/html > >>>>> > >>>>> ### HTML::Template Debug ### In output > >>>>> ### HTML::Template output Stack Dump ### > >>>>> > >>>>> $VAR1 = [ > >>>>> \'Test! > >>>>> ' > >>>>> ]; > >>>>> > >>>>> .OK > >>>>> ---------------------------------------------------- > >>>>> > >>>>> > >>>>> > >>>>> Output without debugging: > >>>>> ---------------------------------------------------- > >>>>> $ tests/View_mainpage.pl > >>>>> Main Page..Content-Type: text/html > >>>>> > >>>>> .OK > >>>>> ---------------------------------------------------- > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > > > >