サーブレットと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>
です。私は何かが明らかでないかもしれない。任意の助けを歓迎する
返品する必要があります。メソッドを呼び出しただけでコードの実行が停止することはありません。 –
forward、リダイレクトはサーブレットの実行中に1回しか実行できません。転送を行う条件が他にもあるかもしれませんが、サーブレットで複数の転送を実行することはできません。私はあなたがHeadfirstサーブレットを介して行くことをお勧めしますサーブレットの基本を得るためにJSPの本 –
@DaveNewton私は混乱しています。あなたは詳細を教えていただけますか?私は何を返すべきですか? – Rose