JavaEE 项目常见错误解决方案

  • 最近的实训中,练了一个比较基础的项目,JSP + Servlet + JavaBean,完成两张表的 CRUD 操作,前端使用 BootstrapJQuery ,交互使用 AJAXIDE 选用 Eclipse ,在时间比较仓促的情况下完成整个项目。
  • 这个项目比较基础,但是麻雀虽小,五脏俱全,基本覆盖到了方方面面,在这过程中,我也踩了很多以前踩过的坑。

数据库连接

  • MySQL 中,MySQL 5.7MySQL 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
    解决方案:
    1. 对于意料之外的空结果集,抛出 RuntimeException
    2. 使用 Optional 处理空值
  • View=>Service
    原因:
    1. JSON 转换时将空值解析为 "" ,可以自定义JSON转换器或者使用靠谱的 JSON 序列化工具
    2. 数据未校验,前端在传递数据前应做好数据校验工作

404 NOT FOUND

JSP 转到 Servlet 或者从 Servlet 重定向、请求转发时容易出现
解决方案:

  1. 检查访问路径是否正确,检查文件的层次关系,使用相对路径进行路径跳转
  2. 拼接项目的绝对路径
String basePath = request.getScheme()+"://"+request.getServerName()+":" +request.getServerPort()+request.getContextPath()+"/";

GET 请求中文乱码

GET 方式提交在 Web 中是非常常用的方式,有时候我们在使用 GET 方式提交请求不得不提交中文参数值,但是 tomcat 对于GET请求存在编码问题
原因: tomcat 的默认使用编码方式是 ISO8859-1
解决方案:

  1. 在后台代码中进行转码
String val = new String(value.getByte(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
  1. 修改 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" />
  1. 前端使用 encodeURIComponent() 函数对参数进行编码,
    后端使用URIDecoder.decode(value,StandardCharsets.UTF_8);进行解码

form 表单提交中文乱码

form 表单默认不支持中文,再加上如果JSP的编码不是UTF-8,很可能不知道在哪里出错。
解决方案:
放弃表单直接 submit ,使用 http 库或 API (AJAXAxiosFetch 等等)进行交互

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值