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

Java 从jsp页面调用Servlet的多个方法,java,jsp,servlets,Java,Jsp,Servlets,我有一个jsp页面,从中调用名为“InsertServlet”的servlet。我已经在servlet中的服务方法中完成了所需的工作。我还在servlet中创建了一个名为doSomething()的用户定义方法。但是现在我无法从jsp页面调用doSomething()方法。是否有可能做到这一点,或者我必须为每个操作创建一个servlet?!!谁能帮我一下吗???!!!下面是我的代码>>> 我的jsp页面### 我要调用的servlet的doSomething方法### 首先,您必须了解Servl

我有一个jsp页面,从中调用名为“InsertServlet”的servlet。我已经在servlet中的服务方法中完成了所需的工作。我还在servlet中创建了一个名为doSomething()的用户定义方法。但是现在我无法从jsp页面调用doSomething()方法。是否有可能做到这一点,或者我必须为每个操作创建一个servlet?!!谁能帮我一下吗???!!!下面是我的代码>>>

我的jsp页面###

我要调用的servlet的doSomething方法###


首先,您必须了解Servlet容器是如何工作的

整个事情都基于一个想法,名为“不要打电话给我们,我们会打电话给你”,也称为“控制反转”

因此,当我们编写servlet时,我们只需提供容器在需要时可以调用的方法!因此,方法签名是为servlet预定义的,如果您想添加任何方法,它不在您的手中


所以答案是否定的,您不能直接从jsp调用Servlet的
doSomething()

如果要从JSP(实际上只是一个servlet)调用
doSomething
方法,那么我建议您将此代码放在一个单独的类中,该类可以从JSP和/或servlet实例化。这将假定
doSomething
的逻辑与
请求无关

调用servlet的想法是通过HTTP进行接口,因此如果在某些情况下(作为GET / POST的一部分),您想调用<代码> DOWOMENTHON/CODE >,然后考虑添加一个通知servlet的参数来执行此操作。 例如

试试这个例子:

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() {
  ...
}
public void服务(HttpServletRequest请求、HttpServletResponse响应)抛出ServletException、IOException
{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
试一试{

String cmd=request.getParameter();//如果您可以从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(…)


这应该适合你

这只是对可怕的回答的补充

如果调用方法
doSomething
,它不应该是servlet的一部分,而应该是另一个类的一部分。这样,您就可以分离关注点:

  • servlet(包括JSP)管理与表单、请求、响应和会话的交互
  • 其他课程才是真正的工作
如果完整的应用程序的代码少于100行,这并不重要,但如果代码增长,则得到的类更小,依赖性更少,更易于编写和测试


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

我已经考虑过这一点,但正在寻找最好的方法。谢谢您的方法。@SumonBappi,您是否使用任何框架,如果是的话你可以这样做,例如Spring、Liferay、Struts等。我说得很清楚。你确定这
myWebApp/myServlet?action=doSomething
?我从未尝试过,但我对此表示怀疑。@TAsk抱歉,我可能没有说清楚。我建议用户使用普通HTTP(甚至ajax)要将参数传递给servlet,请在servlet测试中为此参数设置参数。如果设置了参数,则调用此方法(无论其用途如何),我将您的答案的一个补充作为我自己的答案,因为它太长,无法进行注释。
myWebApp/myServlet?action=doSomething
<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>
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() {
  ...
}
<%-- 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() %>