在Tomcat启动时,随即执行相关的逻辑。
创建TomcatListener:
public class TomcatListener implements ServletContextListener
并重写以下两个方法:
public void contextInitialized(ServletContextEvent servletContextEvent)
public void contextDestroyed(ServletContextEvent servletContextEvent)
主要在#contextInitialized方法里执行相关逻辑。
获取应用上下文:
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContextEvent.getServletContext());
获取指定的Bean:
UserController userController = (UserController)applicationContext.getBean("userController");
获取指定的Bean之后就可以实现相关逻辑。
在配置文件中添加监听器
在编写完成监听器之后要在web.xml配置相关的监听器。
在web.xml添加如下代码:
xxx.xxx.xx.xx.TomcatListener
值得注意的是,自定义的Listener必需要在SpringContext的监听之后执行,所以正确的代码应该是这样的:
org.springframework.web.context.ContextLoaderListener
xxx.xxx.xx.xx.TomcatListener
以上监听器就设置完成了。
java.sql.Date继承于java.until.Date。
java.sql.Date只用于SQL语句相关操作。
java.util.Date用于除SQL相关的操作。
值的注意的是java.sql.Date类型没有时间只有年月日,java.sql.Date#valueOf()源码如下:
if ((firstDash > 0) && (secondDash > 0) && (secondDash < s.length() - 1)) {
String yyyy = s.substring(0, firstDash);
String mm = s.substring(firstDash + 1, secondDash);
String dd = s.substring(secondDash + 1);
if (yyyy.length() == YEAR_LENGTH &&
(mm.length() >= 1 && mm.length() <= MONTH_LENGTH) &&
(dd.length() >= 1 && dd.length() <= DAY_LENGTH)) {
int year = Integer.parseInt(yyyy);
int month = Integer.parseInt(mm);
int day = Integer.parseInt(dd);
if ((month >= 1 && month <= MAX_MONTH) && (day >= 1 && day <= MAX_DAY)) {
d = new Date(year - 1900, month - 1, day);
}
}
}
可以从上面这段截取的代码可以看出,java.sql.Date类型没有时间只有年月日。
由于缺少项目经验,在处理Controller层发来的数据时,未考虑返回空值的情况,导致在SQL查询出来空值(null)时,会造成图表的显示异常不能保证用户的体验。
在Service层收到数据时,进行判断,如果返回值为空则加上默认值。
对Controller层和Service层的理解还是有问题。
Controller层只负责调用Service层的方法,而不该有什么业务逻辑。
Service层负责复杂的业务逻辑,并将处理的结果返回给Controller层,再由Controller层做出响应。
(在拜读完大厂代码和看了一些博客之后,发现自己做的尤其这一点有点愚蠢)
当前值对IPv4进行解析。
在尝试了多次使用新浪、阿里的接口之后,发现似乎是因为操作不当的原因只能查询出来发送请求的主机的ip归属地而不是指定的Ip地址的归属地。
出于无奈以及工期比较赶的原因,于是乎在GitHub上找到了一个ip归属地的静态库的开源项目然后用于ip归属地的解析,以下是GitHub的地址:https://github.com/wzhe06/ipdatabase
注意insert、update、delet>、select标签区别使用,该用啥用啥。
接口中的方法名一定要和此处SQL语句的id对应,不然会找不到。
关于参数的设定,传进来默认是个字符串,为了减少因为拼错变量而引起的错误,本次项目均采用"#{x}"(x为变量的序号,序号从0开始)。
(Spring-MVC项目)