2016-05-24 11 views
0

サーブレットとJSPを使用してWebアプリケーションを作成しました。私の一番上のページは次のようになります:http://i.stack.imgur.com/UCF8t.png単一のサーブレットで二重転送を行う方法は?

クリックに基づいてWebアプリケーションをリダイレクトしたい2つのJSPファイルがあります。ユーザーが削除をクリックすると、私のWebアプリケーションからFrontPage.jspにリダイレクトされ、ユーザーがcreateをクリックすると、Webアプリケーションはindex.jspにリダイレクトする必要があります。私はこのリンクDouble forward in one servletを参照し、適切な要求に応じて適切なリソースに転送する条件文を使用しようとしました。これは私のサーブレットは

java.lang.IllegalStateException: Cannot forward after response has been committed 

です:ユーザーは、コレクション名を入力し、作成をクリックしたときにでも、私が言うエラーを得た

 @WebServlet(description = "My first collection servlet", urlPatterns = { 
    "/CollectionPath" }) 
public class Collection extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void doPost(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 

    response.setContentType("text/html"); 

    String deleteFileName = request.getParameter("filename"); 
    System.out.println("you clicked on " + deleteFileName); 
    File f = new File(
     "C:/Apps/eclipse-jee-mars-2-win32-x86_64/eclipse/" + deleteFileName); 
    if (f.delete()) { 
     System.out.println(f + "is deleted"); 

    } else { 
     System.out.println(f + "is not deleteds"); 
    } 


    String CollectionName = request.getParameter("myCollectionName"); 
    request.setAttribute("collectionName", CollectionName); 

    if (CollectionName == null) { 
     request.getRequestDispatcher("FrontPage.jsp").forward(request, response); 
    } 

    else if (CollectionName != null) { 
     request.getRequestDispatcher("index.jsp").forward(request, response); 
    } 

    String Pattern = request.getParameter("Pattern"); 
    String NotPattern = request.getParameter("NotPattern"); 
    String CollectionNameValue = request.getParameter("CollectionNameValue"); 
    File file = new File(CollectionNameValue + ".xml"); 
    file.createNewFile(); 
    FileWriter writer = new FileWriter(file); 
    System.out.println(file.getAbsolutePath()); 
    writer.write("<?xml version=\"1.0\"?><collection><includePatterns>" 
     + Pattern + "</includePatterns><doNotIncludePatterns>" + NotPattern 
     + "</doNotIncludePatterns></collection>"); 
    writer.flush(); 
    writer.close(); 

    } 

} 

私は、ユーザーであれば、次のページにリダイレクトすることができました削除をクリックしますが、ユーザーが作成をクリックするとリダイレクトできません。 これは私のFrontPage.jsp

<%@page import="java.io.File"%> 
<%@ 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"> 
<html> 
<head> 
<meta charset="ISO-8859-1"> 

</head> 

<body> 

    A collection is a subset of the complete index. For example, create a 
    marketing collection or an engineering collection to support searches 
    only in the marketing or engineering pages in your index. You specify 
    the contents of the collection using URL patterns. Create as many 
    collections as you need. 
    <br> 
    <br> 
    <b>Current Collections</b> 

    <table width="100%" border="1"> 

     <% 
      File folder = new File("C:/Apps/eclipse-jee-mars-2-win32-x86_64/eclipse"); 
      File[] listOfFiles = folder.listFiles(); 
      for (int i = 0; i < listOfFiles.length; i++) { 
     %> 
     <tr> 
      <% 
       if (listOfFiles[i].isFile()) { 
      %> 
      <td><%=listOfFiles[i].getName()%></td> 
      <td> 
       <form method="post" action='CollectionPath'> 
        <input type="submit" value="Delete" 
         onclick="return confirm('Are you sure you want to proceed?')"> 
        <input type="hidden" value="<%=listOfFiles[i].getName()%>" 
         name="filename" /> 
       </form> 
      </td> 
      <% 
       } 
      %> 
     </tr> 
     <% 
      } 
     %> 
    </table> 
    <br> 

    <title>Create New Collection</title> 
    <h> <b>Create New Collection</b></h> 
    <br> Collection Name: 
    <textarea name="myCollectionName" cols="10" rows="1"></textarea> 
    <br> 
    <br> 
    <form method="post" action='CollectionPath'> 
     <input type="submit" value="Create" 
      style="color: white; background: blue" /> 
    </form> 
</body> 
</html> 

ですこれは私がサーブレットとJSPへの初心者です、私のindex.jspを

<%@page import="java.io.File"%> 
<%@ 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"> 
<html> 
<head> 
<meta charset="ISO-8859-1"> 

</head> 

<body> 

    A collection is a subset of the complete index. For example, create a 
    marketing collection or an engineering collection to support searches 
    only in the marketing or engineering pages in your index. You specify 
    the contents of the collection using URL patterns. Create as many 
    collections as you need. 
    <br> 
    <br> 
    <b>Current Collections</b> 

    <table width="100%" border="1"> 

     <% 
      File folder = new File("C:/Apps/eclipse-jee-mars-2-win32-x86_64/eclipse"); 
      File[] listOfFiles = folder.listFiles(); 
      for (int i = 0; i < listOfFiles.length; i++) { 
     %> 
     <tr> 
      <% 
       if (listOfFiles[i].isFile()) { 
      %> 
      <td><%=listOfFiles[i].getName()%></td> 
      <td> 
       <form method="post" action='CollectionPath'> 
        <input type="submit" value="Delete" 
         onclick="return confirm('Are you sure you want to proceed?')"> 
        <input type="hidden" value="<%=listOfFiles[i].getName()%>" 
         name="filename" /> 
       </form> 
      </td> 
      <% 
       } 
      %> 
     </tr> 
     <% 
      } 
     %> 
    </table> 
    <br> 

    <title>Create New Collection</title> 
    <h> <b>Create New Collection</b></h> 
    <br> Collection Name: 
    <textarea name="myCollectionName" cols="10" rows="1"></textarea> 
    <br> 
    <br> 
    <form method="post" action='CollectionPath'> 
     <input type="submit" value="Create" 
      style="color: white; background: blue" /> 
    </form> 
</body> 
</html> 

です。私は何かが明らかでないかもしれない。任意の助けを歓迎する

+0

返品する必要があります。メソッドを呼び出しただけでコードの実行が停止することはありません。 –

+1

forward、リダイレクトはサーブレットの実行中に1回しか実行できません。転送を行う条件が他にもあるかもしれませんが、サーブレットで複数の転送を実行することはできません。私はあなたがHeadfirstサーブレットを介して行くことをお勧めしますサーブレットの基本を得るためにJSPの本 –

+0

@DaveNewton私は混乱しています。あなたは詳細を教えていただけますか?私は何を返すべきですか? – Rose

答えて

0

コードを見れば、あなたはあなたの応答後何かを書いている。

ちょうどやめてください。または単に転送後にリターンを追加することができます。

最初に処理してから最後に処理します。

+0

@ NupurJaiswalインフォート、あなたの転送は最後の行でなければなりません。 –

関連する問題