一、跳转问题
mvc正常的跳转逻辑是:index.jsp -> Controller -> success.jsp
而想不经过controller层又要以mvc的形式跳转,则需要下面的操作:
path写拦截的响应 , view-name写跳转的目的地,会自动加上视图解析器的前缀和后缀
<mvc:view-controller path="xxxxx" view-name="success" />
注意!!!如果只写上面的标签,程序会直接忽略Controller层,想要Controller层的代码和该标签同时有效,需要再加上下面的标签:
该标签也是mvc的基础配置,建议以后的mvc项目都加上该标签
<mvc:annotation-driven></mvc:annotation-driven>
处理静态资源
在SpringMVC中,如果直接访问静态资源:404 。原因:之前将所有的请求 通过通配符“、” 拦截,进而交给 SPringMVC的入口DispatcherServlet去处理:找该请求映射对应的 @requestMapping,如http://localhost:8888/SpringMVCProject/img.png,程序会去找@RequsetMapping(“img.png”)
解决:如果是 需要mvc处理的,则交给@RequsetMapping(“img.png”)处理;如果不需要springmvc处理,则使用 tomcat默认的Servlet去处理。解决静态资源方案:如果有springmvc对应的@requestMapping则交给spring处理;如果没有对应@requestMapping,则交给服务器tomcat默认的servlet去处理 :实现方法,只需要增加2个注解即可 springmvc.xml:
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<mvc:annotation-driven></mvc:annotation-driven>
二、类型转换
Spring自带一些 常见的类型转换器:
public String testDelete(@PathVariable(“id”) String id) ,public String testDelete(@PathVariable(“id”) Integer id)即可以接受int类型数据id 也可以接受String类型的id
自定义类型转换器:
举例子(将字符串转化成学生)
学生类:
public class Student {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student() {
}
}
编写转化器:
package converter;
import entity.Student;
import org.springframework.core.convert.converter.Converter;
public class MyConverter implements Converter<String, Student> {
@Override
public Student convert(String source) {
//source接受前端传来的String:2-zs-23
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;
}
}
//写好后还需要将MYConverter加入到springmvc中,需要三步操作,详情请看Springmvc.xml
xml文件配置:
<!--1将自定义转换器 纳入SpringIOC容器-->
<bean id="myConverter" class="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-driver中-->
<!--此配置是springmvc的基础配置,很多功能都需要通过该注解协调-->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
测试:
前端输入的时候需要安装 1-zs-23,这种格式输入
<form action="handler/testConverter">
学生信息:<input name="studentInfo" type="text"/>
<input type="submit" value="转换">
</form>
@RequestMapping("testConverter")
public String testConverter(@RequestParam("studentInfo") Student student){//因为自己写的转换器已经配置到springmvc中了,所以这里可以自动转换!
System.out.println(student);
return "success";
}