IntelliJ中Servlet无法正常运行:输出异常页面求助
解决IntelliJ中Servlet输出$Title$/$END$占位页面的问题
我来帮你排查这个问题!你遇到的这个显示$Title$和$END$的页面,其实是IntelliJ默认生成的占位符页面,说明你的Servlet根本没被正确触发——要么是映射配置有问题,要么是项目部署没到位,或者访问路径错了。下面是几个针对性的排查和解决步骤:
1. 补全Servlet的映射路径
你当前的@WebServlet注解只指定了名字,没有配置访问路径,Tomcat不知道什么时候该调用你的Servlet。修改注解,加上urlPatterns属性:
@WebServlet(name = "Servlet", urlPatterns = "/actorList")
这样之后,你就可以通过http://localhost:8080/你的项目名/actorList来访问这个Servlet了。
2. 检查IntelliJ的Tomcat部署配置
打开Run/Debug Configurations(右上角运行按钮旁边的下拉框→Edit Configurations),找到你的Tomcat实例:
- 切换到Deployment标签,确认你的项目已经被添加到部署列表中,并且Application Context(项目根路径)设置正确(比如
/ServerTest或者直接/)。 - 检查“On frame deactivation”选项,建议选择“Update classes and resources”,这样修改代码后能自动同步到Tomcat,避免重复部署。
- 启动Tomcat后,留意控制台日志,如果有JDBC驱动找不到、数据库连接失败这类报错,那就是依赖部署的问题了。
3. 确保MySQL驱动被正确部署
在IntelliJ中,仅仅把驱动加到项目依赖还不够,要确保它能被打包到Tomcat的部署目录里:
- 打开Project Structure(快捷键Ctrl+Alt+Shift+S)→Modules→Dependencies,找到MySQL驱动,把Scope改成Compile(不要选Provided,否则部署时不会包含这个包)。
- 或者直接把驱动jar包复制到项目的
WEB-INF/lib目录下,这样部署时会自动被包含进去。
4. 修正JDBC驱动类名(针对MySQL 8+)
如果你用的是MySQL 8.0及以上版本,旧的驱动类com.mysql.jdbc.Driver已经被弃用了,建议改成:
Class.forName("com.mysql.cj.jdbc.Driver");
这个小细节也可能导致Servlet抛出异常,进而跳转到占位页面。
5. 优化错误输出(方便排查)
你当前的异常处理只把错误打印到控制台,浏览器看不到任何提示,建议改成把错误信息输出到页面上,这样能快速知道哪里出问题:
catch(SQLException e){ response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><BODY><H1>数据库查询错误</H1>"); out.println("<P>" + e.getMessage() + "</P></BODY></HTML>"); e.printStackTrace(); } catch (ClassNotFoundException e) { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><BODY><H1>驱动加载失败</H1>"); out.println("<P>" + e.getMessage() + "</P></BODY></HTML>"); e.printStackTrace(); }
按照上面的步骤调整后,重新部署Tomcat,访问正确的路径,应该就能看到你预期的数据库查询结果了。
内容的提问来源于stack exchange,提问作者Pikappa
相关产品推荐
相关产品推荐

