运行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
相关产品推荐
相关产品推荐

