一、Springmvc是什么
Springmvc是Spring框架的后续产品,用在基于MVC的表现层开发,类似于struts2框架。
Spring全家桶:SSM+SpringBoot +SpringCloud+Redis+Vue + IDEA+Git
Springmvc依赖于Core(IOC),Springmvc需要导入Core包和Springmvc特有的包。
如果使用Spring的DAO、ORM不但要导入这两个包,好如要导入AOP
二、快速入门
@Controller
// 请求映射,怎么样找到这些请求的路径 /student/add
@RequestMapping(value = "/student")
public class StudentController {@RequestMapping(value = "/add1")public void add1(String name, Integer age, String gender) {System.out.println("StudentController.add()");System.out.println("name: " + name);System.out.println("age: " + age);System.out.println("gender: " + gender);}@RequestMapping(value = "/add")public ModelAndView add(Student student) {System.out.println("StudentController.add()");System.out.println(student);// Model:数据 View:界面ModelAndView modelAndView = new ModelAndView();// request.setAttribute("student", student);modelAndView.addObject("student", student);// request.getRequestDispatcher("/student_info.jsp").forward(request,response);modelAndView.setViewName("/student_info.jsp");return modelAndView;}
}
三、ModelAndView和Model
ModelAndView:即放数据,也放转发的页面
Model:只放数据,以方法返回值形式设置转发的页面
@RequestMapping("/add2")
public ModelAndView add2(Student student) {System.out.println("StudentController.add2()");System.out.println(student);// req.setAttritbu("student", student);// req.getRequestDispatcher("/student_info.jsp").forword(req, resp);ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("student", student);modelAndView.setViewName("/student_info.jsp");return modelAndView;
}@RequestMapping("/add3")
public String add3(Student student, Model model) {System.out.println("StudentController.add3()");System.out.println(student);// req.setAttritbu("student", student);model.addAttribute("student", student);// req.getRequestDispatcher("/student_info.jsp").forword(req, resp);return "/student_info.jsp";
}
四、RequestMethod
可以限定某个业务控制方法,只允许GET或者POST方式请求访问:
五、写入request、response等传统web参数
@RequestMapping(value = "/add", method = RequestMethod.POST)
public void add(HttpServletRequest request, HttpServletResponse response, HttpSession session)throws ServletException, IOException {System.out.println("StudentController.add()");String name = request.getParameter("name");String age = request.getParameter("age");String gender = request.getParameter("gender");Student student = new Student(null, name, Integer.parseInt(age), gender);request.setAttribute("student", student);request.getRequestDispatcher("/student_info.jsp").forward(request, response);
}
七、转发&重定向
转发和重定向:
//http://localhost:8080/student/deleteById?id=23
@RequestMapping("/deleteById")
public String deleteById(Integer id) {System.out.println("StudentController.deleteById");System.out.println("id: " + id);return "redirect:/student/selectAll";
}@RequestMapping("/selectAll")
public String selectAll() {System.out.println("StudentController.selectAll");return "/student_list.jsp";
}
八、乱码问题
在传统JSP+Servlet中我们自己写Filter来处理乱码问题,使用SpringMVC他帮我们写了一个处理乱码问题的Filter,我们只需要在web.xml中配置这个Filter就可以了。
在web.xml中添加
<!-- 解决POST乱码问题 --><filter><filter-name>characterEncoding</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>characterEncoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>
九、JSON数据封装
1、加入Jackson相关jar包
2、在返回方法的时候加上@ResponseBody
@RequestMapping("/selectById")
@ResponseBody
public Student selectById(Integer id){Student student = new Student(1, "张三1", 23, "男");return student;
}@RequestMapping("/select")
@ResponseBody
public List<Student> select(){ Student student1 = new Student(1, "张三1", 23, "男");Student student2 = new Student(2, "张三2", 23, "男");Student student3 = new Student(3, "张三3", 23, "男");List<Student> list = new ArrayList<>();list.add(student1);list.add(student2);list.add(student3);return list;
}
十、@RequestParam注解
我们一般使用的参数绑定都有遵循的规则:方法参数名要与传递过来的name属性名相同。
在默认的情况下,只有名字相同,SpringMVC才会帮我们进行参数绑定…
如果我们使用@RequestParam注解的话,我们就可以使方法参数名与传递过来的name属性名不同…
该注解有三个变量:
1、value【指定name属性的名称是什么】
/student/selectByPage?page=3&pageSize=34
public void selectByPage(@RequestParam(value = "page", defaultValue = "1") Integer pageNo,Integer pageSize)
2、required 代表这个参数必须要传递过来,原来不传默认是null,加了这个required 后不传就会报错
3、defaultvalue设置默认值
使用了defaultValue,required只能为false,前端不传参数时会将参数置为defaultValue
@RequestMapping("/selectByPage")
public String selectByPage(@RequestParam(value = "page", defaultValue = "1") Integer pageNo,@RequestParam(defaultValue = "5") Integer pageSize,@RequestParam(required = true, defaultValue = "4") Integer totalPage) {System.out.println("pageNo: " + pageNo);System.out.println("pageSize: " + pageSize);System.out.println("defaultValue: " + totalPage);return "/student_list.jsp";
}
十一、视图解析器
<!-- 视图解析器
1、如果Controller中书写的是视图的逻辑名,这个视图解析器必须要配置。
前缀+视图逻辑名+后缀=真实路径
/ + student_add + .jsp
2、如果视图解析器书写的是视图的真实路径,那么这个视图解析器可以不配置-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 路径前缀 --><property name="prefix" value="/"/><!-- 路径后缀 --><property name="suffix" value=".jsp"/>
</bean>