《Spring实战》摘录 - 11

in #ievolution6 years ago

19-03-20-c0.jpg

101

Q: #5.2.3-1 | 测试SpittleController处理针对“/spittles”的GET请求
A:

@Test
public void shouldShowRecentSpittles() throws Exception{
     List<Spittle> expectedSpittles = createSpittleList(20);
     SpittleRepository  mockRepository = mock(SpittleRepository.class); // Mock Repository
     when(mockRepository.findSpittles(Long.MAX_VALUE,20)).thenReturn(expectedSpittles);
     SpittleController controller = new SpittleController(mockRepository);
     MockMvc mockMvc = standaloneSetup(controller).setSingleView(new InternalResourceView(“/WEB-INF/views/spittles.jsp”)).build(); //Mock Spring MVC
     mockMvc.perform(get(“/spittles”))  // 对”/spittles”发起GET请求
             .andExpect(view().name(“spittles”))
             .andExpect(model().attributeExists(“spittleList”))
             .andExpect(model().attribute(“spittleList”, hasItems(expectedSpittles.toArray())));  //断言期望的值
}
…
private List<Spittle> createSpittleList(int count){
     List<Spittle> spittles = new ArrayList<Spittles>();
     for(int i=0; i<count; i++){
         spittles.add(new Spittle(“Spittle ” + i, new Date()));
     }
     return spittles;
}

102

Q: #5.3-1 | Spring MVC允许以多种方式将客户端中的数据传送到控制器的处理器方法中,包括
A:

  • 查询参数(Query Parameter)。
  • 表单参数(Form Parameter)。
  • 路径变量(Path Variable)。

103

Q: # 5.4-1 | 网络编程中,表单的作用
A: 展现表单以及处理用户通过表单提交的数据

104

Q: #5.4.1-1 | 当InternalResourceViewResolver看到视图格式中的“redirect:”前缀时,InternalResourceViewResolver会知道些什么?
A: 它就知道要将其解析为重定向的规则,而不是视图的名称

105

Q: #5.4.1-2 |
除了“redirect:”,InternalResourceViewResolver还能识别“forward:”前缀。当它发现视图格式中以“forward:”作为前缀时,它会怎么做?
A: 请求将会前往(forward)指定的URL路径,而不再是重定向。

106

Q: #5.4.2-1 | Java校验API所提供的校验注解
A:

  • @AssertFalse - 所注解的元素必须是Boolean类型,并且值为false
  • @AssertTrue - 所注解的元素必须是Boolean类型,并且值为true
  • @DecimalMax - 所注解的元素必须是数字,并且它的值要小于或等于给定的BigDecimalString值
  • @DecimalMin - 所注解的元素必须是数字,并且它的值要大于或等于给定的BigDecimalString值
  • @Digits - 所注解的元素必须是数字,并且它的值必须有指定的位数
  • @Future - 所注解的元素的值必须是一个将来的日期
  • @Max - 所注解的元素必须是数字,并且它的值要小于或等于给定的值
  • @Min - 所注解的元素必须是数字,并且它的值要大于或等于给定的值
  • @NotNull - 所注解元素的值必须不能为null
  • @Null - 所注解元素的值必须为null
  • @Past - 所注解的元素的值必须是一个已过去的日期
  • @Pattern - 所注解的元素的值必须匹配给定的正则表达式
  • @Size - 所注解的元素的值必须是String、集合或数组,并且它的长度要符合给定的范围

107

Q: #6.1-1 | Spring自带了13个视图解析器,能够将逻辑视图名转换为物理实现
A:

  • BeanNameViewResolver - 将视图解析为Spring应用上下文中的bean,其中bean的ID与视图的名字相同
  • ContentNegotiatingViewResolver - 通过考虑客户端需要的内容类型来解析视图,委托给另外一个能够产生对应内容类型的视图解析器
  • FreeMarkerViewResolver - 将视图解析为FreeMarker模板
  • InternalResourceViewResolver - 将视图解析为Web应用的内部资源(一般为JSP)
  • JasperReportsViewResolver - 将视图解析为JasperReports定义
  • ResourceBundleViewResolver - 将视图解析为资源bundle(一般为属性文件)
  • TilesViewResolver - 将视图解析为Apache Tile定义,其中tile ID与视图名称相同。注意有两个不同的TilesViewResolver实现,分别对应于Tiles 2.0和Tiles 3.0
  • UrlBasedViewResolver - 直接根据视图的名称解析视图,视图的名称会匹配一个物理视图的定义
  • VelocityLayoutViewResolver - 将视图解析为Velocity布局,从不同的Velocity模板中组合页面
  • VelocityViewResolver - 将视图解析为Velocity模板
  • XmlViewResolver - 将视图解析为特定XML文件中的bean定义。类似于BeanName-ViewResolver
  • XsltViewResolver - 将视图解析为XSLT转换后的结果

108

Q: #6.2-1 | Spring提供了两种支持JSP视图的方式:
A:

  • InternalResourceViewResolver会将视图名解析为JSP文件。另外,如果在你的JSP页面中使用了JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)的话,InternalResourceViewResolver能够将视图名解析为JstlView形式的JSP文件,从而将JSTL本地化和资源bundle变量暴露给JSTL的格式化(formatting)和信息(message)标签。
  • Spring提供了两个JSP标签库,一个用于表单到模型的绑定,另一个提供了通用的工具类特性。

109

Q: #6.2.1-1 | InternalResourceViewResolver解析视图时,会在视图名上添加前缀和后缀,请画出相应的图
A:
19-03-20-c1.png

110

Q: #6.2.1-2 | 使用@Bean注解的时候,我们可以按照如下的方式配置Internal-ResourceView Resolver,使其在解析视图时,可以自动加上前后缀
A:

@Bean
public ViewResolver viewResolver() {
  InternalResourceViewResolver resolver =
      new InternalResourceViewResolver();
  resolver.setPrefix("/WEB-INF/views/");
  resolver.setSuffix(".jsp");
  return resolver;
}

//作为替代方案,如果你更喜欢使用基于XML的Spring配置,那么可以按照如下的方式配置InternalResourceViewResolver:
<bean id="viewResolver"
      class="org.springframework.web.servlet.view.
                        InternalResourceViewResolver"
      p:prefix="/WEB-INF/views/"
      p:suffix=".jsp" />

Coin Marketplace

STEEM 0.14
TRX 0.23
JST 0.031
BTC 83984.44
ETH 2068.83
USDT 1.00
SBD 0.63