java - 如何区分 servlet 中同一页面中的不同超链接?

标签 java html servlets hyperlink

我刚开始学习 servlet,我正在尝试做一个购物项目。 问题是,当所有超链接都具有相同的 Action servlet 时,我如何识别点击了几个超链接中的哪个超链接? 这是代码:

HTML代码:

Product 1 
<a name="sub" value="1" href="Cart">Add to cart?</a>
Product 2
<a name="sub" value="2" href="Cart">Add to cart?</a>

Servlet代码(Cart.java):

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{
  Connection con=DriverManager.getConnection("...","...","...");
 int id=Integer.parseInt(request.getParameter("sub").trim());
PreparedStatement ps=con.prepareStatement("select price,qty from product where pid=?");
        PrintWriter out=response.getWriter();
        ps.setInt(1, id);
        ResultSet rs=ps.executeQuery();

}

我无法为每个超链接创建单独的 servlet,因为页面上有很多超链接,而且我也有多个页面。所以这是不可能的。

我尝试在标签中添加一个值字段并使用 getParameter() 获取值,但我得到了 NULL 指针异常。 我应该怎么办? 如果我在 servlet 中明确设置 id 的值,代码运行良好。但这无法完成,因为 servlet 将仅适用于该特定产品。 我只是一个初学者,不知道 java 中是否存在任何方法。 :(

我还想问一下,如果多个 html 页面调用同一个 servlet,有没有办法在 servlet 中获取该 html 文件的名称?

最佳答案

您是正确的,无法区分指向同一资源的两个链接:Cart资源是 Cart资源,无论谁链接到它。

如何将多个东西添加到购物车?

可以创建一个新的 servlet 来处理将每个产品添加到购物车:

Product 1 <a href="AddProduct1">Add to cart?</a>
Product 2 <a href="AddProduct2">Add to cart?</a>
Product 3 <a href="AddProduct3">Add to cart?</a>
Product 4 <a href="AddProduct4">Add to cart?</a>
<!-- etc. -->

但正如您在 OP 中指出的那样,这不是一个很好的方法 — 这不会扩展。

与所有事情一样,有很多方法可以解决这个问题。一种方法是添加 query parameter到资源。这样做将允许您将一些数据传递给 servlet(并通过 getParameter("product") 在您的 servlet 中获取)。例如,您可以像这样创建链接:

Product 1 <a href="Cart?product=1">Add to cart?</a>
Product 2 <a href="Cart?product=2">Add to cart?</a>

以上都链接到相同的 servlet,相同的资源,但每个链接都会将不同的数据传递给 servlet。在您的 servlet 中,您可以获得这些数据并使用它来确定需要做什么:

String productId = request.getParameter("product");
// Add product to cart

来自 getParameter(String name) 的 Java Javadoc ,强调我的:

Returns the value of a request parameter as a String, or null if the parameter does not exist. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.

Aside: the <a> tag doesn't allow a "value" attribute.

关于java - 如何区分 servlet 中同一页面中的不同超链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24514144/

相关文章:

java - 使用反射在 Java 中动态显式转换原始类型

java - 将重新启动、关闭和调整功能应用于 JOptionPane 的特定选项

javascript - 如何在 JavaScript 中向当前 slider 添加下一个和上一个链接?

javascript - 如何使用确认和引导模式获得相同的行为

Java - 使用 Gson 库从 servlet 返回 JSON

java - Servlet 文件上传内存消耗

java - 是否有任何基准比较 Java 8 Streams 和 Guava Iterables?

java - SQL Server/JDBC 连接问题

html - 仅当图像不是背景图像时,如何使用 CSS 使图像响应?

java - 当我单击注销链接一次时,它不会返回,但是当我单击注销链接两次时,它会返回或上一页