我使用Struts2,java和mysql开发了一个Web应用程序。当我在Linux VM服务器上托管此应用程序时,它无法正常工作。我认为这是由于一些路径问题。
这是我的Java类:
import com.altoopa.utils.DBConnection;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
public class VideoBuffer {
FileInputStream fis = null;
FileOutputStream out = null;
public String readVideo() throws IOException, SQLException {
try {
int i =0;
String s=null;
Date currentDate3 = Calendar.getInstance().getTime();
System.out.println(currentDate3);
int _day3 = currentDate3.getDay(); //Getting day
System.out.println(_day3);
String current_day3 = null;
if (_day3 == 0) {
current_day3 = "Redday";
} else if (_day3 == 1) {
current_day3 = "Violetday";
} else if (_day3 == 2) {
current_day3 = "Indigoday";
} else if (_day3 == 3) {
current_day3 = "Blueday";
} else if (_day3 == 4) {
current_day3 = "Greenday";
} else if (_day3 == 5) {
current_day3 = "Yellowday";
} else if (_day3 == 6) {
current_day3 = "Orangeday";
}
System.out.println(current_day3);
Calendar cal3 = Calendar.getInstance();
int week3 = cal3.get(Calendar.WEEK_OF_YEAR); //Getting week
System.out.println(week3);
DBConnection db=new DBConnection();
Connection con=db.getDBConnection();
String query="SELECT calender_id FROM calender_altoopa WHERE week='" + week3 + "' and altoopa_day='" + current_day3 + "'";
PreparedStatement ps=con.prepareStatement(query);
ResultSet rs_scrc=ps.executeQuery();
while (rs_scrc.next()) {
i = rs_scrc.getInt(1);
System.out.println("calender iddfdsfdsfdsfsff"+i);
}
String query1="select video_name from sgbg_video where calender_id= ?";
PreparedStatement ps1=con.prepareStatement(query1);
ps1.setInt(1,i);
ResultSet rs_scrc1=ps1.executeQuery();
while (rs_scrc1.next()) {
System.out.println(rs_scrc1.getString(1));
s=rs_scrc1.getString(1);
System.out.println("videoooooooooooo"+s);`enter code here`
}
fis = new FileInputStream(new File("D:\\Dk\\"+"\\"+s));
String userImageFileName = "temp.mp4";
out = new FileOutputStream(new File(
"D:\\sreejith_\\altoopa_6\\web\\VideoFile" + "\\"
+s));
int c;
byte[] buffer=new byte[1024];
while ((c = fis.read(buffer)) != -1) {
System.out.println("Writing to file...");
out.write(buffer,0,c);
}
out.flush();
return s;
}
catch (Exception e) {
e.printStackTrace();
} finally {
fis.close();
out.close();
}
return null;
}
}
使用此类,我将视频文件从D:Dk文件夹中流式传输,并将其写入NeatBeans应用程序目录中的VideoFile文件夹中。
我的问题是:我应该用什么路径代替“D:\ Dk \”+“\”+ s将应用程序部署到linux VM?我从这个目录中获取视频并输入
“D:\ sreejith_ \ altoopa_6 \ web \ VideoFile”+“+ s));
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>``
</filter-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<context-param>
<param-name>FileUploadPath</param-name>
<param-value>D:\Dk</param-value>
</context-param>
<context-param>
<param-name>AudioUploadPath</param-name>
<param-value>D:\AltoopaAudio</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
请帮助我如何将此应用程序部署到Linux上。
答案 0 :(得分:1)
您应该更改web.xml
中的配置,但它不适合多操作系统构建(当使用maven时,您需要配置激活并拥有许多web.xml或在构建时转换它们。)
更好的方式,IMO,是配置系统变量并使用它们:
System.getenv("UP_FILE_PATH");
System.getenv("UP_VIDEO_PATH");
但最好的是在DB中创建配置表并将其放在那里。您的配置类可能包含获取操作系统类型的方法,并从DB中读取适当的变量。
答案 1 :(得分:0)
查看代码中的那些硬编码文件路径(“D:\ ...”)。最好把它带到.properties文件或数据库表,因为它们肯定不存在于你的Linux框中
编辑:
抱歉,我可能还没有理解你的问题。您应该与您的运营商联系,在Linux框中为您的视频准备磁盘位置(可能/视频,请记住Linux和Unix OS没有单位字母)。
但是这条路不是你的问题,你应该花一点时间思考你的需求。例如,您的应用程序是否已投入生产?在这种情况下,您认为您需要多少空间?您的运营商肯定会告诉您他们需要准确的估算,因为VM箱的生产舱空间非常昂贵。在这种情况下也要考虑如果您的需求增长,您将如何确保可扩展性(也许您需要准备某种NAS?)