关于SSH整合所遇到的坑

记录SSH整合所遇到的坑

本文的内容持续更新

  • 一号坑:struts2继承json-default会出错
  • 二号坑:莫名其妙的找不到类
  • 三号坑:spring和struts2整合
  • 四号坑:没网启动失败,提示XML找不到文档
  • 五号坑:ssh传输乱码
  • 六号坑:Hibernate的select出错
  • 七号坑:Java Date数据类型格式化换转化为json

一号坑:struts2继承json-default会出错


在struts.xml文件里我们要申明包package,然后可以extend一些东西,但是继承json-default的时候就出错了,关于struts2-json的jar包我也导入了,为什么就是报错呢,后来查了原因,发现是个很低级的原因,因为struts2要求所有的jar都要在web-inf的lib文件下,因为struts2要在运行时所得获得所有jar包,所以要加入到webcontent文件下。

二号坑:莫名其妙的找不到类


莫名其妙的找不到类,这个错误是最坑的错误,因为jar包的版本号不同,很多jar包都是配合使用的,如struts2的jar包和json的jar包配合使用,如果版本号不一致,可能启动项目的时候就会遇到找不到类情况,所以记住一点:jar包的版本要一定要配套,而且推荐使用Maven管理,我还不会Maven,一会写完博客去学学。

三号坑:spring和struts2整合


Spring会配置了,Struts2会配置,那么它们怎么才能整合在一起呢?首先,我们要在web.xml里配置一个监听器,然后把项目里用Spring的context的getBean方法全部都去掉,整合了以后struts2自己会监听Spring的Bean的创建,所以用不着这个了,我们直接在类上面加上注解,然后直接调用就行了,对了Action也可以加上注解哦,还是比较方便的。而且我们在struts2里面配置action的时候,可以直接把常常的class名称换成bean的名称,关于详细的整合教程,可以看这个博客

四号坑:没网启动失败,提示XML找不到文档


这个问题呢,是由于没联网造成的,哈哈。我没联网的时候启动项目的,它报错:
这里写图片描述

然后我连上网以后就好了,很迷,这不是一个本地项目么,为啥要联网,我查了查,这个博客解释说因为Spring引的jar包的版本和xml文件里面声明的版本不一样造成的,项目在本地找不到,然后只能联网找。可是我改成了jar包的版本还是不行啊,这个问题待续。。。

五号坑:ssh传输乱码


后台数据库用的是UTF-8,eclipse编码用的是UTF-8,项目的字符集是UTF-8,JSP的字符集是UTF-8,加上过滤器设置请求和相应的字符集是UTF-8,为什么乱码。。。这个问题真的很头疼,至今我还也没有发现原因,但是我找到了很好的解决办法。

第一个解决办法(不推荐)就是把HttpServletRequest对象在传输的时候调用这个方法:

            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(jsonResult);

这样再传输的时候就好了,但是我不推荐这个方法。原因有两个:第一,我在用ssh,所以servlet会显得比较原始;第二,用servlet传输数据要先转化为json字符串,然后再传输,为什么不直接用struts2里面自带的json-default呢,代码会简化很多。

第二种方法,不使用servlet,不转化json,直接使用struts2自带的json传输功能,把要传输的对象复制给一个Object对象,然后就可以了,剩下的都交给struts2的json传输机制帮你搞定,不仅解决了乱码问题,也使得Action部分的代码大大简化,下面是我的代码图片:
这里写图片描述

原来那么长的方法,现在只需要四行就好了,然后在struts.xml里面这么配置就好了:
这里写图片描述

六号坑:Hibernate的select出错


这是我Hibernate的基础没学好,下面是我的代码片段:
这里写图片描述

我拼写的hql语句要选择username, password, address, createTime和lastModifyTime这几个属性,并且返回一个拥有这几个属性的User,这就要求User类中有对应的这个属性的构造方法才行,这样Hibernate才能给你构造并返回。
这里写图片描述

七号坑:Java Date数据类型格式化换转化为json


如果一个有个日期类型的属性,Java对象的对应属性应该是Date类型的,如果把这个对象整个变成JSON传过去,会发现上网页上显示出来的时候是一个很大的数字,那该怎么转化呢?
最开始我想了一个办法是在创建一个对应的类,然后把Date对应的属性变成String属性,然后在传输前现在后台做好转换,这样前台一拿到就是一个格式化的字符串了,可是因为一个Date多了一个类。真是让人很不爽,后来发现直接用JackJson注解解决了:
这里写图片描述

加上注解以后,直接用jackson转化整个对象就好了。。。或者直接用struts2的json传输直接传输一个对象也可以哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值