从jsp页面调用Servlet的多个方法

时间:2014-07-16 04:50:37

标签: java jsp servlets

我有一个jsp页面,我在那里调用名为' InsertServlet'的servlet。我在servlet中的服务方法中完成了所需的工作。我还在我的servlet中创建了一个名为doS​​omething()的用户定义方法。但是现在我无法从我的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");
}

5 个答案:

答案 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的一部分,而应该是另一个类的一部分。通过这种方式,您可以将问题分开:

  • servlets(包括JSP)管理与表单,请求,响应,会话的交互
  • 其他班级做真正的工作

如果完整的应用程序如果少于100行代码,那么它并不重要,但如果它增长,你会得到较小的类,其依赖性较低,更易于编写和测试。

如果这些类的持续时间不长于请求,则可以由servlet(或JSP)实例化。如果不是,你应该在ServletContextListener中实例化它们,将它们放在ServletContext中,并从你想要的任何JSP servlet中使用它们。