2016-05-24 3 views
0

Я создал веб-приложение с помощью сервлета и JSP. Моя первая страница выглядит так: http://i.stack.imgur.com/UCF8t.pngКак сделать двойной вперед в одном сервлете?

У меня есть два JSP-файла, в которых я хочу перенаправить свое веб-приложение на основе щелчка. Если пользователь нажмет на удаление, то мой веб-приложение перенаправляет его на FrontPage.jsp и когда пользователь нажимает на создание, когда веб-приложение должно перенаправить его на 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> 

Это мой 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> 

Я новичок в сервлетов и JSP. Возможно, мне не хватает чего-то очевидного. Любая помощь была бы оценена

+0

Необходимо вернуться; выполнение кода не останавливается только потому, что вы вызвали метод. –

+1

forward, перенаправление может произойти только один раз при выполнении сервлета. Вы можете иметь, если есть другие условия для выполнения переадресации, но не могут иметь несколько форвардов, выполняемых в сервлете. Я предлагаю вам пройти JFS-книгу серфинга Headfirst, чтобы понять основы сервлетов. –

+0

@DaveNewton Я смущен. Не могли бы вы рассказать? Что я должен вернуть? – Rose

ответ

0

Если вы посмотрите на коды, вы пишете что-то на свой ответ после вашего переезда.

Просто прекратите это делать. или просто вы можете попробовать добавить возврат после форварда.

Или сначала обработайте результат, а затем вперед в конце.

+0

@NupurJaiswal Inshort, ваш вперед должен быть последним. –

 Смежные вопросы

  • Нет связанных вопросов^_^