SpringMvc学习笔记(二)SpringMvc控制器

时间:2021-11-06 17:01:03

   一:@RequestMapping 请求映射

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径

二:@RequestParam 请求参数

可以通过过@RequestParam来获取表单参数,value中指定表单参数的name,可以通过配置required属性来决定是否一定要传该参数,如果是true表示一定要传,如果没传则会抛出异常,如果是false则可传可不传,但是注意如果注解的参数是int类型,required=false,此时不传参数也会报错,因为处理器会把null值赋给int,这样是不可以的

@RequestMapping("/preSave")
public ModelAndView preSave(@RequestParam(value="id",required=false) String id){
ModelAndView mav=new ModelAndView();
if(id!=null){
mav.addObject("student", studentList.get(Integer.parseInt(id)));
mav.setViewName("student/update");
}else{
mav.setViewName("student/add");
}

return mav;
}


三:ModelAndView 返回模型和视图

     所有的web应用的mvc框架都有它定位视图的方式。Spring提供了视图解析器供你在浏览器中显示模型数据,而不必被拘束在特定的视图技术上。

Spring的控制器Controller会返回一个ModelAndView的实例。Spring根据ModelAndView实例中的View和Model把信息反馈给用户。Spring中的视图是以名字为标识的,ViewResolver是通过名字来解析view的。Spring提供了多种视图和视图解析器。


四:SpringMVC 对象属性自动封装

  注意:springmvc没有成员变量,把需要传递的参数对象放入方法中,当你请求这个方法的时候,

这个方法里面的对象会自动被创建,需要封装的参数自动被封装到方法的对象中

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/student/save.do" method="post">
<table>
<tr>
<th colspan="2">学生添加</th>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="age"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="提交"/>
</td>
</tr>
</table>
</form>
</body>
</html>

@RequestMapping("/save")	public String save(Student student){		studentList.add(student);		return "redirect:/student/studentList.do";	}
public class Student {	private int id;	private String name;	private int age;//省略get set方法}

表单中的name属性值要与Student类中的类成员变量名相同

五:SpringMVC POST 请求乱码解决

在web.xml中添加该过滤器配置

<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>


六:Controller 内部转发和重定向

forward表示转发,redirect表示重定向

@RequestMapping("/save")
public String save(Student student){
studentList.add(student);
return "redirect:/student/studentList.do";
}
@RequestMapping("/delete")
public String delete(@RequestParam(value="id") int id){
studentList.remove(id);
return "forward:/student/studentList.do";
}