如何使用prolog创建相同的函数(jsp的html输入)

如何使用prolog创建相同的函数(jsp的html输入),jsp,prolog,Jsp,Prolog,我正在做一个使用prolog与HTML集成的程序,目前仍在理解prolog中的HTTPSESSION,并希望创建与下面JSP相同的函数 来自用户的HTML输入: `<form action="page2.jsp" method="post"> <label>Name:</label> <input type="text" name="patientname" placeholder="Name"> <input typ

我正在做一个使用prolog与HTML集成的程序,目前仍在理解prolog中的HTTPSESSION,并希望创建与下面JSP相同的函数

来自用户的HTML输入:

`<form action="page2.jsp" method="post">
    <label>Name:</label>
    <input type="text" name="patientname" placeholder="Name">
    <input type="submit" value="Next">
</form>`
`
姓名:
`
从HTML获取输入的JSP:

`<%
String name = request.getParameter("patientname");
 session.setAttribute("patientname", name);
%>`
``

有人能帮忙吗?我已经看过了,但是仍然不能理解如何在prolog中实现代码

会话对象特定于JavaServer页面 规范版本2.0,它具有以下API:

公共抽象javax.servlet.http.HttpSession getSession()
会话对象(HttpSession)的当前值。
返回:此页面上下文的HttpSession或null

因此,只要您不使用实现jspapi的容器,一切看起来都可能不同。SWI Prolog提供了自己的容器API,会话数据似乎保存在:

:- dynamic session_data/2.
您可以通过
http\u session\u XXX
谓词访问和修改它。另一种方法是使用基于Java的Prolog并直接在实现JSP API的容器中运行,例如Tomcat

后一种方法的优点是可以自由地混合使用Java和Prolog。这意味着您仍然可以用JSP编写动态页面,然后在这里使用Prolog完成某些任务

例如,在Jekejeke Prolog中可以使用后者,请参见本教程,本教程展示了如何开发在Tomcat内部运行并同时使用Java和Prolog的forms JSP应用程序:

Jekejeke Prolog-Servlet部署

我认为基本上你需要做一些类似于http\u session\u asserta(patientname(Name))的事情来将这个事实添加到会话中。稍后,您可以使用
http\u session\u数据(patientname(Name))
获取它,以将
Name
与当前会话的患者姓名统一起来。我相信您可以使用类似
http\u参数(请求,[form\u数据(值)]、成员(patientname=patientname,值)的内容获取表单值.
http\u session\u asserta()和http\u session\u assert()之间的区别是什么。现在我遇到了困难,因为每当我提交一个新表单时,我调用的参数和http_session_data()将替换我的旧数据。我不希望我的旧数据被替换。这与
asserta/1
assert/1
相同。前者是标准的,因为您可以在数据库中断言具有相同算术数的多个事实,
a
后缀表示“在数据库的开头”(即在您已经拥有的其他事实之前),而
z
表示“在结尾”(即在其他事实之后)。我通常避免使用
assert/1
,因为它是非标准的,并且没有明确的问题。如果不希望替换旧数据,请在断言之前检查它。这只是编程。
page\u content(Request)-->{http\u参数(Request,[patient(patient,[optional(true)])))、http\u session\u asserta(-patient)},
这里我在next\u page.pl中将第一个表单值插入asserta/1,然后在next\u page2.pl
page\u content(Request)->{http_参数(请求,[age(age,[optional(true)])]、http_session_asserta(-age)、http_session_data(Patient)}、
。当我为asserta/1输入新值时,该值将改为读取年龄值。或者这是我可以使用http_session_data()获取这两个值的另一种方法。