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

时间:2014-07-01 15:32:50

标签: java html servlets hyperlink

我刚刚开始学习servlet而且我正在尝试做一个购物项目。 问题是,当所有超链接具有相同的操作servlet时,如何识别多个超链接中的哪些超链接? 这是代码:

HTML code:

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文件的名称?

1 个答案:

答案 0 :(得分: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

来自{JAVadoc for getParameter(String name),强调我的:

  

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

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