Java Servlet返回空白页:EJB无状态会话Bean计算器项目问题
解决EJB计算器Servlet提交后空白页的问题
Hey,我来帮你搞定这个提交后页面空白的问题!咱们先从最可能的原因入手,一步步排查:
1. 最常见的元凶:未处理的空指针/转换异常
你的Servlet代码里没有做任何异常处理,一旦出现下面这些情况,代码会直接抛出异常但不会输出任何内容到页面,导致空白:
- 用户没选任何单选按钮,
request.getParameter("g")返回null,调用f.equals("1")直接触发NullPointerException - 用户输入的不是整数(比如字母、空值),
Integer.parseInt会抛出NumberFormatException - 除法时输入除数为0,触发ArithmeticException
解决方案:添加输入校验和异常捕获
修改Servlet的processRequest方法,加上校验和异常处理,确保任何情况下都有内容输出到页面:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { // 先获取所有参数并做基础校验 String v1Str = request.getParameter("v1"); String v2Str = request.getParameter("v2"); String opType = request.getParameter("g"); // 检查运算类型是否选择 if(opType == null) { out.println("<h1>⚠️ 请选择一种运算类型!</h1>"); return; } // 检查数值是否为空 if(v1Str == null || v1Str.trim().isEmpty() || v2Str == null || v2Str.trim().isEmpty()) { out.println("<h1>⚠️ 请输入有效的整数数值!</h1>"); return; } // 转换数值并处理格式错误 int v1, v2; try { v1 = Integer.parseInt(v1Str.trim()); v2 = Integer.parseInt(v2Str.trim()); } catch(NumberFormatException e) { out.println("<h1>⚠️ 请输入合法的整数,不要输入字母或其他非数字字符!</h1>"); return; } int result = 0; // 用"常量".equals(变量)的方式避免空指针 if("1".equals(opType)) { result = newSessionBean.add(v1, v2); out.println("<h1>加法结果:" + result + "</h1>"); } else if("2".equals(opType)) { result = newSessionBean.sub(v1, v2); out.println("<h1>减法结果:" + result + "</h1>"); } else if("3".equals(opType)) { // 额外处理除零异常 if(v2 == 0) { out.println("<h1>⚠️ 除数不能为零!</h1>"); return; } result = newSessionBean.div(v1, v2); out.println("<h1>除法结果:" + result + "</h1>"); } else if("4".equals(opType)) { result = newSessionBean.mul(v1, v2); out.println("<h1>乘法结果:" + result + "</h1>"); } else { out.println("<h1>⚠️ 无效的运算类型!</h1>"); } } catch(Exception e) { // 捕获所有未预期的异常,输出错误信息便于调试 out.println("<h1>😵 发生未知错误:" + e.getMessage() + "</h1>"); // 同时把异常栈打印到服务器日志,方便排查深层问题 e.printStackTrace(); } finally { out.close(); } }
2. 潜在问题:EJB注入失败
如果@EJB注解注入的newSessionBean为null,调用它的方法时也会抛出NullPointerException,导致页面空白。
排查方向:
- 确认
NewSessionBeanLocal接口正确定义,并且NewSessionBean类正确实现了这个接口 - 检查项目部署结构:如果是Web项目,确保EJB类和接口在Web模块的可扫描路径下;如果是EAR项目,确保EJB模块和Web模块正确关联
- 查看服务器日志,是否有EJB部署失败的提示信息
3. 调试小技巧
- 查看服务器的日志文件(比如WildFly的
standalone/log/server.log、GlassFish的logs/server.log),里面会记录所有未捕获的异常,这是定位问题最快的方式 - 在Servlet代码里添加临时的
System.out.println()语句,打印获取到的参数值,确认参数是否正确传递
内容的提问来源于stack exchange,提问作者Akshansh Shrivastava
相关产品推荐
相关产品推荐

