FYI, for those interested, I had to do some code adjustments. There was a missing right curly bracket in Handler.pm (need to close the sub), and I wasn't loading DECLINED properly in Handler.pm. Here is the proper setup:
------------------------------------------------------------------- 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 DECLINED); #Loadup Apache2::Request so we know what's been passed to us use Apache2::Request; #Loadup the Main (Model) and View modules (staying true to the #Model/View/Control (MVC) (We are, Handler, or Control)) use lib "../"; use Myserver::Main; use Myserver::View; sub handler { # We are an instance method my $request = shift; my $view = Myserver::View->new(); if (my $output = $view->mainpage()) { $request->content_type('text/html'); $request->print($output); return Apache2::Const::OK; } else { return Apache2::Const::DECLINED; }; } 1; ------------------------------------------------------------------- On Thu, 2008-03-13 at 16:32 +0000, xyon wrote: > Thank you all for your advice. With that and some help from a mentor, it > is now working, with the below code: > > > Apache config: > ------------------------------------------------------------------- > PerlSwitches -I/home/Perl/ > PerlModule Myserver::Handler > <Location /admin> > SetHandler modperl > PerlResponseHandler Myserver::Handler > </Location> > ------------------------------------------------------------------- > > > > > Handler.pm: > ------------------------------------------------------------------- > sub handler { > my $request = shift; > > my $view = Myserver::View->new(); > if (my $output = $view->mainpage()) { > $request->content_type('text/html'); > $request->print($output); > return Apache2::Const::OK; > } else { > return Apache2::Const::Declined; > }; > > 1; > > ------------------------------------------------------------------- > > > > > View.pm > ------------------------------------------------------------------- > sub new { > my $class = shift; > my $self = {}; > return bless $self, $class; > } > > sub mainpage { > my $self = shift; > my $template = HTML::Template->new( > filename => '/home/Perl/tmpl/mainpage.tmpl', > cache => 1, > debug => 1, > stack_debug => 1 ); > return $template->output; > } > > 1; > ------------------------------------------------------------------- > > > > > On Thu, 2008-03-13 at 12:01 -0400, Adam Prime x443 wrote: > > SetHandler modperl doesn't bind 'print' to '$r->print'. Try SetHandler > > perl-script, or change your code to pass in the request object and use > > $r->print instead of print. > > > > Adam > > > > -----Original Message----- > > From: xyon [mailto:[EMAIL PROTECTED] > > Sent: Thursday, March 13, 2008 11:47 AM > > To: modperl > > Subject: Re: Custom Object-Oriented Module using HTML::Template > > > > 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 > > > >>> <Location /admin> > > > >>> SetHandler modperl > > > >>> PerlResponseHandler Myserver::Handler > > > >>> </Location> > > > >>> ---------------------------------------------------- > > > >>> > > > >>> > > > >>> > > > >>> > > > >>> /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 = [ > > > >>> \'<html><body bgcolor="#FF00FF">Test!</body></html> > > > >>> ' > > > >>> ]; > > > >>> > > > >>> ### HTML::Template Debug ### In output > > > >>> ### HTML::Template output Stack Dump ### > > > >>> > > > >>> $VAR1 = [ > > > >>> \'<html><body bgcolor="#FF00FF">Test!</body></html> > > > >>> ' > > > >>> ]; > > > >>> > > > >>> > > > >>> ==> /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: > > > >>> ---------------------------------------------------- > > > >>> <html><body bgcolor="#FF00FF">Test!</body></html> > > > >>> ---------------------------------------------------- > > > >>> > > > >>> > > > >>> > > > >>> > > > >>> /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: > > > >>>>> ---------------------------------------------------- > > > >>>>> <html><body bgcolor="#FF00FF">Test!</body></html> > > > >>>>> ---------------------------------------------------- > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> Output with debugging on (as above): > > > >>>>> ---------------------------------------------------- > > > >>>>> $ tests/View_mainpage.pl > > > >>>>> ### HTML::Template Debug ### In _parse: > > > >>>>> ### HTML::Template _param Stack Dump ### > > > >>>>> > > > >>>>> $VAR1 = [ > > > >>>>> \'<html><body bgcolor="#FF00FF">Test!</body></html> > > > >>>>> ' > > > >>>>> ]; > > > >>>>> > > > >>>>> Main Page..Content-Type: text/html > > > >>>>> > > > >>>>> ### HTML::Template Debug ### In output > > > >>>>> ### HTML::Template output Stack Dump ### > > > >>>>> > > > >>>>> $VAR1 = [ > > > >>>>> \'<html><body bgcolor="#FF00FF">Test!</body></html> > > > >>>>> ' > > > >>>>> ]; > > > >>>>> > > > >>>>> .OK > > > >>>>> ---------------------------------------------------- > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> Output without debugging: > > > >>>>> ---------------------------------------------------- > > > >>>>> $ tests/View_mainpage.pl > > > >>>>> Main Page..Content-Type: text/html > > > >>>>> > > > >>>>> .OK > > > >>>>> ---------------------------------------------------- > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> > > > > > > > > > >