You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web应用首页index.jsp无法显示表格,仅Servlet路径可正常显示的问题

问题原因分析

你遇到的核心问题很清晰:当直接访问欢迎页index.jsp时,没有任何代码为request对象设置名为table的属性,所以request.getAttribute("table")返回null,页面自然就显示了这个值。而访问ServlentToRead时,这个Servlet类里肯定有代码生成了表格内容,并把它存入request属性中,之后转发到展示页面(大概率是关联的JSP),所以表格能正常渲染。

看你的index.jsp代码,它直接尝试从request中获取table属性,但用户直接访问首页时,请求是Tomcat直接转发到index.jsp的,中间没有经过任何处理请求的Servlet,自然没有地方给request注入这个属性值。

解决方案

根据你的需求,有两种常用的处理方式:

方式1:让首页请求先经过Servlet(推荐)

修改web.xml的配置,让访问根路径的请求先经过ServlentToRead,由它生成表格数据后再转发到index.jsp。

首先给ServlentToRead添加映射配置:

<servlet>
    <servlet-name>ServlentToRead</servlet-name>
    <servlet-class>你的完整包名.ServlentToRead</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServlentToRead</servlet-name>
    <url-pattern>/</url-pattern> <!-- 映射到根路径,即首页访问路径 -->
</servlet-mapping>

然后在ServlentToRead的doGet方法中,生成表格内容并转发到index.jsp:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 这里替换成你实际生成表格HTML的逻辑
    String tableHtml = "<table border='1'><tr><td>示例数据1</td><td>示例数据2</td></tr></table>";
    request.setAttribute("table", tableHtml);
    // 转发到index.jsp展示数据
    request.getRequestDispatcher("/index.jsp").forward(request, response);
}

方式2:在JSP中添加默认逻辑(快速临时方案)

如果不想调整Servlet映射,也可以在index.jsp里判断table是否为null,如果是则生成默认表格内容:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<% 
    String table = (String) request.getAttribute("table");
    // 当table为null时,生成默认表格
    if (table == null) {
        table = "<table border='1'><tr><td>默认数据1</td><td>默认数据2</td></tr></table>";
    }
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Mytable</title>
</head>
<body>
<h1>Mytable</h1>
<%= table %>
</body>
</html>

不过这种方式把业务逻辑写在JSP里,不符合MVC的分层设计思想,仅适合快速测试,不推荐长期使用。

小提示

另外注意你的Servlet名字拼写:ServlentToRead应该是ServletToRead(少了一个字母e),虽然不影响运行,但规范的命名能让代码更易维护。

内容的提问来源于stack exchange,提问作者student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:36:18