Skip to main content
Version: 9.2605.x.x RR

Dispatcher

You can get a dispatcher with request:getDispatcher(name), see Request.

dispatcher:forward(request, response)

Sends the request to the dispatcher. If response is the original response object, the dispatcher sends the answer directly to the client. Otherwise, you can access the status, headers, and body from the response for further processing.

Sample — send directly to client:

dispatcher = request:getDispatcher("MyHttpConnectorServlet")
dispatcher:forward(request, response)

Sample — decouple from the original request/response:

newReq = nevis.filter.lua.request.new()
newResp = nevis.filter.lua.response.new()
dispatcher = request:getDispatcher("MyHttpConnectorServlet")
dispatcher:forward(newReq, newResp)

Configuration example of a script performing an HTTP side call:

<filter>
<filter-name>StatusUpdater</filter-name>
<filter-class>ch::nevis::isiweb4::filter::lua::LuaFilter</filter-class>
<init-param>
<param-name>Script</param-name>
<param-value>
function inputHeader(request, response)
local trace = request:getTracer()

local sideRequest = nevis.filter.lua.request.new()
sideRequest:setUri("/statusupdate")
sideRequest:setMethod("GET")
sideRequest:setHeader("Host", "statusserver.zh.adnovum.ch:8080")
sideRequest:setHeader("User-Agent", "StatusUpdater")

local sideResponse = nevis.filter.lua.response.new()

local dispatcher = request:getDispatcher("StatusServlet")
local timer = nevis.sys.timer.new()
timeStart = timer:getTime()
dispatcher:forward(sideRequest, sideResponse)
timeEnd = timer:getTime()
local duration = timeEnd - timeStart
-- log response code and request duration in milliseconds:
local trID = request:getEnv("UNIQUE_ID")
local rc = sideResponse:getStatus()
trace:notice("StatusUpdater: sC=" .. rc .. " dT=" .. duration .. " trID=" .. trID)
end
</param-value>
</init-param>
<init-param>
<param-name>Script.InputHeaderFunctionName</param-name>
<param-value>inputHeader</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>StatusUpdater</filter-name>
<url-pattern>/application/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>StatusUpdater</servlet-name>
<servlet-class>
ch::nevis::isiweb4::servlet::connector::http::HttpConnectorServlet
</servlet-class>
<init-param>
<param-name>InetAddress</param-name>
<param-value> statusserver.zh.adnovum.ch:8080</param-value>
</init-param>
</servlet>