从 Servlet 到 JSP

2024-01-04

当尝试在我的 servlet 中传递用 HTML 构建的表时,如下所示:

response.setContentType("text/html" );  
PrintWriter out = response.getWriter();  
out.println("<html>" );  
out.println("<head>" );  
out.println("<title>Imput OPC</title>" );
out.println("</head>" );  
out.println("<body>" ); 
...

and then

response.sendRedirect("/xxx.jsp" );

但我在JSP中没有找到任何表。
一位朋友告诉我使用 Bean,但是我如何从 bean 中的表单捕获值(因为我在构造表之前对表单进行了处理)。为此我必须使用 servlet。所以我想要的正是在响应中构造一个表,然后将其发送到 jsp 知道:.sendRedirect and

getServletContext().getRequestDispatcher("/xxx.jsp").forward(request, response); 

什么也不给出。


A redirect让客户解雇new要求。它会破坏您当前正在处理的请求和响应。您会在指定的 URL 上收到全新的请求和响应。当您想要将请求范围的信息从 servlet 传递到 JSP 时,您不希望发送重定向。用一个forward反而。

在 servlet 中打印 HTML 是一个很大的禁忌。当您稍后想要将请求转发到 JSP 时,也不应该在响应主体中写入任何内容。你将面临一个IllegalStateException在服务器日志中(实际上是网络浏览器中的空白页)。打印 HTML 是一项由 JSP 完成的任务,而不是由 servlet 完成。

在 servlet 中,您只需要处理业务即可。例如。收集要在表格中显示的信息。首先创建一个代表表中每个项目(行)的 Javabean 类。然后创建一个 DAO 类,它从数据存储(数据库?)返回这些项目的列表。然后在 servlet 中,只需使用以下命令将项目列表放入请求范围中HttpServletRequest#setAttribute() http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletRequest.html#setAttribute%28java.lang.String,%20java.lang.Object%29,将请求转发到 JSP 文件,使用RequestDispatcher#forward() http://java.sun.com/javaee/5/docs/api/javax/servlet/RequestDispatcher.html#forward%28javax.servlet.ServletRequest,%20javax.servlet.ServletResponse%29并使用迭代项目列表JSTL http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/ c:forEach http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/c/forEach.html标签(要安装 JSTL,只需删除jstl-1.2.jar http://download.java.net/maven/1/jstl/jars/jstl-1.2.jar in /WEB-INF/lib).

基本启动示例:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    List<Item> items = itemDAO.list();
    request.setAttribute("items", items); // It's now available as ${items} in EL.
    request.getRequestDispatcher("/WEB-INF/result.jsp").forward(request, response);
}

where /WEB-INF/result.jsp看起来像这样:

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

...

<table>
    <c:forEach items="${items}" var="item">
        <tr>
            <td>${item.someProperty}</td>
            <td>${item.anotherProperty}</td>
        </tr>
    </c:forEach>
</table>

有关更多提示和示例,您可能会发现那些教程 http://courses.coreservlets.com/Course-Materials/csajsp2.html有用。更进一步,您还可以使用 MVC 框架,这样您基本上就只剩下一个 Javabean 类和一个 JSP 文件(即 servlet 的角色已由 MVC 框架接管),例如JSF http://www.coreservlets.com/JSF-Tutorial/jsf2/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Servlet 到 JSP 的相关文章

随机推荐

  • 将 ZIO 任务转换为 IO

    我有下一个代码 import zio import scala concurrent Future case class AppError description String extends Throwable legacy code i
  • xcode - iOS 8 上不显示 MPNowPlayingInfoCenter 信息

    我正在开发一个音乐应用程序 它应该在后台播放音乐 我用MPMoviePlayerController播放音乐 我的代码来启动MPMoviePlayerController NSString resourcePath NSBundle mai
  • 实现带有复选框的对话框

    这是我的对话框 public class CustomDialogClass extends Dialog implements android view View OnClickListener public Activity c pub
  • 如何更改wordpress中仅一页的css?

    我只需要更改主页的 css 我在 google 上搜索过 很多建议是将页面 id 添加为 css 选择器的一部分 但当我尝试的时候 似乎不起作用 我想更改类 contentclass 页面 ID 为 599 所以这是我尝试过的 post i
  • 在 Visual Studio Code for Go 中自动完成括号

    在使用 Visual Studio Code 时 我注意到当我从自动完成功能编写函数时 它永远不会使用括号自动完成 例如 fmt now select a function Print a interface from autocomple
  • 如何使用 Flask 跟踪匿名用户

    我的应用程序实现了一个购物车 匿名用户可以在其中添加产品 仅在付款前才需要用户登录 如何实施 主要的挑战是 Flask 必须跟踪用户 即使是匿名的 及其订单 我目前的方法是利用AnonymousUserMixin被分配给的对象current
  • 将绘图嵌入到 PyQt5 中的图形视图中

    I use pyqtgraph在 PyQt5 GUI 中绘图 我可以在弹出窗口中绘图 但我正在尝试将图表嵌入到graphicsView area 以下是我在新窗口中绘制简单绘图的方法 self pushButton clicked conn
  • Base64 字符串转 UIImage

    我正在尝试将 base64 字符串解码为 Swift 中的 UIImage 我的示例图像的编码字符串开头为 数据 图像 jpeg base64 9j 2wBDAAYEBQYFBAYGBQYHBwYIChAKC 完整的编码字符串可以在以下位置
  • 我可以使用传递到组件的变量来设置 svelte 样式 css 属性值吗

    我想创建一个接收图像名称和路径的简洁组件 我想让组件使用 CSS 将图像设置为 背景图像 我已经尝试过以下似乎不起作用 调用的组件应用程序 svelte
  • 为什么故事板没有反映我使用属性检查器面板设置到 UILabel 的文本属性?

    我在故事板上有一个 UILabel 默认文本为 标签 然后 我转到属性检查器并选择属性文本样式 当我单击 文本 字段时 我会在新窗口中看到多种字体可供选择 我看到本例中的默认文本已设置为 Helvetica 大小 17 0 在浏览所提供的字
  • 字符串未更新

    我正在使用 MVC 和 PDO 我试图根据会话是否为空来更新字符串 因此在我的 index phtml 中我有 p Welcome back a href logout php a p p Hello would you like to a
  • Matlab:更改图例中条目的顺序

    我有一个图形文件 我想在其中更改条目的顺序 例如 将第一个条目作为第三个条目 我很久以前就保存了这个Figure fig 所以我不确定是否可以恢复原始代码 这里我向你展示我的情节 我希望图例元素按降序排列 如图所示 但由于错误 我的第二个条
  • Linux:proc/net/sockstat tcp mem越来越大

    现在 我们的系统发现hang和tcp mem越来越大 proc net sockstat 当出现hang时 将打印 tcp 孤立套接字太多 From sockstat 我们知道socket很少 但是消耗了1500 page mem 为什么呢
  • BASH shell 脚本 echo 在同一行输出

    我有一个简单的 BASH shell 脚本 用于检查 curl 命令的 HTTP 响应代码 逻辑很好 但我坚持 简单地 打印出 输出 我使用的是 GNU bash 版本 3 2 25 1 release x86 64 redhat linu
  • 修剪章鱼 - 删除不属于 O(N) 循环的有向图的所有分支

    Preliminaries safe to skip This question is in relation with Longest Path for Directed Cyclic Graph https stackoverflow
  • 修复了开发办公套件时 Visual Basic 中 FontSize 函数的错误

    在花了几个小时研究 FontSize 函数后 我被一段代码困住了 字体列表 每当我想定义每个字体具有相同的大小时 它会自动将其缩放到72 我浏览了互联网以了解如何获取字体列表 这很有效 但是当我将 fontSize 添加到 sizecomb
  • SunPkcs11 实现的 64 位替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们使用中间件来构建通过 JDK 1 6 30 64 位安装程序安装的软件应用程序 我们最近收到使用 U
  • 使用 Matplotlib 以非阻塞方式绘图

    我在尝试使 matplotlib 绘制函数而不阻止执行时遇到问题 我尝试过使用show block False 正如有些人建议的那样 但我得到的只是一个冻结的窗口 如果我只是打电话show 结果被正确绘制 但执行被阻止 直到窗口关闭 从我读
  • 并非 CSS 样式类的所有属性都适用

    我将以下内容写在 CSS 文件中 span hoverhelp border double border width 3 border color 000000 background color eeffcc padding 5 font
  • 从 Servlet 到 JSP

    当尝试在我的 servlet 中传递用 HTML 构建的表时 如下所示 response setContentType text html PrintWriter out response getWriter out println out