SpringMVC视图解析器常见功能
1.<mvc:view-controller/>
要用SpringMVC实现:index.jsp——>success.jsp
<!--view-name依旧会被视图解析器加上前缀后缀--> <mvc:view-controller path="SpringMVCHandler/testMvcViewController" view-name="success"/>
以上注解,会让所有的请求转入<mvc:...>中匹配的映射地址,而会忽略@RequestMapping();
如果向让两者共存,需加入:
<!--此配置是SpringMVC的基础配置,很多功能需要此注解来协调--> <mvc:annotation-driven></mvc:annotation-driven>
2.指定请求方式
指定跳转方式:此种方法不会被视图解析器加上前缀、后缀。
//forward:转发 redirect:重定向 return "forward:/views/success.jsp";//view
3.处理静态资源
html,css,js,图片,视频
在SpringMVC中,如果直接访问静态资源:会404;
原因:之前将所有的请求通过通配符“/”拦截,进而交给SpringMVC。
解决方法:如果需要mvc处理,则用@RequestMapping;
如果不需要,则使用tomcat默认的servlet去处理:有对应的拦截,则交给相应的servlet去处理;如果没有,则直接访问。
tomcat默认的servlet在tomcat配置文件confweb.xml中。
实现方法:在springmvc.xml中增加两个配置。
<!--此配置是SpringMVC的基础配置,很多功能需要此注解来协调--> <mvc:annotation-driven></mvc:annotation-driven> <!--该配置用于springmvc中接收一个请求时,若该请求没有对应的@RequestMapping,则将该请求交给服务器默认的servlet去处理(直接访问)--> <mvc:default-servlet-handler></mvc:default-servlet-handler>
4.类型转换
(1)Spring自带一些常见的类型转换器:
public String testDelete(@PathVariable("id") String id){,既可以接收int类型数据id,也可以接收String类型数据。
(2)可以自定义类型转换器
a.编写自定义类型转换器的类(实现Converter接口);
public class MyConverter implements Converter<String,Student> { @Override public Student convert(String source) {//source-->1-zs-34 //source接收前端传来的string:1-zs-34 //根据“-”拆分 String[] studentStrArr = source.split("-"); Student student = new Student(); student.setId(Integer.parseInt(studentStrArr[0])); student.setName(studentStrArr[1]); student.setAge(Integer.parseInt(studentStrArr[2])); return student; } }
b.配置:将自定义类型转换器的类加入到springmvc中。
<!--1自定义转换器纳入springmvc容器--> <bean id="myConverter" class="org.ghl.converter.MyConverter"></bean> <!--2将myConverter再纳入springmvc提供的转换器bean--> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <ref bean="myConverter"/> </set> </property> </bean> <!--3将conversionService注册到annotation-driven--> <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
c.测试
//测试转换器 @RequestMapping(value = "testConverter") public String testConverter(@RequestParam("studentInfo") Student student){ System.out.println(student.getId()+","+student.getName()+","+student.getAge()); return "success"; }
@RequestParam("studentInfo")是触发转换器的桥梁。
5.数据格式化
实现步骤:
a.配置
<!--配置数据格式化所依赖的bean--> <bean id="conversionService2" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"></bean>
b.通过注解使用
@DateTimeFormat(pattern = "yyyy-MM-dd") private Date birthday;
@NumberFormat(pattern = "###,#") private int id;
//测试数据格式化 @RequestMapping(value = "testDateTimeFormat")// 如果格式化错误,会将错误信息传入result public String testDateTimeFormat(Student student, BindingResult result){ System.out.println(student.getId()+","+student.getName()+","+student.getBirthday()); if (result.getErrorCount()>0){ for (FieldError error:result.getFieldErrors()){ System.out.println(error.getDefaultMessage()); } } return "success"; }