poco
poco copied to clipboard
PageCompiler: Extracted page write from handleRequest
Hi. I would like to use the Poco PageCompiler to create HTML emails, so I made these tweaks. I hope you will find it useful.
Thanks.
Example: Input page template
<%@ page class="TimeHandler" %>
<%!
#include "Poco/DateTime.h"
#include "Poco/DateTimeFormatter.h"
#include "Poco/DateTimeFormat.h"
using Poco::DateTime;
using Poco::DateTimeFormatter;
using Poco::DateTimeFormat;
%><%
DateTime now;
std::string dt(DateTimeFormatter::format(now, DateTimeFormat::SORTABLE_FORMAT));
%>
<html>
<head>
<title>Time Sample</title>
</head>
<body>
<h1>Time Sample</h1>
<p><%= dt %></p>
</body>
</html>
Output header TimeHandler.h:
#ifndef TimeHandler_INCLUDED
#define TimeHandler_INCLUDED
#include "Poco/Net/HTTPRequestHandler.h"
namespace Poco {
namespace Net {
class HTMLForm;
}
}
class TimeHandler: public Poco::Net::HTTPRequestHandler
{
public:
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response) override;
void stringify(std::ostream &responseStream, Poco::Net::HTMLForm &form);
};
#endif // TimeHandler_INCLUDED
Ouput source TimeHandler.cpp:
#include "TimeHandler.h"
#include "Poco/Net/HTTPServerRequest.h"
#include "Poco/Net/HTTPServerResponse.h"
#include "Poco/Net/HTMLForm.h"
#line 2 "/mnt/projects/Projects/poco/build/bin/aaa/page.cpsp"
#include "Poco/DateTime.h"
#include "Poco/DateTimeFormatter.h"
#include "Poco/DateTimeFormat.h"
using Poco::DateTime;
using Poco::DateTimeFormatter;
using Poco::DateTimeFormat;
using namespace std::string_literals;
void TimeHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
{
response.setChunkedTransferEncoding(true);
response.setContentType("text/html"s);
Poco::Net::HTMLForm form(request, request.stream());
std::ostream& responseStream = response.send();
stringify(responseStream, form);
}
void TimeHandler::stringify(std::ostream &responseStream, [[maybe_unused]] Poco::Net::HTMLForm &form)
{
responseStream << "\n";
#line 11 "/mnt/projects/Projects/poco/build/bin/aaa/page.cpsp"
DateTime now;
std::string dt(DateTimeFormatter::format(now, DateTimeFormat::SORTABLE_FORMAT));
responseStream << "\n";
responseStream << "<html>\n";
responseStream << "<head>\n";
responseStream << "<title>Time Sample</title>\n";
responseStream << "</head>\n";
responseStream << "<body>\n";
responseStream << "<h1>Time Sample</h1>\n";
responseStream << "<p>";
#line 21 "/mnt/projects/Projects/poco/build/bin/aaa/page.cpsp"
responseStream << ( dt );
responseStream << "</p>\n";
responseStream << "</body>\n";
responseStream << "</html>\n";
responseStream << "\n";
}
Example use with MailMessage:
Poco::Net::MailMessage message;
std::stringstream sstr;
TimeHandler msg;
Poco::Net::HTMLForm form;
msg.stringify(sstr, form);
message.setContentType("text/html; charset=UTF-8");
message.setContent(sstr.str(), Poco::Net::MailMessage::ENCODING_8BIT);