2017-08-01 2 views
0

ダウンロード用のリンクがあるJSPページがあります。リンクをクリックすると、サーブレットdownloadservletが呼び出され、ダウンロードするデータベースからファイルを取得します。 しかし、問題は、私がサーブレットに送るファイルのタイトルにスペースが含まれていることです。例=>カレッジ・サービス法。その文字列はCollege%20Service%20Actとしてサーブレットに送られ、データベースと一致することはできません。何をすべきか?空白文字をそのまま使用してサーブレットに文字列を送るには?

私は現在jspファイルを使用してpdfをダウンロードしています。ここでpdfがダウンロードされますが開けません。誰でもこのコードの変更を提案できますか?

download.jsp

<%@page import="java.sql.*,java.io.*"%> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<% 
    String connectionURL = "jdbc:oracle:thin:@localhost:1521:xe"; 
    String title = request.getParameter("title"); 
    Statement stmt = null; 
    Connection con = null; 
    Blob b=null; 
    try 
    { 
     String filename = title+".pdf"; 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     con = DriverManager.getConnection(connectionURL, "shivashukla", "system"); 
     stmt = con.createStatement(); 
     String qry = "select * from law where title ='" + title+"'"; 

     ResultSet rst = stmt.executeQuery(qry); 
     if (rst.next()) 
     { 
      b = rst.getBlob(6); 
     } 
     InputStream in = b.getBinaryStream(); 
     byte b1[] = new byte[(int) b.length()]; 
     in.read(b1); 
       response.reset(); 

     //response.setContentType("*.pdf"); 

     response.setHeader("cache-control", "no-cache"); 
     //response.setHeader("Content-disposition", "attachment; filename=" + filename); 

     response.setContentType("application/pdf"); 

response.setHeader("Content-disposition","attachment; filename="+filename); 


    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
%> 

JSPページ

<body style="background-color: antiquewhite;"> 
    <% 
     try { 
      String cat = (String)session.getAttribute("cat"); 
      String state = (String)session.getAttribute("state"); 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "shivashukla", 
        "system"); 
      PreparedStatement ps = con.prepareStatement("select * from law where category=? and state=?"); 
      ps.setString(1, cat); 
      ps.setString(2, state); 
      ResultSet rs = ps.executeQuery(); 
    %> 

    <table class="table table-bordered table-responsive table-hover" > 
     <tr> 
      <th>SECTION</th> 
      <th>CATEGORY</th> 
      <th>TITLE</th> 
      <th>STATE</th> 
      <th>YEAR</th> 
      <th>PDF</th> 
     </tr> 
     <% 
      while (rs.next()) { 
     %> 
     <tr> 
      <td><%=rs.getString(1)%></td> 
      <td><%=rs.getString(2)%></td> 
      <td><%=rs.getString(3)%></td> 
      <td><%=rs.getString(4)%></td> 
      <td><%=rs.getString(5)%></td> 
      <td><a href="downloadservlet?title=<%=rs.getString(3)%>" target="_blank">Download</a> 
      </td> 
     </tr> 
     <% 
       } 
      } catch (Exception e) { 
       System.out.println(e); 
      } 
     %> 
    </table> 
</body> 
+0

わからないが、それは本当の重複しているかどうかが、この答えは助けるべきhttps://stackoverflow.com/a/15926416/3545273 –

答えて

0

あなたはjava.net.URLDecoder.decode()を使用することができます。

から変更してみてください:

String fn = req.getParameter("title"); 

へ:

String fn = java.net.URLDecoder.decode(req.getParameter("title")); 
+0

ありがたいことですが、一つの問題があります。私はpdf形式でファイルをダウンロードする必要があります。それはダウンロードされていますが、Adobe Readerは読み込めません。エラーが発生しました。それを修正するには? –

+0

'out.write(b1);の後に' out.flush(); 'を追加してみてください。 –

+0

いいえ動作しませんでした。 –

関連する問題