【问题标题】:Calling a Servlet when loading the index page加载索引页面时调用 Servlet
【发布时间】:2014-10-12 04:29:45
【问题描述】:

我需要从数据库中加载一些数据的列表并将它们显示在我的索引 JSP 页面上。我这样做的方法是像这样在索引页面中调用 Servlet。

<body>
    <jsp:include page="listAll" />
    <fieldset>

        <legend>Search Here</legend>
        <input type="text" id="search" name="search"/>
        <input type="button" value="Search" id="searchBtn"/>

    </fieldset>

</body> 

我将在 listAll servlet 中进行编码并向请求添加一个属性。我需要知道的是,这种方式正确吗?我可以那样做我需要的吗? 如果没有,该怎么做?

【问题讨论】:

  • 如果你想使用 servlet 将它与 ajax 一起使用,它将完全满足你的要求。因为你不能在 jsp:include 中包含一个 servlet。只有在你设置了响应类型时才有可能

标签: java jsp servlets


【解决方案1】:

在 Java Web App 中,有一个名为 welcome-file-list 的 web.xml 文件属性。

welcome-file-list 告诉 Web 应用如果没有指定更具体的 URL,则要提取哪些 URL。

通常,此值配置为 index.jsp,但它可以是 Web 应用程序中的任何映射。

如果您想要一个 servlet 响应,而不是 index.jsp,那么您应该正确映射 servlet,然后在 welcome-file-list 中使用该引用。

考虑:

<welcome-file-list>
    <welcome-file>index</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>IndexServlet</servlet-name>
    <servlet-class>pkg.IndexServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>IndexServlet</servlet-name>
    <url-pattern>/index</url-pattern>
</servlet-mapping>

这里我们将pkg.IndexServlet 映射到/index。我们还告诉应用程序index 是此应用程序的欢迎文件。因此,在内部,当应用程序看到http://host.com/webapp 时,它会自动将index 附加到它,然后适当地路由它,这会将它引导到映射到/index 的servlet。

一旦你正确映射了这个,你就想做一个@Matthias 在这里做过的模式,servlet 收集数据,然后转发到 JSP。

【讨论】:

    【解决方案2】:

    我不完全确定我是否理解您想要做的事情。但我相信您尝试在 JSP 页面中显示数据列表,并且您希望实现一个 Servlet,该 Servlet 执行从数据库中获取所有内容的实际繁重工作以及类似的事情。

    如果我是你,我会这样做:创建一个 servlet,它对数据库执行实际调用并将数据加载到请求属性中。然后从 Servlet 转发到实际显示数据的 JSP

    protected void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException {
        List<DataElement> list = new ArrayList<DataElement>(); // lets assume this is the list we got from the DB
        request.setAttribute("list", list); 
        String nextJSP = "/searchResults.jsp";
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
        dispatcher.forward(request,response);
    }
    

    然后您可以在 JSP 中访问请求属性并使用 JSTL 对其进行迭代

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <html>
    <body>
    <c:forEach var="dataElem" items="${list}">
       Item <c:out value="${dataElem.someValue}"/><p>
    </c:forEach>
    </body>
    </html>
    

    【讨论】:

    • 您展示了doPost 方法,但对于index 页面,我认为doGet 更合适...
    • Serge确定对于索引页面get方法会更好,会编辑答案
    【解决方案3】:

    您的方法看起来不错。您可以将这些东西包装在form 中。这样您就可以在 servlet 中获取它们。

    <form action="servletURL" method="post">
            <input type="text" id="search" name="search"/>
            <input type="submit" value="Search" id="searchBtn"/>
    </form>
    

    您可以在 doPost() 方法中使用 request#getParameter 获取这些值。

    【讨论】:

      猜你喜欢
      • 2015-04-21
      • 2021-01-27
      • 2014-07-26
      • 1970-01-01
      相关资源
      最近更新 更多