Java request.getAttribute()在jsp中未显示正确的输出

Java request.getAttribute()在jsp中未显示正确的输出,java,jsp,servlets,Java,Jsp,Servlets,我通过request.setAttribute将html字符串从servlet发送到jsp页面,但当我尝试在jsp上获取它时,它在视图中没有正确显示 servlet: String sampleHtml = "" + "<table class=\"table table-bordered\">" + "<thead>" + "<tr>" + "<td>

我通过
request.setAttribute
将html字符串从servlet发送到jsp页面,但当我尝试在
jsp
上获取它时,它在视图中没有正确显示

servlet:

String sampleHtml = ""
    + "<table class=\"table table-bordered\">"
        + "<thead>"
                + "<tr>"
                    + "<td>Data</td>"
                    + "<td>More Data</td>"
                + "</tr>"
        + "</thead>"
        + "<tbody>"
            + "<tr>"
                + "<td>Macdonal</td>"
                + "<td>David</td>"
            + "</tr>"
        + "</tbody>"
    + "</table>";           
}

request.setAttribute("userRoles", sampleHtml);
String sampleHtml=“”
+ ""
+ ""
+ ""
+“数据”
+“更多数据”
+ ""
+ ""
+ ""
+ ""
+“麦克唐纳”
+“大卫”
+ ""
+ ""
+ "";           
}
setAttribute(“userRoles”,sampleHtml);
jsp:


设定角色

当我重新加载视图时,结果就完全错误了。表超出了
span
标记的范围。我已附上图片,让清楚的想法,什么是错的!
默认情况下,span是一个内联元素。它不能包含块元素。因此,不能向其中添加表。考虑改变跨度为div.p/p> 从

HTML元素是一个通用的内联容器,用于语法内容,它本身并不表示任何内容


请不要在servlet中编写HTML。使用JSTL或JS。

从cotroller发送HTML代码以查看不是一个好的做法。在控制器中准备数据并将其发送到视图,例如:

request.setAttribute("userRoles", roles);
然后在jsp中使用html和jstl foreach绘制表格:

<table>
  <thead>
    <tr>
      <td>Data</td>
      <td>More Data</td>
    </tr>
  </thead>
  <tbody>
     <c:forEach items="userRoles" var="role">
        <tr>
            <td><c:out value="${role.data}"/></td>
            <td><c:out value="${role.moreData}"/></td>
        </td> 
     </c:foreach>
  </tbody>
</table>

资料
更多数据
别忘了在jsp中添加:

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

并添加到pom.xml中:

<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

javax.servlet.jsp.jstl
jstl
1.2

这是一种更灵活的方式,因为您的处理逻辑和视图准备是解耦的,所以您可以将表替换为列表(例如),添加样式而无需任何控制器逻辑更改

将其放在
div
标记上

<div class="field">
    <%=request.getAttribute("userRoles") %>
</div>


请检查源代码中的输出。“元素”面板对损坏的HTML代码进行了一些修复,因此您不会看到原始代码。在这种情况下,Chrome可能会告诉您,
table
inside
span
是不允许的,或者页面中有一些其他损坏的html。检查源(CTRL+U)。事实上,如果您尝试验证您的页面,您将看到
table
span
中是不允许的。这很有效&特别感谢
span文档
+关于使用JSTL和JS的建议
<div class="field">
    <%=request.getAttribute("userRoles") %>
</div>