[英]How can I call servlet from jsp without using form
这可能是一个重复的问题,我深表歉意。 我有一个 jsp 页面,其中有一些按钮。 每个按钮都有自己的 servlet 可以调用。 我想知道是否有任何方法可以在不使用表单的情况下调用这些 servlet,因为用户可以选择给定的 3 个功能中的任何一个。 我还需要将一个值从 jsp 页面传递给我调用的 servlet。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Configurations</title>
<script type="text/javascript">
function runConfiguration(){
var config=${dataValues.get(0)};
//call servlet
}
function editConfiguration(){
var config=${dataValues.get(0)};
//call servlet
}
function deleteConfiguration(){
var config=${dataValues.get(0)};
//call servlet
}
</script>
</head>
<body>
<%
String[] label={"Master Port","Baud Rate","Char Size","Stop Bits","Parity","RTU Port","Baud Rate","Char Size","Stop Bits", "Parity"};
int i=0;
%>
<br>
<br>
<br>
<table align="center" border="1">
<td><div align="center" style="background-color: goldenrod;"><b> ${dataValues.get(0)}</b></div>
<table width="210" align="left" border="1">
<td bgcolor="goldenrod"><b> Header1 </b></td>
<c:forEach var="data" begin="1" end="5" items="${dataValues}" varStatus="status">
<tr>
<td><%=label[i++]%>: ${data}</td>
</tr>
</c:forEach>
</table>
<table width="210" align="left" border="1">
<td bgcolor="goldenrod"><b> Header2 </b></td>
<c:forEach var="data" begin="6" end="10" items="${dataValues}" varStatus="status">
<tr>
<td><%=label[i++]%>: ${data}</td>
</tr>
</c:forEach>
</table>
</td>
</table>
<c:choose>
<c:when test="${dataValues.get(11)==1}">
<p align="center"><b><i>This configuration is already running</i></b></p>
<p align="center">
<input type="button" value="stop" onclick="StopConfiguration"/>
</p>
</c:when>
<c:otherwise>
<p align="center"><b><i>This configuration is currently NOT running</i></b></p>
<p align="center">
<button type="button" onclick="runConfiguration()">Run</button>
<button type="button" onclick="editConfiguration()">Edit</button>
<button type="button" onclick="deleteConfiguration()">Delete</button>
</p>
</c:otherwise>
</c:choose>
</body>
</html>
我在这里看到 2 个选项:
在发送 POST 请求之前,使用 JavaScript 根据每个按钮相应地更改表单的 URL;
对所有 3 种情况使用表单和相同的 servlet。 在 servlet 中,您应该确定按下了哪个按钮(它们的值作为请求参数传递),然后相应地前进。
您可以使用 Ajax 来执行此操作,或者使用更糟糕但可运行的方式,您可以更改当前窗口 url 并重新加载页面。
对于 Ajax 调用,我建议您使用 ExtJS。 请参阅Ext.Ajax 用法
请在您的 JSP 中指定操作字符串并在您的 servlet 中检查它。
根据该字符串操作,您可以在 servlet 代码中设置条件,即您希望该特定操作执行什么操作。 请看下面这是我在我的代码中所做的。
例如
<A href="<%=request.getContextPath()%>/JobAction?action=runConfig">RUN</a>
<a href="<%=request.getContextPath()%>/JobAction?action=editConfig">EDIT</a>
您可以只调用一个 servlet,而不是调用多个 servlet。 在您的 servlet 中使用这样的代码。
String action = request.getParameter("action");
if (action.equalsIgnoreCase("runConfig")) {
// Specify what you want to do
} else if (action.equalsIgnoreCase("editConfig")) {
// Specify what you want to do
} else if (action.equalsIgnoreCase("deleteConfig")) {
// Specify what you want to do
}
您还可以使用 Javascript,并在用户点击按钮时调用脚本并动态更改 url 并提交该表单。
这是一个例子......
<form action = "something".....>
your stuff here....
<button type="button" onclick="runConfiguration(actionName)">Run</button>
<button type="button" onclick="editConfiguration(actionName)">Edit</button>
<button type = "button" onclick = "deleteConfiguration(actionName)">Delete</button>
在你的脚本中
<script type="text/javascript">
function runConfiguration(actionName){
var config=${dataValues.get(0)};
goToPage(actionName);
//call servlet
}
function editConfiguration(actionName){
var config=${dataValues.get(0)};
goToPage(actionName)
//call servlet
}
function deleteConfiguration(actionName){
var config=${dataValues.get(0)};
goToPage(actionName)
//call servlet
}
function gotopage(actionname)
{
document.formName=actionname;
document.formName.submit();
}
</script>
你可以使用这个:
<a href="<%=request.getContextPath()%>/logout"> Logout </a>
如果你想给它添加一些引导程序,你所要做的就是
<a href="<%=request.getContextPath()%>/logOut">
<button class="btn btn-outline-secondary" type="button">log out </button>
</a>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.