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

运行DemoServlet时浏览器输出空白页,附相关代码求排查

问题描述

运行DemoServlet时Web浏览器输出空白页,已尝试将Servlet中的service方法替换为doGet、doPost方法,问题仍未解决。
使用环境:Tomcat 10.0.10,开发工具Eclipse。

相关代码

1. Student_Class类代码

public class Student_Class {

    int RollNo = 0;
    String Name="";
    
    Student_Class(int RollNo,String Name) {
        this.RollNo = RollNo;
        this.Name = Name;
    }
    
    public int getRollNo() {
        return RollNo;
    }
    
    public String getName() {
        return Name;
    }
    
}

2. DemoServlet代码

import java.io.IOException;
import java.io.PrintWriter;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class DemoServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        Student_Class Student = new Student_Class(1,"Name1");
        request.setAttribute("Student", Student);
        RequestDispatcher rd = request.getRequestDispatcher("display.jsp");
        rd.forward(request, response);
        
    }
}

3. display.jsp代码

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix= "c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
        
    ${Student}
</body>
</html>

4. web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.5">
  <display-name>JSTL_Demo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>Demo</display-name>
    <servlet-name>Demo</servlet-name>
    <servlet-class>Demo</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Demo</servlet-name>
    <url-pattern>/Demo</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>DemoServlet</display-name>
    <servlet-name>DemoServlet</servlet-name>
    <servlet-class>DemoServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DemoServlet</servlet-name>
    <url-pattern>/DemoServlet</url-pattern>
  </servlet-mapping>
</web-app>

修复方案

空白页是多个配置不兼容问题共同导致的,按以下步骤修改即可:

1. 替换匹配Tomcat10的JSTL依赖

Tomcat10使用Jakarta EE规范,不再支持旧的javax.servlet版本的JSTL,你需要先导入Jakarta版本的JSTL包:

  • 在Maven公共仓库搜索jakarta.servlet.jsp.jstl-api和jakarta.servlet.jsp.jstl的2.0及以上版本jar包,下载后放到项目的WEB-INF/lib目录下
  • 将jsp中的JSTL标签库URI替换为Jakarta版本:
    把<%@ taglib prefix= "c" uri="http://java.sun.com/jsp/jstl/core" %>改为<%@ taglib prefix="c" uri="jakarta.tags.core" %>

2. 开启EL表达式解析

低版本web.xml存在EL表达式默认关闭的可能,在jsp的page指令中添加isELIgnored="false"强制开启EL解析:
修改后的page指令为:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isELIgnored="false" %>

3. 修复Student_Class的访问权限问题

你当前的构造方法是包级访问权限,如果Student_Class和DemoServlet不在同一个包下,实例化时会抛出异常,直接把构造方法改为public即可:

public Student_Class(int RollNo,String Name) {
    this.RollNo = RollNo;
    this.Name = Name;
}

4. 升级web.xml配置(建议修改)

你当前的web.xml版本为2.5,和Tomcat10兼容性差,替换为适配Jakarta EE的web.xml 5.0配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
  <display-name>JSTL_Demo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>DemoServlet</display-name>
    <servlet-name>DemoServlet</servlet-name>
    <servlet-class>DemoServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DemoServlet</servlet-name>
    <url-pattern>/DemoServlet</url-pattern>
  </servlet-mapping>
</web-app>

注:如果你没有用到名为Demo的Servlet,可以把对应的配置删掉,避免冗余。

5. 确认文件路径

确保display.jsp放在项目的WebContent(或Maven项目的src/main/webapp)根目录下,和WEB-INF文件夹同级,避免请求转发时找不到页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:36:01