【工具bug】【java web tomcat问题记录】

这次遇到一个接一个的坑,记录一下。

在boyfriend电脑上建了个普通java项目,随着一步步加功能,由编写并测试普通的dao转到编写controller,此时需要把项目转为web项目。以前也转过,这次转失败,根据报错(eclipse相关),忘了是咋发现eclipse装成了se版,于是在网上搜如何将se版转成ee版(就是在帮助-安装新软件这个选项里装ee相关的插件)。但是转为web项目后始终报错,忘了是啥错。重新建一个工程就好了。猜测可能在se环境下建的工程的原因。我以前是在ee环境下建的工程再转成web项目的。

新建的工程是web项目,使用的web文件夹就是默认的WebContent,我没有改名字。在网上了解到tomcat会用到这个文件夹里的内容,类似于一个war包或者webapps。启动server运行报classNotFound,这个class明显是有的。于是查看tomcat的临时文件夹(我没有像网上很多人一样在servers里设置tomcat的server path和deploy path,个人觉得没有必要,用默认的就行了,分别是.metadata\.plugins\org.eclipse.wst.server.core\tmp0和wtpwebapps,eclipse的server在运行时会把classes文件、配置文件、依赖包都拷到tmp0\wtpwebapps这个路径,也就是不只WebContent这个文件夹下的内容,不过这时我还没意识到),发现一个class文件都没有,只有一个xml文件搬过来了。想到既然WebContent这个文件夹在部署时能被识别,并且在tomcat里运行的时候肯定运行的是.class文件,于是把构建路径里的输出文件夹改成WebContent这个文件夹下的classes文件夹(默认可能是src/target/classes)。这样就不报classNotFound的错误了。

又报no handler,将web.xml里dispatcher的url pattern设置从/*改为/就好了,网上有讲为啥。

最后又报415,我从前台传来的数据包含日期,并且将前台传来的json直接通过springmvc的自动bind转为我的pojo对象。所以需要加个@RequestBody,pojo定义的这个日期field需要加@DateTimeFormat(pattern="yyyy-MM-dd") ,这个field的get方法要加@JsonFormat(pattern="yyyy-MM-dd",timezone = "UTC+8") ,这个field使用的是java.sql.Date,为啥不用java.util.Date,待思考,我是照着练习来的。springmvc虽然能自动bind json为pojo,但需要引入jackson的三个包(jackson-core、jackson-databind、jackson-annotations)。我的整个依赖都是放在WebContent/WEB-INF/lib下,通过构建路径添加jar包,将其加到工程引用中的,所以注意不是工程里有jar包,就能被依赖,还要加进来。这三个jar包,我突发奇想,通过maven引入。maven是很方便的,能解决依赖的依赖的下载,之前的依赖的其他jar包没有用maven,是因为练习是这样导入的,而我现在引入这个jar包用maven,是因为担心他们有其他依赖使得我不只下三个包,可能要下一堆,事实是其实就是三个包,但是现在我的项目里的依赖相当于是两种途径并存(本地jar包和maven依赖)。问题本来应该到这里就解决了,但是还是一直报415。我意识到可能这三个包没有放到tomcat能识别的地方,也就是tmp0\wtpwebapps。于是把这三个jar包复制到WebContent\lib下,重新构建和启动tomcat就好了。

在网上找到一篇,发现能解惑,就是怎样让maven依赖能被构建时识别,这一处设置也能让我们了解为啥我的src下的xml文件就在构建路径了,我按照如下网址把maven和junit都添加到构建里了,就不用像我之前很傻的把包拷贝到WebContent\lib下,如下截图是我的设置,我把WebContent改成webapps了,这个没啥影响。网址如下:

https://elvis4139.iteye.com/blog/2159804

项目 —> 属性 -> Deployment Assembly -> Add -> Java Build Path Entries -> 选择Maven Dependencies -> Finish -> OK 

图如下:

PS:网上都说要自动构建,我的java代码修改后,发现.class的修改时间还是很老的,于是把自动构建改成手动了,但是手动有时候也木有反应,因为我把classes下的.class文件全删除,构建后文件夹还是空的。于是clean项目一下,再手动构建就好了。eclipse的这个用于tomcat装载的临时文件夹tmp0\wtpwebapps也有点坑,我的classes文件夹更新了,这个文件夹下的.class文件的时间还是老的,我的解决办法是把eclipse里的server delete,delete的时候这个tmp0文件夹整个就没有了,重新添加server再运行工程,会重新生成tmp0文件。手动删除tmp0会报文件路径不存在未挂载啥的,tomcat再运行也报启动不了,还是得server delete。也许可以先从server里remove掉工程再add,再publish并启动。

PS:表面上构建路径和部署路径没有关系,实际上classes的内容会从构建路径处搬到部署路径的WEB-INF/classes下,所以正确的顺序(改了代码的情况下)是清理->构建(构建完再进行下一步)->remove该工程->add该工程->publish该工程->start该工程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值