だから私はMVCパターンに従ってウェブサイトを構築しています。Eclipse/Tomcat を使用しています。
DB から投稿を取得する PostAccess クラスがあり、PostBean アイテムを含むベクターを作成します。サーブレットはベクトルをjspファイルに渡し、jspファイルはhtmlなどを作成します。
私の問題は、複数のスレッドがベクターと対話しているため、Eclipseでこれを取得することです:
java.util.NoSuchElementException
at java.util.Vector$Itr.next(Unknown Source)
グーグルで学んだように、このエラーは、ベクトルを編集するスレッドを同期していないために発生します。
しかし、正確にはどこで同期を行うべきですか?
このコードは私の PostAccess クラスにあります:
public synchronized Vector<Post> RetrievePosts() throws SQLException
{
ベクトル c = (ベクトル)(新しいベクトル());c を返します。}
これは私のサーブレットクラスにあります:
public synchronized void process(ServletContext servletContext,HttpServletRequest request, HttpServletResponse response)
{
Vector<Post> c = (Vector<Post>)(new Vector<Post>());
try {
PostDAO pDAO=new PostDAO(servletContext);
c=(Vector<Post>) pDAO.RetrievePosts();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
request.setAttribute("posts", c);
}
これは私のjspにあります:
<% Vector<Post> c =(Vector<Post>)request.getAttribute("posts");
Iterator<Post> i = c.iterator();
herePost p=(Post)i.next();
while (!c.isEmpty()) { %>