超链接调用java方法_如何通过单击JSP页面中的超链接或按钮将当前项传递给Java方法?...

本文介绍了如何避免通过超链接直接调用Java方法进行数据删除,建议使用Servlet处理HTTP请求,特别是在涉及业务逻辑时。提供了一个示例,展示了如何在Servlet中处理产品的添加、编辑和删除操作,以及如何在JSP页面中展示数据并创建链接和按钮。
摘要由CSDN通过智能技术生成

最简单的方法:只需让链接指向JSP页面并将行ID作为参数传递:delete

和在delete.jsp (我把明显的请求参数检查/验证放在一边):

然而,这是一个美丽的不良实践(这仍然是一种轻描淡写的说法),原因有二:修改服务器端数据的http请求不应由到达,但是岗..链接是隐式的GET。想象一下,当像googlebot这样的网络爬虫试图跟踪所有的删除链接时会发生什么。您应该使用

和一个对于删除操作。但是,您可以使用CSS对按钮进行样式设置,使其看起来像链接。编辑链接,它只是预加载项目,以预填充编辑表单,可以安全地得到。

将业务逻辑(功能)在JSP中使用脚本(那些事情)是气馁的。您应该使用Servlet若要控制、预处理和后处理HTTP请求,请执行以下操作。

由于您的问题中没有提到servlet,所以我怀疑您已经在使用scriptlet从DB加载数据并将其显示在表中。这也应该由servlet来完成。

这里是一个基本的开场例子,如何做到这一切。我不知道表数据代表什么,所以让我们来看看Product举个例子。public class Product {

private Long id;

private String name;

private String description;

private BigDecimal price;

// Add/generate public getters and setters.}

然后是JSP文件,它使用JSTL(放下Jstl-1.2.jar在……里面/WEB-INF/lib)以显示产品在每行都有编辑链接和删除按钮的表中:

...

editdelete

add

给它起个名字products.jsp把它放进去/WEB-INF文件夹,因此URL无法直接访问它(因此,Enduser被迫为此调用servlet)。

以下是servlet的大致样子(为了简洁起见,省略了验证):@WebServlet("/products")public class ProductsServlet extends HttpServlet {

private ProductDAO productDAO; // EJB, plain DAO, etc.

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

List products = productDAO.list();

request.setAttribute("products", products); // Will be available as ${products} in JSP.

request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String delete = request.getParameter("delete");

if (delete != null) { // Is the delete button pressed?

productDAO.delete(Long.valueOf(delete));

}

response.sendRedirect(request.getContextPath() + "/products"); // Refresh page with table.

}}

下面是添加/编辑表单的方式/WEB-INF/product.jsp看起来像:

...

Name

Description

Price

save

这个fn:escapeXml()只是为了防止XSS攻击当重新显示编辑数据时,它所做的与,只适合在attribtues使用。

这里是如何productservlet看起来类似于(同样,为了简洁起见省略了转换/验证):@WebServlet("/product")public class ProductServlet extends HttpServlet {

private ProductDAO productDAO; // EJB, plain DAO, etc.

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String edit = request.getParameter("edit");

if (edit != null) { // Is the edit link clicked?

Product product = productDAO.find(Long.valueOf(delete));

request.setAttribute("product", product); // Will be available as ${product} in JSP.

}

request.getRequestDispatcher("/WEB-INF/product.jsp").forward(request, response);

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String save = request.getParameter("save");

if (save != null) { // Is the save button pressed? (note: if empty then no product ID was supplied, which means that it's "add product".

Product product = (save.isEmpty()) ? new Product() : productDAO.find(Long.valueOf(save));

product.setName(request.getParameter("name"));

product.setDescription(request.getParameter("description"));

product.setPrice(new BigDecimal(request.getParameter("price")));

productDAO.save(product);

}

response.sendRedirect(request.getContextPath() + "/products"); // Go to page with table.

}}

另见:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值