0

我是 jsp/servlet 的新手,并试图弄清楚编写 jsp 页面的正确方法是什么。我在这里读过另一个帖子,说 scriplets 不是一个很好的技术,应该避免。我正在尝试找到一个用 servlet 替换 jsp 的完整示例,因为我已经阅读了其他一些答案并且我有点困惑。

实际上,在我的主页中,我有一个链接标记(产品)重定向到 product.jsp,其中一个脚本用于显示我的数据库中的所有产品(名称、型号、价格、制造商)。

如果我想将其转换为 servlet,我该怎么做?我知道创建一个扩展 HttpServlet 并使用 doGet 的类。就像是:

public class IndexController extends HttpServlet {
    ListProducts listProducts;
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("products", listProducts.getproducts());
        req.getRequestDispatcher("/index.jsp").forward(req, resp);
    }

}

除此之外,我需要一个ListProducts建立数据库连接的类和一个getProducts返回内部产品列表的函数?还是我错过了什么?如果我想从 servlet 内部的 url 传递参数以获取特定产品怎么办?

非常感谢任何帮助。

4

2 回答 2

0

JSP 应该只有表示逻辑,我们在其中显示/收集来自用户的信息。JSP 应该将这些信息传递给我们拥有业务逻辑的 Servlet,并发送回响应,该响应再次显示在 JSP 或 HTML 页面中。

(理想情况下,servlet 应该调用一个服务类,该类又调用一个 DAO 进行任何 DB 交互)

请阅读 Servlets JSP 的基础知识 我推荐Head First JSP/Servlets具有强大的基础知识,您可以编写好的应用程序。

回应您的编辑:

在 JSP 中使用 JSTL 标签来显示数据。创建一个ProductServiceProductDao类。ProductDao 将通过 getProducts(String productId) 和 deleteProduct(id) 等方法与 DB 交互。

在 ProductService 中有类似的方法,这里有所有的业务逻辑。

并从您的 Servlets doGet 或 doPost 调用应该调用您的 Dao 方法的服务类方法。

如果您正在向应用程序/数据库添加/编辑数据,请使用 POST,如果您正在请求现有数据,请使用 get。

并检查这些教程。

于 2013-11-13T08:57:40.660 回答
0

好吧,这更像是您要使用的(模型视图控制器)MVC架构,这是一件好事。

您已经创建了 Servlet(控制器)。

现在您需要一个名为ListProducts的类,它充当Model

视图将是您想要显示结果的 jsp。

ListProducts将有一个列表(可能是一个ArrayList)来保存产品列表和一个方法getProducts来返回列表。

这个ListProducts类可以使用另一个可以创建数据库连接并进行查询的类。ListProducts类应该调用创建数据库连接并获取产品列表并自行更新的类的方法之一。

在此之后,您的 servlet 可以从ListProducts 类中获取此列表并将其显示在某个 jsp 上。

例子:

class HandleDBConnections{

    ArrayList listOfProducts;

   makeQuery(String param);

   ArrayList getList(String yourParameterForSpecificProduct) {
       listOfProducts = makeQuery(yourParameterForSpecificProduct);
       return this.listOfProducts;
   }
}


class ListProducts {
    ArrayList list;
    getProducts() {
        // get list from DB handlers above

        return this.list; // return the list
    }
}

现在您还可以从 servlet 传递一些参数来获取特定产品。这yourParameterForSpecificProduct是出于相同的目的。如果您不想传递参数,则可以再使用一种无​​参数的同名方法。

于 2013-11-13T09:12:17.127 回答