javaweb深入自学拓展之个人bug记录

    科技2025-12-31  9

    2020.10.7 问题描述:用post方式往服务器发请求,servlet取不到你传过去的属性的值,显示空。改后的代码如下:

    xmlhttp.open("POST","ajaxServlet",true); xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //3.发送请求 xmlhttp.send("username=tom");

    原因:servlet规范:同时满足下列条件,则请求体中的数据将被填充到Parameter集合中, 1:是一个http/https请求, 2:请求方法是post, 3:请求类型(content-Type)是application/x-www-form-urlencoded, 4: Servlet调用了getParameter系列方法, 如果上述条件没有同时满足,则相关的表单数据不会被设置进request的parameter集合中,相关的数据可以通过request.getInputStream()来访问。反之,如果上述条件均满足,相关的表单数据将不能再通过request.getInputStream()来读取。根据这个规范的说明,当我们在调用request.getParameter(参数名称)的方法时,通过httpClient中的httpPost.setEntry()提交的数据(请求体)被填充到了parameter集合中了,所以后面的通过request.getInputStream获取数据流时就为空。

    2020.10.31 pom.xml导入了mysql包,junit包,我本地仓库也有,但是还是报错。junit包不存在,版本改了4点几还是没用,去掉scope还是没有用,然后我检查 pom 文件的对应依赖是否作用域是否限定,配置正确请在IDEA中设置File -> Settings -> Build,Execution,Deployment -> Build Tools -> Maven -> Runner对话框下,勾选“Delegate IDE build/run actions to Maven”,然后就好了。mysql包也有也报错,然后在projec structure中给模块的依赖导入了本地jar包。问题解决。

    2020.11.1 junit运行,出现InitializationError,原因是少添加了Junit的一个jar包:harmcrest-core-1.3.jar 配置EntityManagerFactory时候,bean的class某个字母小写,要格外小心。

    2020.11.3 异常:Error creating bean with name ‘entityManagerFactory’ defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory。 不能把实体映射到数据库上,看数据库连接符有没有写错,没有。然后往下看异常的原因,缺少javax.el.elManager包,是网上说因为tomcat7版本过低,里面的这个包版本低了,但是我换了tomcat8.5没有用,其实是hibernate的validator这个验证器的版本兼容性问题,具体解释不清,我原来是6.0的,后来改成5点几的版本就好了。spring,Hibernate等很多开源的类库向下不兼容。

    2020.11.4 异常org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [PRIMARY]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement 主码问题,表中有id,不是自增长。 解决:@Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id;

    此种主键生成策略就是通常所说的主键自增长,数据库在插入数据时,会自动给主键赋值,比如MYSQL可以在创建表时声明"auto_increment" 来指定主键自增长。该策略在大部分数据库中都提供了支持(指定方法或关键字可能不同),但还是有少数数据库不支持,所以可移植性略差。使用自增长主键生成策略是只需要声明strategy = GenerationType.IDENTITY即可。如果没有这个的话,就不能给主键自增长,然后就不能插入,就报执行语句错误了。

    Processed: 0.015, SQL: 9