使用Servlet和HTML

问题描述 投票:1回答:4

我有一个关于使用的servlet的一个疑问。

在应用我建我使用的HTML页面,要求信息的用户。

想象一下,一个Html页面,让用户要求在屏幕上看到数据的基础上的内容。我正在做的是:

1.-从HTML页面我打电话一个servlet,将打开与数据库的连接。 2:该servlet构建Web页面,用户将看到的。

我的问题是:有没有这样做的任何其他方式?我必须在servlet构建Web页面或是否有发送包含在数据库中的信息来一个.html文件将建立网页的任何方式(在我的情况,我需要在屏幕上显示一个包含所有的表信息)?

谢谢

java html servlets
4个回答
1
投票

最终,浏览器必须发送到服务器数据库信息的请求。你可以在许多方面做到这一点:

  1. 构建整个页面在servlet(也许是最简单)
  2. 在包含Servlet(说)XML数据构建一个页面,浏览器渲染成HTML(XSL通过/使用Javascript等)。如果您希望浏览器来控制格式化和表示这可能是合适的。
  3. 构建包含AJAX请求返回到服务器并获取数据的页面。这可能是更适合的是定期更新的数据,或者更多的交互式应用程序。

有许多方法对皮肤这只猫。我怀疑你做的最简单的一个,这是罚款。我倾向于这不意味着我需要做别的事情了明确要求。这使问题复杂化的进一步要求可能包括分页的数据,如果有太多适合在屏幕上。所有上述解决方案可以使以某种方式将这一。


4
投票

小服务程序是为了控制,预处理和/或后处理的请求,而不是呈现数据。在那里,JSP是作为一个视图技术提供模板编写HTML / CSS / JS。你可以控制像JSTL标签库的帮助下,页面流量和访问任何使用EL范围属性。

首先创建一个SearchServlet并将其映射在url-pattern/search和实施doGet()doPost()如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // Preprocess request here and finally send request to JSP for display.
    request.getRequestDispatcher("/WEB-INF/search.jsp").forward(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // Postprocess request here. Get results from your DAO and store in request scope.
    String search = request.getParameter("search");
    List<Result> results = searchDAO.find(search);
    request.setAttribute("results", results);
    request.getRequestDispatcher("/WEB-INF/search.jsp").forward(request, response);
}

下面是JSP /WEB-INF/search.jsp会是什么样子,它利用JSTL的(刚刚降的/WEB-INF/lib JAR)来控制页面流。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

...

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

    <c:if test="${not empty results}">
        <p>There are ${fn:length(results)} results.</p>
        <table>
            <c:forEach items="${results}" var="result">
                <tr>
                    <td>${result.id}</td>
                    <td>${result.name}</td>
                    <td>${result.value}</td>
                </tr>
            </c:forEach>
        </table>
    </c:if>

需要注意的是JSP被放置在/WEB-INF防止通过网址直接访问用户。他们被迫通过http://example.com/contextname/search使用servlet了点。

要了解更多关于JSP / Servlet的,我可以推荐Marty Hall's Coreservlets.com tutorials。要了解更多关于背后searchDAO逻辑,我可以推荐这个basic DAO tutorial

为了进一步走一步,你总是可以考虑使用一个MVC框架,它是建立在Servlet API的顶部,如Sun JSFApache StrutsSpring MVC,等等,这样你基本上只有JavaBeans和JSP / XHTML文件结束。平均MVC框架会照顾了有关收集请求参数,valitate /转换它们,更新的Javabean这些值,调用一些的Javabean操作方法对它们进行处理,等等。这使得(其仍然然而使用作为是框架的核心处理器)小服务程序“多余”。


3
投票

除了Servlet的,Java有JSP页,这是HTML和自定义标签的组合(包括Java标准标记库或JSTL),它最终被编译成Servlet。

还有其他的技术制作的Web应用程序,包括像Java服务器面(JSF),Apache StrutsSpring,等等......特别是春天很广泛应用于现代Web应用程序开发。

不过说到底,这就像布莱恩·阿格纽说......你必须从浏览器到服务器来回沟通。这些只是各种技术,以促进这一点。


0
投票

我的Java生锈,但...

在你的数据访问层,遍历结果集,并建立一个自定义对象,并将其插入到一个ArrayList;

class DataAccess {
    public ArrayList foo() {
        // Connect to DB
        // Execute Query
        // Populate resultSet
        ArrayList result = new ArrayList();
        while (resultSet.hasNext()) {
            CustomObject o = new CustomObject();
            o.setProperty1(resultSet.getInt(1));
            o.setProperty2(resultSet.getString(2));
            // and so on
            result.add(o);
        }
        return result;
    }
}

从调用你的servlet这种方法。你已经填充ArrayList中后,把它放在Request对象上,并转发到您的.jsp页面

ArrayList results = DataAccessClass.foo();
Request.setAttribute("Results", results);

在JSP,建立你的使用标记小脚本

<% foreach (CustomObject o in Request.getAttribute("Results"))
{%>
<td><%= o.getProperty1()</td>
<td><%= o.getProperty2()</td>
<% } %>

祝好运

© www.soinside.com 2019 - 2024. All rights reserved.