我有一个jsp页面,我在那里调用名为' InsertServlet'的servlet。我在servlet中的服务方法中完成了所需的工作。我还在我的servlet中创建了一个名为doSomething()的用户定义方法。但是现在我无法从我的jsp页面调用doSomething()方法。是可以这样做还是我必须为每一个动作创建一个servlet?!!请有人请帮助我吗??? !!!以下是我的代码>>>
我的jsp页面###
<form action="IbatisInsertServlet" method="POST">
First Name : <input type="text" name="firstName" value="" /><br/>
Last Name : <input type="text" name="lastName" value="" /><br/>
Salary : <input type="text" name="salary" value="" /><br/>
<input type="submit" value="Enter" /><input type="reset" value="Clear" /><br/>
</form>
我的servlet的服务方法,我完成了我的工作###
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
...
...
} catch (Exception ex) {
System.out.println("Exception is :: " + ex.getMessage());
} finally {
out.close();
}
}
我的servlet的doSomething方法,我想称之为###
public void doSomething(){
System.out.println("working");
}
答案 0 :(得分:2)
如果要从JSP(实际上只是一个servlet)调用doSomething
方法,那么我建议您将此代码放在一个单独的类中,该类可以从JSP和/或实例化servlet。这将假设doSomething
的逻辑与request
调用servlet的想法是你通过HTTP连接,所以如果在某些情况下(作为GET / POST的一部分)你要调用doSomething
,那么考虑添加一个参数来通知servlet做此
E.g
myWebApp/myServlet?action=doSomething
答案 1 :(得分:0)
首先,您必须了解Servlet容器的工作原理!
整个事情都有一个想法,名为“不要打电话给我们,我们会打电话给你”也称为“控制倒置”。
因此,当我们编写一个servlet时,我们只需提供容器在需要时可以调用的方法!因此,方法签名是为servlet预定义的,如果您愿意,它不会在您的手中添加任何方法。
所以答案是否定的,你不能直接从jsp调用你的doSomething()
Servlet!
答案 2 :(得分:0)
试试这个例子:
<强> HTML 强>
<form action="IbatisInsertServlet" method="POST">
...
<input type="hidden" value="save" name="cmd"/>
<input type="submit" value="Enter"/>
...
</form>
<form action="IbatisInsertServlet" method="POST">
...
<input type="hidden" value="edit" name="cmd"/>
<input type="submit" value="Edit"/>
...
</form>
<强>的servlet 强>
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String cmd = request.getParameter();//<--
if("save".equals(cmd)) {
save();
}
else if("edit".equals(cmd)) {
edit();
}
} catch (Exception ex) {
System.out.println("Exception is :: " + ex.getMessage());
} finally {
out.close();
}
}
private void save() {
...
}
private void edit() {
...
}
答案 3 :(得分:0)
如果可以从servlet(子类化)扩展JSP页面,可能有办法。您可以将数据发布到同一个jsp页面或servlet(根据您的需要)。您可以调用父类的方法,这里它将是您要扩展的servlet。
您的JSP代码
<%-- top of the page. extend the servlet --%>
<%@ page extends="your.package.IbatisInsertServlet" %>
<form action="IbatisInsertServlet" method="POST">
First Name : <input type="text" name="firstName" value="" /><br/>
Last Name : <input type="text" name="lastName" value="" /><br/>
Salary : <input type="text" name="salary" value="" /><br/>
<input type="submit" value="Enter" /><input type="reset" value="Clear" /><br/>
</form>
<%-- to call the function --%>
<% doSomething() %>
请注意,如果要调用相同的JSP或将其重定向到服务器,则可以将操作留空。另请注意,JSP servlet和IbatisInsertServlet将是两个独立的实例。确保根据需要调用super.service(...)。
这应该对你有用
答案 4 :(得分:0)
这只是对ScaryWombat答案的补充。
如果调用方法doSomething
,它不应该是servlet的一部分,而应该是另一个类的一部分。通过这种方式,您可以将问题分开:
如果完整的应用程序如果少于100行代码,那么它并不重要,但如果它增长,你会得到较小的类,其依赖性较低,更易于编写和测试。
如果这些域类的持续时间不长于请求,则可以由servlet(或JSP)实例化。如果不是,你应该在ServletContextListener
中实例化它们,将它们放在ServletContext
中,并从你想要的任何JSP servlet中使用它们。