Генерировать JNLP динамически
Мне нужно передать аргумент JNLP динамически, для которого я попытался использовать сервлет, который расширяет JnlpDownloadServlet
, а затем включает jsp, в котором записано все JNLP XML.
Но когда я вызываю загруженный JNLP, я получаю BadFieldException
.
Servlet
public class TestServlet extends JnlpDownloadServlet {
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
res.setContentType("application/x-java-jnlp-file");
request.getRequestDispatcher("/jnlp.jsp").include(request, res);
}
jnlp.jsp
Используется для сброса динамического JNLP:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase=<%=request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ request.getContextPath() + "/" %> href="test.jnlp">
<information>
<title>Demo</title>
<vendor>Sun Microsystems, Inc.</vendor>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+" href="#" onclick="location.href='http://java.sun.com/products/autodl/j2se'; return false;"/>
<jar href="lib/test.jar" main="true" />
</resources>
<application-desc name="Dynamic Tree Demo Application" main-class="org.Test" width="300" height="300">
<argument><%=request.getParameter("arg1")%></argument>
<argument><%=request.getParameter("arg2")%></argument>
</application-desc>
<update check="background"/>
</jnlp>
Я не вижу корректно полученные параметры запроса в загруженном JNLP, но вышеприведенные request.getScheme
и request.getServerName
, похоже, работают нормально. Поскольку значение аргумента не получено правильно, я получаю BadFieldException
, когда JNLP пытается выполнить.
Как это решить?
Ответы
Ответ 1
Логически, href="test.jnlp"
должно быть чем-то вроде href="test.jnlp?arg1=blah&arg2=tah"
.
AFAIU клиент JWS вернется на сервер, используя точный coodebase
/href
, указанный в JNLP.
Кроме того, определенно выслушайте, что нужно сказать bestsss.
Ответ 2
Может быть, старый для того, чтобы быть полезным, но я действительно исправил код сервлета Sun. Существует класс JnlpFileHandler, где выполняются фактические подстановки... Просто говорю...;-) Если кому-то интересно, я могу дать вам код, включая небольшое объяснение. Я не тратил слишком много времени на него, но все, что я могу сказать, это то, что я действительно надеюсь, что остальная часть кода SUN написана в LOT больше уважения к принципам OO...