我正在使用Apache Tomcat Server 6和Java 1.6,并试图将mp3大文件写入ServletOutputStream,以供用户下载。目前文件大小为50-750MB。
较小的文件不会引起太大的问题,但是较大的文件会导致套接字异常中断。
File fileMp3 = new File(objDownloadSong.getStrSongFolder() + "/" + strSongIdName);
FileInputStream fis = new FileInputStream(fileMp3);
response.setContentType("audio/mpeg");
response.setHeader("Content-Disposition", "attachment; filename=\"" + strSongName + ".mp3\";");
response.setContentLength((int) fileMp3.length());
OutputStream os = response.getOutputStream();
try {
int byteRead = 0;
while ((byteRead = fis.read()) != -1) {
os.write(byteRead);
}
os.flush();
} catch (Exception excp) {
downloadComplete = "-1";
excp.printStackTrace();
} finally {
os.close();
fis.close();
}
Run Code Online (Sandbox Code Playgroud) 我有一个Java Web应用程序,我在Windows机器上开发,将部署在Unix机器上.
有一些文件路径设置和权限细节在两者上有所不同(我无法改变这一点).有没有办法通过检测操作系统或计算机的名称来检测应用程序所在的机器(它只是两个中的一个),以便我可以使用适当的设置.
我对servlet很新.我想提供一些静态文件,一些CSS和一些JavaScript.这是我到目前为止所得到的:
在web.xml中:
<servlet>
<description></description>
<display-name>StaticServlet</display-name>
<servlet-name>StaticServlet</servlet-name>
<servlet-class>StaticServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StaticServlet</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我假设在StaticServlet我必须工作request.getPathInfo以查看请求的内容,获取mime类型,读取文件并将其写入客户端.
如果这不是可行的方法,或者不是一种可行的做事方式,请提出更好的方法.我不确定在哪里放置static目录,因为如果我尝试打印new File(".")它,就会给我Eclipse安装目录.有没有办法找出项目的目录?
代码似乎工作正常,但我注意到每当我查询只有一个结果的字符串时,它什么也没有返回.不知怎的,我正在跳过我想的第一个结果,但不知道为什么.
else{
Conn con = null;
try {
con = new Conn();
} catch (Exception e) {
e.printStackTrace();
}
String sql = "SELECT productname, quantityperunit, unitprice FROM products pr, categories ca WHERE pr.categoryID = ca.categoryID AND ProductName LIKE '%" + searchTerm + "%'";
System.out.println("last try");
try {
searchResults = con.query(sql);
if (searchResults.next()){
session.setAttribute("searchResults", searchResults);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这是显示代码:
java.sql.ResultSet resultSet = (java.sql.ResultSet) session.getAttribute("searchResults");
if(resultSet == null){
out.println("Nullified");
}
if(resultSet!=null){
out.println("<table border='1'>");
out.println("<tr><th>Product Name</th><th>Quantity per …Run Code Online (Sandbox Code Playgroud) 每次我试图从servlet(从其他项目)访问一个普通的java类它给我classNotFound异常,任何想法如何解决这个问题,提前谢谢
根据用户用于连接Java Webapp的操作系统/浏览器,自动提供.dmg或.exe文件的正确方法是什么?
我想在服务器端做,而不必使用任何JavaScript.
例如,如果,从OS X光机,我去:绝对扑克,然后点击"下载和播放"(这只是一个网站,有我在寻找的行为的一个例子),它提供了我的.dmg文件这是Safari自动下载的.
我正在寻找一个实用的解决方案:如果它适用于99%的用户,我很高兴.我不在乎,如果一些非常具体的操作系统/浏览器组合,这是行不通的,只要"大部分时间" Windows用户被送达的.exe和OS X用户的.dmg.
我是JSP和Servlets的新手.
我想知道的是将一些自定义消息传递给客户端网页的最佳方式.
例如,假设我有一个网页说student.jsp有一个表单,要将新学生注册到我们的在线应用程序.在成功插入表单的所有字段后,用户提交表单并将数据提交给我们的servlet进一步现在,Servlet验证它并将其添加到我们的数据库中.现在,servlet应该发送一条消息,指示最终用户输入的数据成功插入到最终用户(在我们的例子中是student.jsp).
所以,我可以将这种类型的消息传递给任何客户端网页.
我不想将此消息作为URL查询字符串传递.
是否有其他更好,更安全的方式传递这些类型的消息...
我没有遇到什么问题,只是想着事情.
如果我有一个Web应用程序,让我们调用一个servlet.如果servlet调用调用数据库层的数据管理器.让我们假设其中一个级别会引发异常.有没有一种方法可以识别堆栈顶部存在的会话ID,而不会将表达式一直冒到顶层并进入servlet层?
希望这是有道理的....:o)
所以我在JSP页面上使用bean来存储一些数据,如下所示:
<jsp:useBean id="data" class="myclass" scope="session" />
无论如何在以后的同一会话中从servlet访问这个bean?
编辑:
显然我在加载jsp页面和servlet时没有访问同一个会话.我打印出会话ID,它给了我两个页面的不同值,所以我无法访问bean.有任何想法吗?
我正在为我的Web应用程序创建一个登录页面.我想在新用户登录时创建一个会话对象.我知道会话的概念,但我之前没有使用过.我可以用简单的课程来完成.或者,我必须转移到servlet.如果我用一个简单的类方法来做,如何创建一个会话对象.
HTML代码:
<table>
<tr>
<td>User Name: </td><td><input id="uName" class="required" type="text"
size="5" /></td>
</tr>
<tr>
<td>Password: </td><td><input id="pwd" class="required" type="text" size="5"
onclick="login()"/></td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
JS代码:
function login(){
var userDetails = { uName : null, pwd : null };
dwr.util.getValues(userDetails);//Yes, i am using DWR.
LoginAuthentication.doLogin(userDetails, loginResult);
}
function loginResult(nextPage){
window.location.href = nextPage;
}
Run Code Online (Sandbox Code Playgroud)
Java代码:
public class LoginAuthentication
{
public String doLogin(User user) throws SQLException, ClassNotFoundException{
String userName = user.getUserName();
boolean loginResult = verifyUser(user);//Another method that verifies user details with the DB. …Run Code Online (Sandbox Code Playgroud)