JavaEE 项目常见错误解决方案
- 最近的实训中,练了一个比较基础的项目,
JSP+Servlet+JavaBean,完成两张表的CRUD操作,前端使用Bootstrap和JQuery,交互使用AJAX,IDE选用Eclipse,在时间比较仓促的情况下完成整个项目。 - 这个项目比较基础,但是麻雀虽小,五脏俱全,基本覆盖到了方方面面,在这过程中,我也踩了很多以前踩过的坑。
数据库连接
-
在
MySQL中,MySQL 5.7和MySQL 8.0使用不同的驱动,前者使用以往的com.mysql.cj.jdbc.Driver,而后者使用新的驱动com.mysql.cj.jdbc.Driver -
时区问题,这是数据库和系统时区差异造成的。低版本的
MySQL驱动不会存在时区问题。
报错如下:The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone.
推荐解决方案:数据库连接的
URL修改为以下格式jdbc:mysql://${地址}:3306/${库}?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&useAffectedRows=true
JavaBean获取不到数据库字段值或出现意料之外的值
- 在使用
JDBC进行开发时,没有使用标准JavaBean
建议使用实体生成工具自动JavaBean,防止出现字段名拼错,大小写等问题。 - 字段使用了基本类型中的类型
因为它们除了char没有默认值,其它的都有默认值,很可能在我们对数据库进行更新的时候,将数据错误的更新了。
业务中出现 null或 “”
DAO=>Service
原因:查询结果为空,返回了null值
解决方案:- 对于意料之外的空结果集,抛出
RuntimeException - 使用
Optional处理空值
- 对于意料之外的空结果集,抛出
View=>Service
原因:JSON转换时将空值解析为"",可以自定义JSON转换器或者使用靠谱的JSON序列化工具- 数据未校验,前端在传递数据前应做好数据校验工作
404 NOT FOUND
在 JSP 转到 Servlet 或者从 Servlet 重定向、请求转发时容易出现
解决方案:
- 检查访问路径是否正确,检查文件的层次关系,使用相对路径进行路径跳转
- 拼接项目的绝对路径
String basePath = request.getScheme()+"://"+request.getServerName()+":" +request.getServerPort()+request.getContextPath()+"/";
GET 请求中文乱码
GET 方式提交在 Web 中是非常常用的方式,有时候我们在使用 GET 方式提交请求不得不提交中文参数值,但是 tomcat 对于GET请求存在编码问题
原因: tomcat 的默认使用编码方式是 ISO8859-1
解决方案:
- 在后台代码中进行转码
String val = new String(value.getByte(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
- 修改
tomcat下的conf/server.xml文件
//找到下面的配置进行修改
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" />
修改成
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
- 前端使用
encodeURIComponent()函数对参数进行编码,
后端使用URIDecoder.decode(value,StandardCharsets.UTF_8);进行解码
form 表单提交中文乱码
form 表单默认不支持中文,再加上如果JSP的编码不是UTF-8,很可能不知道在哪里出错。
解决方案:
放弃表单直接 submit ,使用 http 库或 API (AJAX、Axios、Fetch 等等)进行交互
本文总结了JavaEE项目开发中常见的错误及其解决方案,包括数据库连接问题、JavaBean字段值异常、业务逻辑中出现null或、404错误、GET请求中文乱码、表单提交中文乱码等问题,并提供了具体的解决方法。
2104

被折叠的 条评论
为什么被折叠?



