从servlet调用servlet,在一个应用程序中调用JSP(wo Form)

时间:2016-05-24 22:03:25

标签: java jsp servlets

如何从另一个Servlet调用Servlet?在一个应用程序中。

public class DBaddData extends HttpServlet {

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ....some actions here...
    ...get data from JSP...
    ...call INSERT INTO method...
    ...and then I want to call SELECT servlet...


    RequestDispatcher view = getServletContext().getRequestDispatcher("/myServlets/DBselTankList");
    view.forward(req, resp);
}

}

但我只得到:

  

请求的资源不可用。

"选择servlet"从DB调用select方法,然后显示带结果的JSP

public class DBselTankList extends HttpServlet {


protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
 DBSelectRows dbSR = new DBSelectRows();  

    List<DBObjBaseStd> dboBStd=new ArrayList<DBObjBaseStd>();

    dboBStd=dbSR.sel(DBConnStrings.driver, DBConnStrings.url, DBConnStrings.dbName, DBConnStrings.userName, DBConnStrings.password, DBConnStrings.sslState);

    req.setAttribute("list", dboBStd);
    RequestDispatcher view = req.getRequestDispatcher("selectedTankList.jsp");
    view.forward(req, resp);
}

}

我还希望通过标题链接获取 selectedTankList.jsp

<a href="selectedTankList.jsp">Tank list</a>

但是如何调用&#34;选择servlet&#34;没有表单提交按钮?

1 个答案:

答案 0 :(得分:1)

最终我发现了。 当您通过单击链接调用Servlet时(即您调用第一个在doGet内执行代码的Servlet,并且只在此之后将JSP发送到客户端),您需要为href添加URL,这必须是您在映射目标servlet期间在<url-pattern>...</url-pattern>中的标记web.xml之间放置的内容。 对于上面的示例,它必须是:

<a href="DBselTankList">Tank list</a>

为什么DBselTankList?因为请查看我的web.xml

<servlet-name>DBselTankList</servlet-name>
<servlet-class>myServlets.DBselTankList</servlet-class>
<servlet-mapping>
    <servlet-name>DBselTankList</servlet-name>
    <url-pattern>/DBselTankList</url-pattern>
</servlet-mapping>
顺便说一下,名字不好,对我很惭愧。我必须花时间研究命名的好方法。 因此,当您从另一个Servlet(同时在一个项目中)调用Servlet时,请执行以下操作:

RequestDispatcher view =  getServletContext().getRequestDispatcher("/DBselTankList");
view.forward(req, resp);

即添加&#34; / &#34;在与href

相同的名称之前