第一次参加Spring-MVC项目心得

Tomcat启动时启动监听器

在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添加如下代码:

<listener>
  <listener-class>xxx.xxx.xx.xx.TomcatListener</listener-class>
</listener>

值得注意的是,自定义的Listener必需要在SpringContext的监听之后执行,所以正确的代码应该是这样的:

<!-- Spring Context 监听 -->
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--自定义ServletContext监听器-->
<listener>
  <listener-class>xxx.xxx.xx.xx.TomcatListener</listener-class>
</listener>	

以上监听器就设置完成了。

Controller层

关于java.util.Date和java.sql.Data的区别与联系

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类型没有时间只有年月日。

对于SQL请求来错误数据的处理

由于缺少项目经验,在处理Controller层发来的数据时,未考虑返回空值的情况,导致在SQL查询出来空值(null)时,会造成图表的显示异常不能保证用户的体验。

在Service层收到数据时,进行判断,如果返回值为空则加上默认值。

另一些反思

对Controller层和Service层的理解还是有问题。

Controller层只负责调用Service层的方法,而不该有什么业务逻辑。

Service层负责复杂的业务逻辑,并将处理的结果返回给Controller层,再由Controller层做出响应。

(在拜读完大厂代码和看了一些博客之后,发现自己做的尤其这一点有点愚蠢)

Service层

对于解析Ip归属

当前值对IPv4进行解析。

在尝试了多次使用新浪、阿里的接口之后,发现似乎是因为操作不当的原因只能查询出来发送请求的主机的ip归属地而不是指定的Ip地址的归属地。

出于无奈以及工期比较赶的原因,于是乎在GitHub上找到了一个ip归属地的静态库的开源项目然后用于ip归属地的解析,以下是GitHub的地址:https://github.com/wzhe06/ipdatabase

关于Mapper.xml中SQL语句的注意事项

注意insert、update、delet>、select标签区别使用,该用啥用啥。

接口中的方法名一定要和此处SQL语句的id对应,不然会找不到。

关于参数的设定,传进来默认是个字符串,为了减少因为拼错变量而引起的错误,本次项目均采用"#{x}"(x为变量的序号,序号从0开始)。

(Spring-MVC项目)

发布了24 篇原创文章 · 获赞 8 · 访问量 1880

猜你喜欢

转载自blog.csdn.net/qq_40462579/article/details/89928571
今日推荐