0

基本的なサーブレットとJSPテクノロジを学び、それを使用して簡単なWebサイトを設計しています。

ウェブサイトの目的は、製品を販売することです。製品の詳細はデータベースに保存されます。データベースからデータを取得し、動的ページを表示したい。私はMVCアプローチを使用しており、可能な限りOOにしようとしています。

カテゴリページで問題が発生しています(さまざまな製品のインデックスとして機能することを目的としています... DBに保存されているカテゴリを取得して表示したい)。

詳細は以下のとおりです。

  1. テーブルを表す単純なJavaクラスを作成しました。テーブルの名前はDBの「Categories」です...このクラスはCategoryTableという名前で、テーブルのさまざまな属性を表すインスタンスフィールドが含まれています。

  2. CategoryRetrieverという名前のPOJOがモデルとして機能します。テーブルから特定の行のデータをCategoryTableのオブジェクトに挿入し、最後にさまざまなCategoryTableオブジェクトのArrayListを作成します。このArrayListには、取得したすべてのデータが含まれています。

  3. デザインのコントローラーは、CategoryControllerという名前のサーブレットです。CategoryRetrieverのオブジェクトを作成し、これをCategoryDisplayerという名前のJSPに渡します。

  4. すべてがうまくコンパイルされています。JSPを除く。WEBLOGICを使用してデプロイした後。jspは次のエラーを出します。

G:\ bea \ weblogic81 \ server\bin。\myserver.wlnotdelete\ extract \ myserver_MiniProject_build \ jsp_servlet__categorydisplayer.java:173:シンボルシンボルを解決できません:クラスCategoryTableの場所:クラスjsp_servlet .__ categorydisplayer CategoryTable tp =(CategoryTable)categoryContent.get(i ); // [/CategoryDisplayer.jsp; 行:35] ^

このことから、ルートプロジェクトディレクトリの直下にあるJSPは、root >> WEB-INF>>source内にあるCategoryTableクラスを見つけることができないと推測できます。

私のJSPにはincludeステートメントなどが必要ですか?はいの場合、それを行う方法は?

4

2 に答える 2

1

一見すると、これはクラスをパッケージに入れなかったためです。パッケージレスクラスは、上のパッケージ内の他のクラスから表示/インポートできません。つまり、JSPファイルはコンパイルさJspServletれ、servletcontainer固有のパッケージに配置される拡張クラスに変換されます。そこから、パッケージレスクラスを表示/インポートすることはできません。

クラスを別の場所で再利用/インポートできるようにしたい場合は、常にパッケージに入れてください。

例えば

package com.shahensha.model;

public class Category {}

package com.shahensha.dao;

public class CategoryDAO {}

package com.shahensha.controller;

public class CategoryController extends HttpServlet {}

パッケージレスサーブレットは、特定の構成(Apache Tomcatなど)の特定のバージョンの特定のサーブレットコンテナで機能しますが、これは、パッケージにクラスを配置することを控える有効な手段ではないことに注意してください。


とはいえ、これは、JSPファイル内でスクリプトレットを使用していることを示しています。これは悪い習慣です。むしろ、サーブレットを使用してJSPのデータを準備し、JSTLなどのtaglibを使用してJSPページのフローを制御し、EL(式言語など${})を使用してバックエンドデータにアクセスします。

も参照してください


更新:メモ帳/ cmdの使用について言及したので、Saheedの答えだけを強調します。class( )ファイルをsource( )ファイル*.classと同じフォルダーに保持するのではなく、に保持する必要があります。上記のパッケージ例を使用する場合、クラスは次の場所に配置する必要があります。*.java/WEB-INF/classes

  • /WEB-INF/classes/com/shahensha/model/Category.class
  • /WEB-INF/classes/com/shahensha/dao/CategoryDAO.class
  • /WEB-INF/classes/com/shahensha/controller/CategoryController.class

IDEを使用している場合は、自動でコンパイルおよびビルドする必要があります。

于 2010-07-28T11:27:31.447 に答える
0

...ルート>>WEB-INF>>ソース内にあるCategoryTableクラスが見つかりません... WEB-INF/classesフォルダー
を意味していると思います。

私のJSPはincludeステートメントか何かを必要としますか...もしそうなら、それを行う方法は?
はい。不足しているクラスをインポートするには:

<%@ page import="CategoryTable" %>
于 2010-07-28T09:15:40.080 に答える