:- package(servlet). servlet_init(Servlet) :- info(servlet_init(Servlet)). servlet_destroy(Servlet) :- info(servlet_destroy(Servlet)). servlet_post(Servlet, Request, Response) :- % called on "POST" info(servlet_post(Servlet, Request, Response)), minserve(Servlet, Request, Response). servlet_get(Servlet, Request, Response) :- % called on "GET" info(servlet_get(Servlet, Request, Response)), minserve(Servlet, Request, Response). minserve(Servlet, Request, Response) :- info(minserve(Servlet, Request, Response)), request_get_parameter_values(Request,'radio1',[Type|_]), info(request_get_parameter_values(Request,'Type',[Type|_])), '_init_stream'(Type,Response,Stream), info('init_stream'(Type,Response,Stream)), '_collect_parameters'(Request,Parameterss), info('collect_parameters'(Request,Parameterss)), '_write_parameters'(Type,Parameterss, Stream), info('write_parameters'(Type,Parameterss, Stream)), info('done'). % info(+Term) - log something to server log info(Term) :- writeq(Term),nl,flush_output. '_collect_parameters'(Request,Parameterss) :- request_get_parameter_names(Request,Names), findall(name_values(Name,ValuesOfName), ( member(Name,Names), request_get_parameter_values(Request,Name,ValuesOfName) ), Parameterss). %'_write_parameters'(+Mimetype, +Parameterss, +Stream) '_write_parameters'(text, Parameterss,Stream) :- writeq(Stream,Parameterss),nl(Stream),flush_output(Stream). '_write_parameters'(html, Parameterss, Stream) :- write(Stream,'
'),nl(Stream), once( ( member(Parameters,Parameterss), writeq(Stream,Parameters),nl(Stream), fail ; true )), write(Stream,''),nl(Stream), write(Stream,''),nl(Stream), write(Stream,''),nl(Stream),flush_output(Stream). '_write_parameters'(xml, Parameterss,Stream) :- namevalues_xml(Parameterss,XMLterm), info(write_xml(XMLterm)), write_xml(Stream,XMLterm),flush_output(Stream). % convert Parameter lists to/from XML term. namevalues_xml(NameValues,document([xml([version = '1.0'])],element(data,[],Elements),[])):- '_nvs_elements'(NameValues,Elements). '_nvs_elements'([],[]). '_nvs_elements'([NameValue|NameValues],[Element|Elements]):- '_nvs_element'(NameValue,Element), '_nvs_elements'(NameValues,Elements). '_nvs_element'(name_values(Name,Values),element(name_values,[],[element(name,[],[chardata(Name)])|ValueElements])):- '_value_elements'(Values,ValueElements). '_value_elements'([],[]). '_value_elements'([Value|Values],[ValueElement|ValueElements]):- '_value_element'(Value,ValueElement), '_value_elements'(Values,ValueElements). '_value_element'(Value,element(value,[],[chardata(Value)])). % set the right MIME type for each format. '_init_stream'(html,Response, Stream) :- response_set_content_type(Response, 'text/html'), response_get_writer(Response, Stream). '_init_stream'(text,Response, Stream) :- response_set_content_type(Response, 'text/plain'), response_get_writer(Response, Stream). '_init_stream'(xml,Response, Stream) :- response_set_content_type(Response, 'text/xml'), response_get_writer(Response, Stream).