11

JnlpDownloadServletJNLPに引数を動的に渡す必要があります。そのために、すべてのJNLP XMLが書き込まれたjspを拡張して含めるサーブレットを使用しようとしました。

しかし、ダウンロードした JNLP を呼び出すと、BadFieldException.

サーブレット

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="http://java.sun.com/products/autodl/j2se"/>
   <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 が実行しようとすると取得されます。

これを解決するには?

4

2 に答える 2

8

論理的には、 のhref="test.jnlp"ようになるはずですhref="test.jnlp?arg1=blah&arg2=tah"

私の知る限り、JWS クライアントは、JNLP に記載されて いる正確なcoodebase/を使用してサーバーに到達します。href

また、bestsss の言うことに必ず耳を傾けてください。

于 2012-06-15T07:27:28.607 に答える
1

役に立つには古すぎるかもしれませんが、実際に Sun サーブレットのコードにパッチを当てました。実際の置換が行われるクラス JnlpFileHandler があります..ただ言っているだけです. 私はそれであまり時間を無駄にしませんでしたが、私が言えることは、SUNのコードの残りの部分がOOの原則をもっと尊重して書かれていることを本当に願っているということです...

于 2013-04-25T15:40:33.830 に答える