相关疑难解决方法(0)

用于从Java中的类路径加载资源的URL

在Java中,您可以使用相同的API但使用不同的URL协议加载所有类型的资源:

file:///tmp.txt
http://127.0.0.1:8080/a.properties
jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class
Run Code Online (Sandbox Code Playgroud)

这很好地将资源的实际加载与需要资源的应用程序分离,并且由于URL只是一个String,因此资源加载也很容易配置.

是否有使用当前类加载器加载资源的协议?这与Jar协议类似,不同之处在于我不需要知道资源来自哪个jar文件或类文件夹.

Class.getResourceAsStream("a.xml")当然,我可以使用它,但这需要我使用不同的API,因此更改现有代码.我希望能够在所有我可以通过更新属性文件指定资源URL的地方使用它.

java url classloader

194
推荐指数
8
解决办法
27万
查看次数

为什么java的URL类不能识别某些协议?

URL u =新URL("telnet://route-server.exodus.net");

这条线正在产生:

java.net.MalformedURLException:未知协议:telnet

我遇到与以"news://"开头的其他网址类似的问题

这些是从ODP中提取的URL,所以我不明白为什么会出现这样的例外情况.

java url protocols malformedurlexception

27
推荐指数
1
解决办法
2万
查看次数

从外部文件系统或数据库获取Facelets模板/文件

我能够成功地使用我的应用程序中的模板:

<ui:decorate template="/WEB-INF/templates/mytemplate.xhtml">
Run Code Online (Sandbox Code Playgroud)

我还可以移动模板/META-INF/templates/mytemplate.xhtml一的JAR和得到这个工作:

<ui:decorate template="/templates/mytemplate.xhtml">
Run Code Online (Sandbox Code Playgroud)

我实际上想把这个文件放到文件系统(或数据库)上.我怎样才能做到这一点?我发现很多相关的东西com.sun.facelets.impl.DefaultResourceResolver,但我认为这实际上与覆盖模板的服务有关.它不是尝试解析URL,它只是试图以某种方式在类路径上获取文件.

resources jsf external facelets jsf-2

7
推荐指数
1
解决办法
3004
查看次数

在Spring Web应用程序(Tomcat)中注册自定义URLStreamHandler

我正在尝试注册一个自定义URLStreamHandler来以通用方式处理对Amazon S3 URL的请求.处理程序的实现看起来非常像S3-URLStreamHandler(github).我没有将我的Handler课程放入sun.net.www.protocol.s3包中,而是使用自定义包com.github.dpr.protocol.s3.为了使Java拾取这个包,我提供了-Djava.protocol.handler.pkgs="com.github.dpr.protocol"遵循URL类文档的系统属性.但是,如果我尝试处理类似的s3-URL s3://my.bucket/some-awesome-file.txt,我会得到MalformedURLException:

Caused by: java.net.MalformedURLException: unknown protocol: s3
    at java.net.URL.<init>(URL.java:600)
    at java.net.URL.<init>(URL.java:490)
    at java.net.URL.<init>(URL.java:439)
    at java.net.URI.toURL(URI.java:1089)
    ...
Run Code Online (Sandbox Code Playgroud)

我的应用程序是一个基于Spring的Web应用程序,目前在tomcat中运行,但不应该对底层应用程序容器的任何知识混乱.

我已经调试了相应的代码,发现我URLStreamHandler无法初始化,因为用于加载类的类加载器不知道它.这是java.net.URL(jdk 1.8.0_92)的相应代码:

1174: try {
1175:   cls = Class.forName(clsName);
1176: } catch (ClassNotFoundException e) {
1177:   ClassLoader cl = ClassLoader.getSystemClassLoader();
1178:   if (cl != null) {
1179:     cls = cl.loadClass(clsName);
1180:   }
1181: }
Run Code Online (Sandbox Code Playgroud)

类的类加载器java.net.URL(由...使用Class.forName) …

java url spring tomcat

7
推荐指数
1
解决办法
1902
查看次数