2014-05-15 85 views
1

這是我的jsp代碼。在表單標籤中,action屬性需要相同的.jsp頁面。我如何從這個jsp調用FileUploadExample servlet。我想從jsp頁面調用servlet

<form id="beneficiary_sales_details" name="beneficiary_sales_details" 
action="beneficiary_sales_details.jsp" autocomplete="off" method="post"> 


    <input type="file" id="datafile" name="datafile" size="40" /> 
     <input type="button" id="cmdUpload" value="Upload" onclick = "unloadEvt();" /> 

這是我用來調用servlet的

function unloadEvt() { 

    document.location.href='/FileUploadExample'; 

    } 

這是servlet來call.But我無法從beneficiary_sales_details.jsp.Please調用這個servlet的JavaScript建議我任何其他選項從JSP調用servlet的

public class FileUploadExample extends HttpServlet { 
    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
    response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 

     System.out.println("In fileupload servlet"); 

    if (isMultipart) { 
     // Create a factory for disk-based file items 
     FileItemFactory factory = new DiskFileItemFactory(); 
     // Create a new file upload handler 
     ServletFileUpload upload = new ServletFileUpload(factory); 
     try { 
     // Parse the request 
     List /* FileItem */ items = upload.parseRequest(request); 
     Iterator iterator = items.iterator(); 
     while (iterator.hasNext()) { 
      FileItem item = (FileItem) iterator.next(); 
      if (!item.isFormField()) 
      { 
      String fileName = item.getName();  
      String root = getServletContext().getRealPath("/"); 
      File path = new File(root + "/uploads"); 
      if (!path.exists()) 
      { 
       boolean status = path.mkdirs(); 
      } 
      File uploadedFile = new File(path + "/" + fileName); 
      System.out.println(uploadedFile.getAbsolutePath()); 
      System.out.println(uploadedFile.getTotalSpace()); 
     // bytesray = uploadedFile.length(); 
      byte[] b = new byte[(int)uploadedFile.length()]; 
      for (int i = 0; i < b.length; i++) { 
      // System.out.print(b[i]); 
      } 
      String str = b.toString(); 
      System.out.println(" byte array in string---"+str); 
      out.println("<h1>"+str+"</h1>"); 
      if(fileName!="") 
      item.write(uploadedFile); 
      else 
       out.println("file not found"); 
      out.println("<h1>File Uploaded Successfully....:-)</h1>"); 
      } 
      else 
      { 
      String abc = item.getString(); 
      out.println("<br><br><h1>"+abc+"</h1><br><br>"); 
      } 
     } 
     } catch (FileUploadException e) { 
      out.println(e); 
     } catch (Exception e) { 
      out.println(e); 
     } 
    } 
    else 
    { 
     out.println("Not Multipart"); 
    } 
    } 

}

+0

這也許是有用的:http://stackoverflow.com/questions/5463818/calling-servlet-from-jsp – rpax

回答

1

調用一個servlet需要以下步驟。

  1. 配置應用程序,使其知道在這裏找到servlet。

您可能需要將web.xml文件添加到您的項目中。如果您使用的是NetBeans,請轉到新的文件 - Web標準部署描述符(web.xml)。然後,您必須將該servlet信息添加到web.xml文件。這將告訴應用程序在哪裏尋找類。

這裏是一個web.xml文件中servlet配置的例子。

<servlet> 
     <servlet-name>MyServlet</servlet-name> 
     <servlet-class>mypackage.MyServlet</servlet-class> 
    </servlet> 
<servlet-mapping> 
     <servlet-name>MyServlet</servlet-name> 
     <url-pattern>/MyServlet</url-pattern> 
    </servlet-mapping> 

2.從jsp中調用servlet。在你的情況下,通過一個輸入組件在調用中有一個'action'。

<form action="MyServlet?action=doThis" method="post"> 

3在servlet進程中的動作。

String action = request.getParameter("action"); 

if (action.equalsIgnoreCase("doThis"){ 
do this; 
forward = "originaljsp.jsp"; 
} 
RequestDispatcher view = request.getRequestDispatcher(forward); 
     view.forward(request, response); 

這將導致應用程序調用該servlet並立即返回原始狀態。 你將能夠調用你想要的功能,你甚至不會注意到。

+0

我希望同樣的jsp頁面在行動attribute.Any其他解決方案從jsp調用servlet – user3640600

+0

它不工作... – user3640600

3

您可以使用<jsp:include>

<jsp:include page="/servletURL" /> 

然而這通常是相反的。您可以調用servlet,然後轉發到JSP以顯示結果。創建一個在doGet()方法中執行如下操作的Servlet。

request.setAttribute("result", "This is the result of the servlet call"); 
request.getRequestDispatcher("/WEB-INF/result.jsp").forward(request, response); 

/WEB-INF/result.jsp

<p>The result is ${result}</p> 

現在調用由它匹配其<url-pattern>web.xml,例如URL中的Servlet

THIS

如果您的實際問題是「如何提交表單到一個servlet?」那麼您只需在HTML表單操作中指定servlet URL即可。

<form action="servletURL" method="post"> 

它的doPost()方法將被調用。

參見: Servlet Info Page

Oracle Doc

+0

我想通過點擊上傳按鈕來調用servlet – user3640600

0

你可以做2個這樣的步驟

1.更改action屬性給servlet位置

<form id="beneficiary_sales_details" name="beneficiary_sales_details" action="/FileUploadExample" autocomplete="off" method="post">

2.Just改變按鈕類型提交 <input type="submit" value="Upload">