Part 1: Create or update record via HTTP request
Can the script be improved?

Jython is somewhat of a horror show, so improvements are limited but still possible.
List comprehensions
params = list( param for param in request.getQueryParams() if param.startswith('f_') )

can be
params = [
    param for param in request.getQueryParams()
    if param.startswith('f_')
]

Dict comprehensions
This just squeaked into Python 2.7:
paramdict = {
    p[2:]: request.getQueryParam(p)
    for p in params
}

Factor out common code
Factor out common code from these blocks:
if woMbo is not None:
    for k,v in paramdict.items():
        woMbo.setValue(k,v,2L)
    resp = 'Updated workorder ' + request.getQueryParam(&quot;f_wonum&quot;)
    woset.save()
    woset.clear()
    woset.close()
else:
    woMbo=woset.add()
    for k,v in paramdict.items():
        woMbo.setValue(k,v,2L)
    resp = 'Created workorder ' + request.getQueryParam(&quot;f_wonum&quot;)
    woset.save()
    woset.clear()
    woset.close()

For example,
if woMbo is None:
    woMbo=woset.add()
    verb = 'Created'
else:
    verb = 'Updated'

for k,v in paramdict.items():
    woMbo.setValue(k,v,2L)
resp = verb + ' workorder ' + request.getQueryParam(&quot;f_wonum&quot;)
woset.save()
woset.clear()
woset.close()

Guaranteed closure
Wrap your code in a try/finally:
woset = MXServer.getMXServer().getMboSet(&quot;workorder&quot;,request.getUserInfo())
try:
    # ...
finally:
    woset.close()

Named constants

the constant 2L tells the system to override any MBO rules/constraints

Fine; so it should get first-class treatment:
IGNORE_RULES = 2L