【问题标题】:How to differentiate between differrent hyperlinks in same page in servlet?如何区分servlet中同一页面中的不同超链接?
【发布时间】:2014-08-22 05:49:02
【问题描述】:

我刚刚开始学习 servlet,并且正在尝试做一个购物项目。 问题是,当所有超链接都具有相同的操作 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文件的名字?

【问题讨论】:

  • 如果您有单独的问题,您应该单独提出。
  • 不允许在 90 分钟内问超过 1 个问题 :( 并且这两个问题都与相同的代码有关 :) – @Whymarrh

标签: java html servlets hyperlink


【解决方案1】:

您是正确的,无法区分指向同一资源的两个链接: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,强调我的:

将请求参数的值作为字符串返回,如果参数不存在,则返回 null。请求参数是随请求发送的额外信息。 对于 HTTP servlet,参数包含在查询字符串或发布的表单数据中。

Aside: the &lt;a&gt; tag doesn't allow a "value" attribute.

【讨论】:

  • 有什么特别的事情吗?
  • 那个查询参数的东西。没听说过.. :(
  • 是的,我知道不允许使用 value 属性,因为 eclipse 显示了警告,但我做到了,因为我想不出其他任何东西..
猜你喜欢
  • 1970-01-01
  • 2020-09-28
  • 2011-02-11
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2011-02-08
  • 2010-11-12
  • 1970-01-01
相关资源
最近更新 更多