从 javascript 调用时,jnlp 文件中的 URL 编码不正确
Incorrectly encoded URL in jnlp file when called from javascript
我正在尝试使用 Java 脚本启动 Java Web Start 应用程序,而 Java 脚本代码发送的参数包含 url (window.location.origin
) 到 jnlp 文件。我的问题是在 jnlp 文件中,url 编码不正确,即我没有将 http://localhost:7001/root
写入文件,而是得到 http\x3A\x2F\x2Flocalhost\x3A7001/root
,因此无法启动我的应用程序。
我正在从 jsp 文件调用 Java Web Start 应用程序 javascript (index.jsp):
<%@ page language="java" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
window.onload = function() {
window.open('/root/my.jsp?hostname=' +window.location.origin+ '&date=' + Date.now());
}
</head>
<body>
</body>
</html>
我的 jnlp 文件 (webStart.jsp):
<%@ page contentType="application/x-java-jnlp-file"%>
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.5" codebase="${param.hostname}/root/?v=${param.date}">
<information>
<title>title</title>
<vendor>vendor</vendor>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.7+"/>
<jar href="my_application.jar"/>
</resources>
<applet-desc main-class="myPackage.main" name="my-applet" height="1" width ="1"/>
</jnlp>
我的应用服务器是Glassfish 3.1。我尝试更改 UTF-8 和 ISO-8859-1 编码,但总是得到相同的结果。还有什么可以解决这个问题?
编辑:我也尝试了 encodeURIComponent(window.location.origin)
,但这并没有改变任何东西。
用 window.location.protocol
、window.location.hostname
和 window.location.port
构建 URL 没有处理我的 URL 中的破折号,所以更好的解决方案是使用Java 解码 URL.
的代码
我的 webStart.jsp 文件如下所示:
<%@page import="java.net.URLDecoder"%>
<%@ page contentType="application/x-java-jnlp-file"%>
<% String hostname = URLDecoder.decode(request.getParameter("hostname").replace("\x", "%"), "UTF-8"); %>
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.5" codebase="<%=hostname%>/root/?v=${param.date}">
<information>
<title>title</title>
<vendor>vendor</vendor>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.7+"/>
<jar href="my_application.jar"/>
</resources>
<applet-desc main-class="myPackage.main" name="my-applet" height="1" width ="1"/>
</jnlp>
我正在尝试使用 Java 脚本启动 Java Web Start 应用程序,而 Java 脚本代码发送的参数包含 url (window.location.origin
) 到 jnlp 文件。我的问题是在 jnlp 文件中,url 编码不正确,即我没有将 http://localhost:7001/root
写入文件,而是得到 http\x3A\x2F\x2Flocalhost\x3A7001/root
,因此无法启动我的应用程序。
我正在从 jsp 文件调用 Java Web Start 应用程序 javascript (index.jsp):
<%@ page language="java" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
window.onload = function() {
window.open('/root/my.jsp?hostname=' +window.location.origin+ '&date=' + Date.now());
}
</head>
<body>
</body>
</html>
我的 jnlp 文件 (webStart.jsp):
<%@ page contentType="application/x-java-jnlp-file"%>
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.5" codebase="${param.hostname}/root/?v=${param.date}">
<information>
<title>title</title>
<vendor>vendor</vendor>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.7+"/>
<jar href="my_application.jar"/>
</resources>
<applet-desc main-class="myPackage.main" name="my-applet" height="1" width ="1"/>
</jnlp>
我的应用服务器是Glassfish 3.1。我尝试更改 UTF-8 和 ISO-8859-1 编码,但总是得到相同的结果。还有什么可以解决这个问题?
编辑:我也尝试了 encodeURIComponent(window.location.origin)
,但这并没有改变任何东西。
用 window.location.protocol
、window.location.hostname
和 window.location.port
构建 URL 没有处理我的 URL 中的破折号,所以更好的解决方案是使用Java 解码 URL.
我的 webStart.jsp 文件如下所示:
<%@page import="java.net.URLDecoder"%>
<%@ page contentType="application/x-java-jnlp-file"%>
<% String hostname = URLDecoder.decode(request.getParameter("hostname").replace("\x", "%"), "UTF-8"); %>
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.5" codebase="<%=hostname%>/root/?v=${param.date}">
<information>
<title>title</title>
<vendor>vendor</vendor>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.7+"/>
<jar href="my_application.jar"/>
</resources>
<applet-desc main-class="myPackage.main" name="my-applet" height="1" width ="1"/>
</jnlp>