发表于: 2020-06-30 23:06:33
1 2020
今天完成的事情
1. 学习 java 配置 springmvc
项目目录
遇到的问题
1. 自己对 spring 还有很多不了解的地方
懵懵懂懂的感觉··
收获:
1. springmvc 中的两个上下文
其中一个上下文是 DispatcherServlet 启动的时候创建 Spring 应用的上下文,包含了所有的 web 组件相关的配置。
也就是 web.xml 与 springmvc-servlet.xml 的部分,创建了拦截器、过滤器与监听器。同时设置了网站首页与视图解析器。前端映射器也是在这里配置的
拦截器这块我做过,用于登录与鉴权,不过只用到了 preHandle。
过滤器暂时只是用来设置字符编码,没有做过别的应用。
监听器没用过,只看过一个示例用于 session 计数来做一个网站实时在线人数的展示。
视图解析器用过两个,一个是 org.springframework.web.servlet.view.InternalResourceViewResolver,也就是展示 jsp 页面的。
还有一个是 tiles3 的 org.springframework.web.servlet.view.tiles3.TilesViewResolver。
这部分我都感觉有点迷糊,特别是后面视图解析器这一条我是刚刚才想起来这么回事的··· 也不知道对不对
网上找到一个 web.xml 的博文,字挺多的,我感觉可信
https://blog.csdn.net/believejava/article/details/43229361
还有一个上下文是 ContextLoaderListener 创建的,也就是管理我们的模型、dao、service、mybatis 与 memcached 等内容,前面那个上下文不管的东西这里都管。
之前我也是没搞明白这一点,结果 memcached 配了半个小时都没用上,因为我在 web.xml 里引用 memcached 配置文件。
在 java配置的 springmvc 中,我们可以通过实现 AbstractAnnotationConfigDispatcherServletInitializer 这个抽象类来同时创建 DispatcherServlet 与 ContextLoaderListerener。
但是这种方案只能用于 Servlet3.0 以上的容器,如果 servlet 版本过低的话其中的 DispatcherServlet 没法用 Java 来配置,只能是继续用 web.xml 配置了。
2. 控制器的测试
在测试控制起的时候我们可以直接调用控制器实例内部的方法,然后断言其返回值。
但是这样的测试获取不到真正的视图解析器,因为这样测试的时候控制器是没有真的接受到一个请求,所以其结果只能够是看一下返回的字符串对不对。
在 spring3.2 开始,包含了一种 mock SpringMVC 针对控制器的 HTTP 请求机制。可以让我们很方便的去测试控制器的功能是否符合预期。
/**
* @ClassName FirstControllerTest
* @Description 测试控制器与视图解析器
* @Author owlwinter
* @Date 2020/6/30 22:44
* @Version 1.0
**/
public class FirstControllerTest {
@Test
public void testFirst() throws Exception{
FirstController firstController = new FirstController();
MockMvc mockMvc = standaloneSetup(firstController).build();
mockMvc.perform(get("/")).andExpect(view().name("index"));
}
}
我们再写一个不存在的请求路径试试:
我们可以看到,知识修改了请求路径,视图名称是没有改变的,但是使用 mock SpringMVC 的方式的话就会报错,可以证实这种方式确实发起了一个请求再去断言其到的视图名称是否符合预期。保证了和浏览器的行为是一致的。
明天的计划
1. 继续学习 SpringMVC 的内容,顺便重写项目
绵绵用力,久久为功。
评论