0

0

Java初级全栈:Servlet+JSP+JDBC搭建简易留言板_原生Web开发体验

P粉602998670

P粉602998670

发布时间:2026-03-17 08:09:38

|

868人浏览过

|

来源于php中文网

原创

request.getParameter()返回null主因是表单method与Servlet处理方法不匹配或编码未设置,需检查form的method属性、重写对应doGet/doPost方法,并在doPost开头调用setCharacterEncoding("UTF-8")。

java初级全栈:servlet+jsp+jdbc搭建简易留言板_原生web开发体验

Servlet里request.getParameter()返回null怎么办

多数时候不是代码写错了,而是表单提交方式或编码没对上。JSP页面用form提交时,默认是GET,但如果你在Servlet里写了doPost()却没重写doGet(),或者HTML里漏了method="post"getParameter()就拿不到值。

常见错误现象:NullPointerException出现在取request.getParameter("content")之后;浏览器地址栏能看到参数拼在URL后面(说明实际走的是GET);中文提交变成乱码(其实是编码不一致的连带表现)。

  • 检查JSP中<form>是否明确写了method="post",别依赖默认
  • Servlet里要么只实现doPost()并确保前端匹配,要么两个方法都写,至少在doGet()里加个doPost(request, response)转发
  • 如果用了UTF-8,在doPost()开头立刻加request.setCharacterEncoding("UTF-8")——注意:这行必须在调用任何getParameter()之前
  • 测试时直接用浏览器访问Servlet路径(比如/MessageServlet),会触发doGet(),此时若没处理,就405或空值

JSP里EL表达式${messageList}不渲染内容

不是EL被禁用了,就是作用域放错地方了。Servlet往request里存的List,JSP要用${requestScope.messageList}才能拿到;如果存到了session,就得用${sessionScope.messageList},否则EL默认只查page→request→session→application,顺序找,找到就停。

使用场景:留言列表从数据库查出来,塞进request.setAttribute("messageList", list),然后JSP用<c:forEach items="${messageList}" var="msg">遍历——但前提是JSTL标签库已正确引入且web.xml没禁用EL。

立即学习Java免费学习笔记(深入)”;

  • 确认web.xml<web-app>根节点声明的是Servlet 3.0+(如version="3.1"),旧版本可能默认关闭EL
  • 检查JSP顶部是否有<%@ page isELIgnored="false" %>,别误设成true
  • ${pageContext.request.requestURL}这种固定表达式先测EL是否生效,排除环境问题
  • 别在<script>块里直接写${xxx}——JS上下文里EL不会解析,得用<%= request.getAttribute("xxx") %>或提前注入到JS变量

JDBC查询后ResultSet.next()跳过第一行

不是驱动bug,是你调了一次next()又没读数据,接着循环就从第二行开始了。典型写法是while(rs.next()) { ... },但如果前面为了判断是否有数据多写了一次if(rs.next()),再进循环就丢首行。

NameGPT名称生成器
NameGPT名称生成器

免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

下载

性能影响:小数据看不出,但查1000条留言时少显示第一条,用户会觉得“删了一条”,其实只是逻辑跳过了。

  • 统一用while(rs.next())遍历,别拆成if+while
  • 需要判断空结果集,改用rs.first(); boolean hasData = rs.getRow() != 0;,但注意first()要求ResultSet类型为TYPE_SCROLL_INSENSITIVE
  • 更稳妥的做法:直接List<Message> list = new ArrayList<>(); while(rs.next()) { list.add(...); },空集合自然长度为0
  • 记得rs.close()stmt.close()conn.close()——哪怕用try-with-resources,也要确认JDBC驱动版本支持(比如MySQL 5.1.40+才完整支持自动关闭)

部署到Tomcat后CSS/JS加载404

路径不是相对路径的问题,是资源没放在Web应用的“公开可访问目录”下。WEB-INF及其子目录(比如WEB-INF/classesWEB-INF/lib)里的东西,浏览器根本没法直连,所以把css/style.css放进去,<link href="css/style.css">必然404。

正确位置只有两个:WebContent/(Eclipse老项目)或src/main/webapp/(Maven标准结构)根目录下,或者其子目录如css/js/images/

  • 检查项目结构:CSS文件是否真在webapp/css/下,而不是webapp/WEB-INF/css/
  • HTML里引用路径别用../css/来回跳,统一用以/开头的上下文路径,比如<link href="${pageContext.request.contextPath}/css/style.css">
  • 启动Tomcat后,直接浏览器访问http://localhost:8080/yourapp/css/style.css,看能不能下载到文件——这是最准的验证方式
  • 如果用了Servlet映射路径如<url-pattern>/msg/*</url-pattern>,静态资源请求也会被拦截,这时要么改映射为/servlet/*,要么在Servlet里加if (uri.endsWith(".css") || uri.endsWith(".js")) return;放行

最容易被忽略的是:开发时用IDE内置浏览器可能缓存了旧路径,换Chrome无痕窗口重试,比反复clean project管用得多。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

688

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

554

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

287

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

520

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

267

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

392

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

543

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

668

2023.08.14

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.5万人学习

Java 教程
Java 教程

共578课时 | 83.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号