我已经创建了一个jar来自我的Java project想要使用相同的jar JSP Servlet Project.我正在尝试加载一个属性文件,让我说我JSP Servlet Project保留的sample.properties WEB/properties/sample.properties应该被一个类中的类读取.我jar在一个jar 类中使用以下代码来访问它.
Properties prop=new Properties();
prop.load(/WEB-INF/properties/sample.properties);
Run Code Online (Sandbox Code Playgroud)
但每次我都会fileNotFound exception.
请建议我的解决方案.
这是结构
WEB-INF
|
lib
|
myproject.jar
|
myclass (This class needs to read sample.properties)
|
properties
|sample.properties
Run Code Online (Sandbox Code Playgroud) 我需要将属性文件的URI传递给以下方法(第三方jar)
defaultConfiguration = Factory.createDefaultConfiguration(propertiesUrl.toURI());
PayClient client = Factory.createClient(defaultConfiguration);
Run Code Online (Sandbox Code Playgroud)
当我在服务器上部署我的代码时,我得到了这个路径,即propertiesUrl.toURI()as abc://localhost/server/test/payment/ConfigLookup.properties
第三方应用程序拒绝此值,并且不会创建用于创建连接客户端的配置.
传递属性文件在本地bin文件夹中的示例代码可以正常工作.
收到的路径为 propertiesUrl.toURI()
file:/D:/Code/bin/ConfigLookup.properties
Run Code Online (Sandbox Code Playgroud)
以上创建了一个成功的连接.
请指导我们之间缺少什么.如何使服务器代码以与本地代码相似的方式工作.
我在Eclipse(JSP)中创建一个Web应用程序,并使用Tomcat作为服务器(集成到Eclipse中).我必须在下面创建对象并指定配置文件的路径.这条绝对的道路很有效:
Store store = StoreFactory.create("file:///C:/Users/Aliens/workspace/myProject/WebContent/config/sdb.ttl");
Run Code Online (Sandbox Code Playgroud)
但是我想知道为什么我不能使用相对路径.它应该是"config/sdb.ttl"正确的(如果项目的名称是根)?但它无法以这种方式找到它(NotFoundException).
我从后台bean访问外部文件时遇到问题.我想做的是使用ttf文件,以便通过iText库使用该字体.当我通过Netbeans 7.2运行我的应用程序时,下面的代码工作正常:
private static String fontPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("arialuni.ttf");
Run Code Online (Sandbox Code Playgroud)
但是当我通过Oracle Weblogic 11g控制台手动部署我的ear文件时,找不到ttf文件,我得到NullPointerException.
我已经尝试了几种方法让它工作但没有机会.如果有人可以帮助我,我会非常感激.
问候
我认为应该这样做的"正确"方式是,getResourceAsStream()但它似乎并没有削减它.
我的情况:
我有一个Java的Web应用程序,最终将部署到几个不同的Web服务器,可能是GlassFish,Tomcat和WildFly.目前我正在使用Netbeans处理Mac,我可以访问WildFly和GlassFish.该项目已经成熟
我需要做的是读取和写入两个不同的Excel文件.一个用作"模板",一个用作输出文件.该应用程序以前独立运行,我试图将其包装到JSF网站.
我需要FileInputStream为我的其中一个方法获取一个并最终创建一个输出文件,该文件将通过http提供给用户.
根据我的收集,适当的方式来做到这一点应该是:
XLSX文件
/src/main/resources/ANALYSIS_template.xlsx
Run Code Online (Sandbox Code Playgroud)
位置一旦编译成WAR文件:: WildFly
/usr/local/opt/wildfly-as/libexec/standalone/deployments/fleetForecast-1.0-SNAPSHOT.war/WEB-INF/classes/ANALYSIS_template.xlsx
Run Code Online (Sandbox Code Playgroud)
位置一旦编译成WAR文件:: GlassFish
~/devel/fleetforecast/target/fleetForecast-1.0-SNAPSHOT/WEB-INF/classes/ANALYSIS_template.xlsx
Run Code Online (Sandbox Code Playgroud)
Java代码
我想我可能设法使用以下命令获取文件的输入流:
InputStream is1 = getClass().getResourceAsStream("ANALYSIS_template.xlsx");
Run Code Online (Sandbox Code Playgroud)
我也尝试过("/ANALYSIS_template.xlsx")类似行为的方式.当我尝试从此输入流中读取时
try {
is1.read();
} catch (IOException ex) {
Logger.getLogger(FleetBean.class.getName()).log(Level.SEVERE, null, ex);
}
Run Code Online (Sandbox Code Playgroud)
我得到了java.lang.NullPointerException.
Caused by: java.lang.NullPointerException
at org.mitre.fleetforecast.bean.FleetBean.<init>(FleetBean.java:57)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at java.lang.Class.newInstance(Class.java:433)
at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:186)
... 76 more
Run Code Online (Sandbox Code Playgroud)
任何提供或想到的援助将不胜感激.
我试图在Java servlet中读取自己的MANIFEST.MF资源.我的情况:我在EAR中有一个WAR(带有我想要阅读的清单).EAR中还有其他几个WAR和JAR.类路径真的很长.
我尝试了Web中的几种方法,包括StackOverflow.
我可以使用读取所有MANIFEST.MF文件
this.getClass().getClassLoader().getResources("META-INF/MANIFEST.MF");
Run Code Online (Sandbox Code Playgroud)
并遍历它们.但是,我不知道哪一个是我的 - 我甚至不知道Implementation-Title,因为这是由构建管道生成的.(我可以通过构建管道的知识来猜测,因此我知道正确的清单就在那里.但是,我无法猜测生产代码.)
当然,
this.getClass().getClassLoader().getResourceAsStream("META-INF/MANIFEST.MF");
Run Code Online (Sandbox Code Playgroud)
从类路径上的其他jar返回一个完全错误的清单.
我也试过了
this.getServletContext().getResourceAsStream("META-INF/MANIFEST.MF");
Run Code Online (Sandbox Code Playgroud)
但它返回null.
如何访问属于包含当前运行的servlet的WAR的MANIFEST.MF文件?
我想写一个属性文件的构建信息.我找到了Maven资源过滤插件.这就是我的pom相关部分的样子:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>project.mygroup</groupId>
<artifactId>prject</artifactId>
<version>1.0-20190130-1</version>
</parent>
<artifactId>project-war</artifactId>
<packaging>war</packaging>
<version>1.0-20190130-1</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>
yyy-MM-dd HH:mm
</maven.build.timestamp.format>
</properties>
<dependencies>
...
</dependencies>
<build>
<finalName>project</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<!-- Create war from the project -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
如果开始mvn clean package构建成功,但我build.properties在src/main/resources下的文件将不包含构建信息.
我的属性文件如下所示:
build.version=${pom.version}
build.date=${timestamp}
build.url=${pom.url}
build.name=${pom.name} …Run Code Online (Sandbox Code Playgroud) 我正在使用eclipse制作动态网页.它是一个依赖servlet传递/检索数据的简单程序.我的一个servlet必须打开.txt文件来读取其内容并将其发送到客户端.但是我收到了FileNotFound异常.我知道它,因为我不知道如何/在哪里放置txt文件,以便servlet可以在运行时找到该文件.我正在研究日食.你能提供一些提示吗?
谢谢
我试图从java获取我的项目的当前目录.我使用以下代码行来获取路径详细信息.
类型1:
File directory = new File (".");
try {
System.out.println ("Current directory's canonical path: "
+ directory.getCanonicalPath());
System.out.println ("Current directory's absolute path: "
+ directory.getAbsolutePath());
}catch(Exception e) {
System.out.println("Exceptione is ="+e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
类型2:
String currentDir = System.getProperty("user.dir");
System.out.println("Current dir using System:" +currentDir);
Run Code Online (Sandbox Code Playgroud)
从主类执行上面的代码我得到项目目录.当我从服务器端执行时,得到"当前dir使用System:D:\ Apache Tomcat 6.0.16\bin".但我的项目位于D:\Apache Tomcat 6.0.16\wepapps\SampleStructs.
请给我任何建议,并帮助我解决这个问题.
我正在开发一个jsp + servlet应用程序,打包成war,部署到tomcat 8。
我知道WEB-INF是存储不被服务的文件的文件夹,仅在服务器端处理:如html或jsp片段等。我需要存储一些xml。Servlet 在处理请求时会读取这些 xml。
问题是:
我应该将这些 xml 存储在同一个 WEB-INF 文件夹中吗?或者有什么特别的地方吗?我不想做非常反模式的事情。