笔记一:
问题:我是在原来的ssm项目上进行的修改,修改完成后:无论如何都不能访问项目的controller层,但是可以访问项目原来的controller层。然后把和原来项目相关的东西全部删掉,可是情况依然不变。然后以为是缓存问题,尝试了各种重启,依然没有效果。
解决方案:
知识点:eclipse是复制了一个tomcat到自己的插件位置,也就是eclipse克隆了一个tomcat到自己里面,然后我的路径是在:
E:javaworkspace.metadata.pluginsorg.eclipse.wst.server.coretmp0下
里面的wtpwebapps就类似于tomcat的发布项目的webapps。
然后在eclipse上运行的项目都是在这里的tomcat上运行的。
我点开路径,找到web-inf下的classes文件,发现这里面的还是我原来的项目。无论在eclipse上如何build project,还是clean tomcat ,都无法改变这个。
所以我直接在这个路径下把这个项目删除,然后重新把项目运行到tomcat下。终于正常了。
死亡笔记二:
作死记:本来只想做单纯的网站使用,不使用mybatis。不连接数据库,然后直接在原来的项目上进行修改。
第一步,我把不需要的实体删了。
第二步:把mapper里的xml文件删了
但是这里我的applicationcontext.xml文件里有如下配置:
<!-- ********** 整合Mybatis ********** -->
<!-- 1. 注册SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定mybatis主配置文件的位置 -->
<property name="configLocation" value="classpath:mybatis.xml"/>
<!-- 连接池注入 -->
<property name="dataSource" ref="C3P0DataSource"/>
<!-- 指定mapper文件的位置 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
关键的是第三个property:
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
由于我没有了mapper里的xml文件,所以编译后发布到tomcat里的文件里直接没有mapper文件,报错里说mapper路径不存在,所以我直接加了进去,发现必须要xml文件。然后我又把之前的xml文件复制进来,反正不用,放着不碍事。然后又报错说找不到一个实体类,忽然发现被我删了,然后我把xml文件里的实体类的相关内容又删了。
终于,运行成功了。一次ssm项目,但是不使用数据库,mybatis。
死亡笔记三:
在克隆的tomcat里直接删除项目其实是等于 在eclipse里的server的tomcat下, add or remove 里remove掉项目,然后再重新add回来,才重新run on server ,这样运行的肯定是你刚刚写好的代码,而不是你之前的代码残留了。
死亡笔记四:
论@responsebody的作用
先看最直观的现象:
即我的login路径下的方法添加了responsebody,而register路径下没有添加。然后现象如下图:
login的:
register的:
status是404,错误提示是:
The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
然后我在register的方法上添加了responsebody,现象如下:
前端这边是用ajax发送数据到服务端,服务端这边都收到数据并且正常显示。只是没有responsebody的时候就变成前面那样了。
responsebody的作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
而我们这里返回的就是json的数据。(可以参考:SSM框架中前后台json数据交互的相关知识 - csdn_stf_01的博客 - CSDN博客 即导入jackson的jar包,然后
<mvc:annotation-driven></mvc:annotation-driven> 加载json解析器,然后使用responsebody自动将返回的对象映射为想要的值(jquery的ajax()方法中指明的返回值类型) )
死亡笔记5:
Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'User'. Cause: java.lang.ClassNotFoundException: Cannot find class: User
运行ssm项目时出现上面的错误,然后根据以往经验,一般这些报错就看最前面一行的最后面部分,parse,resolve :解析 ,即解析mapper的xml文件的时候发生错误,无法识别类型 User,也就是找不到类class。然后我一看我的xml文件:
<insert id="addUser" parameterType="User">
insert into t_user(trueName,password) values(#{trueName},#{password})
</insert>
忽然记起这个parameterType需要取别名,如果没取就得写全名,即包名和路径名也要加上。所以后面我改为 parameterType="com.crud.bean.User" 就ok了。
死亡笔记六: