如何在客户端服务器 Web 交互期间执行 Python 代码
How to Execute Python Code During Client Server Web Interaction
我目前正在使用 Java Servlet 和 Python 编写客户端/服务器 Web 应用程序。尽管我在客户端交互方面遇到问题,但主要是在生成输入方面。生成输入需要通过在客户端本地执行 python 脚本修改用户输入的数据,然后通过 POST 请求提交给 Servlet 服务器。之后,Servlet 会将接收到的数据传递给另一个 python 脚本服务器端,以验证给定输入的有效性。 Python 在这个过程中是必需的,因为计算量很大 (2^4096) 位长
所以我真正想问的是;
当用户访问带有表单的网页,填写表单然后单击提交按钮时,我如何从表单字段中提取数据,将内容传递到我的本地 python 脚本作为输入参数,执行 python 脚本。然后 return 来自 python 脚本的新计算数据返回到 Web 浏览器,用于 POST 对服务器的请求。
这里有两种可能性:
1) Java 作为控制器
从您的 Java Servlet 获取表单数据:
String Form_text_data = request.getParameter("text_input");
如果有很多字段,您可以实例化一个 StringBuilder(包含您需要的所有请求的文件)以获得所有目标字段答案的一个字符串 - 请务必在将这些字段添加到您的 String Builder 之前对这些字段进行健全性检查.
然后将您的字符串结果从字符串生成器传递到具有 exec 方法的运行时 class :
StringBuilder Python_script_command = new StringBuilder("python PATH/TO/YOUR/PYTHON_SCRIPT.py");
Python_script_command.append(Form_text_data) // Repeat this as many time as you wish for each form fields, but be sure to make sanity check before to avoid any injections that you do not want
Process p = Runtime.getRuntime().exec(Python_script_command.toString());
您可以通过以这种方式绑定它来读取输出:
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
// read the output from the command
System.out.println("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
详情请看这篇文章:
http://alvinalexander.com/java/edu/pj/pj010016
2) 从 python API 框架执行,例如 FLASK
您还可以直接在 python 中构建 REST API,当用户提交表单时,您通过 POST 请求将其发送到您的 python 应用程序
然后提取您需要的数据非常简单:
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
default_name = '0'
data = request.form.get('input_name', default_name) #here is an example on one data getter from a form field
有关详细信息,请参阅此答案 ()
然后直接在 python 中使用此数据,再次进行各种完整性检查
我目前正在使用 Java Servlet 和 Python 编写客户端/服务器 Web 应用程序。尽管我在客户端交互方面遇到问题,但主要是在生成输入方面。生成输入需要通过在客户端本地执行 python 脚本修改用户输入的数据,然后通过 POST 请求提交给 Servlet 服务器。之后,Servlet 会将接收到的数据传递给另一个 python 脚本服务器端,以验证给定输入的有效性。 Python 在这个过程中是必需的,因为计算量很大 (2^4096) 位长
所以我真正想问的是;
当用户访问带有表单的网页,填写表单然后单击提交按钮时,我如何从表单字段中提取数据,将内容传递到我的本地 python 脚本作为输入参数,执行 python 脚本。然后 return 来自 python 脚本的新计算数据返回到 Web 浏览器,用于 POST 对服务器的请求。
这里有两种可能性:
1) Java 作为控制器
从您的 Java Servlet 获取表单数据:
String Form_text_data = request.getParameter("text_input");
如果有很多字段,您可以实例化一个 StringBuilder(包含您需要的所有请求的文件)以获得所有目标字段答案的一个字符串 - 请务必在将这些字段添加到您的 String Builder 之前对这些字段进行健全性检查.
然后将您的字符串结果从字符串生成器传递到具有 exec 方法的运行时 class :
StringBuilder Python_script_command = new StringBuilder("python PATH/TO/YOUR/PYTHON_SCRIPT.py");
Python_script_command.append(Form_text_data) // Repeat this as many time as you wish for each form fields, but be sure to make sanity check before to avoid any injections that you do not want
Process p = Runtime.getRuntime().exec(Python_script_command.toString());
您可以通过以这种方式绑定它来读取输出:
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
// read the output from the command
System.out.println("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
详情请看这篇文章:
http://alvinalexander.com/java/edu/pj/pj010016
2) 从 python API 框架执行,例如 FLASK
您还可以直接在 python 中构建 REST API,当用户提交表单时,您通过 POST 请求将其发送到您的 python 应用程序
然后提取您需要的数据非常简单:
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
default_name = '0'
data = request.form.get('input_name', default_name) #here is an example on one data getter from a form field
有关详细信息,请参阅此答案 (
然后直接在 python 中使用此数据,再次进行各种完整性检查