阿里云学生机到期了,不知道为什么不让我以学生价格续费。。。加上假期比较忙,结果服务器数据销毁了。。。以前的博客都没了,以后就转战了。
JavaEE学习以来已经有数月了,每次写代码都感觉自己在创造的过程中,难以停下。匆忙的学习和实践中,一直没有记录自己,想来十分惭愧。初进JaveWeb开发,有一种东西很多不知道怎么学的感受。
我舍友在搞python,告诉我Python Web框架无非是 Flask 或者 Django,他选用的 Django 封装的非常全面,后台自己生成,数据库和实体自己生成,只用写一些业务逻辑。听起来很不错,可以专注于业务逻辑。我是一个控制欲比较强的人但是又比较懒的人,Python语法太简洁了,C/C++太麻烦了,我从遇到Java开始就觉得这个语言比较适合我(当然我觉得以后深入理解C/C++是必不可少的)。然后..... 好了 不吹比了 进入正题~~~
我是使用maven搭建项目的,相信已经没有朋友手动导入jar包了吧,我比较喜欢尝试新鲜事物,基本导入的包都是最新的,eclipse
也是neon 2
版本了,踩到了不少版本的坑,包括很多博客里的配置方法已经不支持,许多方法已经不建议使用,一道黑黑的线盖在java方法上,感觉自己脑门上都是黑线。这次我是使用Spring Springmvc 4.3.7 Mybatis3.4.2 还有Mybatis-generator1.3.2(根据数据库自动生成dao接口,实体,mapperxml文件)都是目前的最新版本,具体使用方法下面会说到。
首先当然是maven pom文件了
4.3.7.RELEASE
1.7.24
1.2.17
4.12
3.4.2
org.springframework
spring-core
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-aspects
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-web
${spring.version}
aopalliance
aopalliance
1.0
org.aspectj
aspectjtools
1.8.10
org.aspectj
aspectjweaver
1.8.10
aspectj
aspectjrt
1.5.4
junit
junit
${junit.version}
test
log4j
log4j
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
commons-logging
commons-logging
1.2
org.springframework
spring-test
${spring.version}
test
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.3.1
mysql
mysql-connector-java
5.1.41
c3p0
c3p0
0.9.1.2
redis.clients
jedis
2.7.0
org.apache.commons
commons-pool2
2.4.2
jstl
jstl
1.2
taglibs
standard
1.1.2
javax.servlet
javax.servlet-api
3.1.0
javax.servlet.jsp
jsp-api
2.2
com.alibaba
fastjson
1.2.29
com.fasterxml.jackson.core
jackson-core
2.8.7
com.fasterxml.jackson.core
jackson-databind
2.8.7
com.fasterxml.jackson.core
jackson-annotations
2.8.7
commons-codec
commons-codec
1.10
InfoSystem
maven-compiler-plugin
3.5.1
1.8
UTF-8
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
src/main/resources/config/generatorConfig.xml
true
true
我使用log4j来输入日志,log4j配置文件在下面贴出,许多问题和执行过程是只有日志文件才会输出的,所以使用日志是很关键的。不知道是eclipse的问题还是环境的问题,我新建的maven项目,会不定期自动回退到javase1.5版本,servlet会自动回退到2.3,最明显的表现是你的项目上面有一个红色的小叉叉,但是里面的文件却又没有报错。
maven-compiler-plugin
3.5.1
1.8
UTF-8
在最后build中加入这个包就可以解决这个问题,mybatis-generator我是直接在eclipse maven中配置的,不用去控制台了。右击pom.xml找到Run然后在Goals框中输入
mybatis-generator:generate
然后运行,看看对应目录有没有生成相应的文件。切记,如果再点一次运行,会重写那个文件,会追加内容,不会报错。但是当运行项目的时候,spring-mybatis会报注入错误,因为已经存在对应的某个mappingxml文件中的id,意思就是mybaits的sql文件中,有两个相同的id,即重写了一遍,不要问我为什么知道,我多执行了一遍,因为它本身生成的xml文件内容就很多,所以重写了一遍的时候我竟然没发现是xml文件出问题了。。。接下来列出web.xml文件
InfoSystem
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
characterEncodingFilter
/*
default
*.js
*.css
/doc/*
/images/*
/fonts/*
*.html
403
/403.html
404
/404.html
500
/500.html
contextConfigLocation
classpath:config/spring-mybatis.xml
org.springframework.web.context.ContextLoaderListener
HiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter
HiddenHttpMethodFilter
/*
springDispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:config/springmvc.xml
1
springDispatcherServlet
/
5
我在网上同样看了许多博客,有的把编码过滤器配在了后面但是却能起到作用,而我讲编码过滤器卸载后面却不行,难道是请求转发后就不过这个过滤器了?我觉得大概率是RestFul
风格拦截所有请求的时候产生的问题,但是也还是应该过编码过滤器呀,百思不得其解,希望知道的朋友可以留言告诉我。因为我是用的是spring-mybatis
包整合,比较简便一些。
contextConfigLocation
classpath:config/spring-mybatis.xml
org.springframework.web.context.ContextLoaderListener
这些代码必须存在,
指定spring-mybatis文件的所在,下面这一行很明显是一个监听器
initWebApplicationContext(event.getServletContext());
看了一下源码,是初始化一个Web容器,这句话绝对不能少,否则在Spring注入的时候会报注入失败错误,说到这里,聊聊当时我一个Spring注入错误的问题,当时我的项目没有报错,而且Spring配置文件也没问题,检查了无数遍,最后发现因为当时优化eclipse性能时,关闭了自动编译,导致Spring竟然无法注入,必须手动build project,然后就老老实实的打开了自动编译。下面的前端分发器大家应该已经很了解了,就不过多赘述了。然后我们看看spring-mybaits的配置
第一行是不扫描@Controller标签,在我看来可以节省一些性能,而且网上有的同学spring springmvc文件同时扫描,貌似还发生了一些错误。c3p0数据源,事务管理,我也不过多赘述了。
比较重要的是
sqlSessionFactory
中,首先引用了c3p0的数据源,然后要填写xml所在的包,自动扫描其中的包,这样就避免了单独使用mybatis时候,在配置文件中添加
Dao Implments
的作用是扫描Dao包接口的位置,也就是上面自动生成的那个,和xml文件对应起来。然后看看springmvc的配置
这里的mvc:annotation-driven
很关键,我们看以前版本的配置文件,如果要响应xml,json,还有日期格式化,单元测试都需要注册DefaultAnnotationHandlerMapping
AnnotationMethodHandlerAdapter
两个bean,现在直接使用简化版的就可以帮我们直接注册,而且以前的配置方式好像也取消了,我当时使用的时候xml直接报错了。下面的context:annotation-config
呢,是帮助我们注册了四个bean。AutowiredAnnotationBeanPostProcesso
CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
RequiredAnnotationBeanPostProcessor
识别相应的autowired
等注解,所以在你不配置的时候不报错,但使用的时候报错,这种错误很难排查。和Spring-mybatis相反,至扫描Controller注解,最后贴一下log4j的配置文件,默认放在classpath下
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO
配置的很简单,但是基本的执行过程,mybatis的sql语句,错误都是可以看见的。如果不配置的话,会报两句警告,不影响程序正常运行。
然后就可以愉快的使用了,细心的朋友可以发现配置文件里我还使用了redis
非关系型数据库和连接池commons-pool2
作缓存和使用token方式验证用户,后面我会详细讲讲。第一次在写,如果有什么不好的地方希望大家理解,也希望大家多多支持,共同进步。