1.SpringMVC注解开发
使用注解开发,Controller中的方法的参数和返回值有限定,比配置开发灵活
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 包扫描,扫描该包下那些类和方法加了注解 -->
<context:component-scan base-package="com.woniu.controller"></context:component-scan>
</beans>
Controller
@Controller
@RequestMapping("demo") // 命名空间
public class myController {
@RequestMapping("/my.do")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
// 将数据存储到request域中
mv.addObject("test", "handleRequest");
// 默认就是请求转发
mv.setViewName("/jsp/mvctest.jsp");
return mv;
}
}
2.路径匹配规则
命名空间,多路径配置
// 命名空间,多路径配置
@RequestMapping(value = { "/second.do", "/test.do" })
public ModelAndView second(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
// 将数据存储到request域中
mv.addObject("test", "second");
// 默认就是请求转发
mv.setViewName("/jsp/mvctest.jsp");
return mv;
}
请求路径支持通配符
// 请求路径支持通配符
// 一个处理器对应多个请求路径
@RequestMapping("/third*.do")
public ModelAndView third(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
// 将数据存储到request域中
mv.addObject("test", "third");
// 默认就是请求转发
mv.setViewName("/jsp/mvctest.jsp");
return mv;
}
// “ * ”表示有且只有一层路径
@RequestMapping("/*/four.do")
public ModelAndView four(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
// 将数据存储到request域中
mv.addObject("test", "four");
// 默认就是请求转发
mv.setViewName("/jsp/mvctest.jsp");
return mv;
}
// " ** "表示没有,或一层,或多层路径都可以
@RequestMapping("/**/five.do")
public ModelAndView five(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
// 将数据存储到request域中
mv.addObject("test", "five");
// 默认就是请求转发
mv.setViewName("/jsp/mvctest.jsp");
return mv;
}
3.限定请求方法的类型
// 限定请求方法的类型
@RequestMapping(value = "/six.do", method = RequestMethod.POST)
public ModelAndView six(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
// 将数据存储到request域中
mv.addObject("test", "six");
// 默认就是请求转发
mv.setViewName("/jsp/mvctest.jsp");
return mv;
}
4.编码过滤器
SpringMVC的编码过滤器处理:post请求乱码和响应乱码
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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5.参数校正
表单元素的name和处理器方法参数不一致
//校正参数
//针对表单元素name值和处理器方法参数不一致
@RequestMapping("/revise.do")
public ModelAndView revise(HttpServletRequest req, HttpServletResponse resp,@RequestParam("sname")String name,@RequestParam("ssex")String sex){
ModelAndView mv = new ModelAndView();
System.out.println(name);
System.out.println(sex);
// 将数据存储到request域中
mv.addObject("test", "six");
// 默认就是请求转发
mv.setViewName("/jsp/mvctest.jsp");
return mv;
}
6.处理器参数
可以是:request,response,session,model,接收请求参数
controller
@RequestMapping("/test.do")
public ModelAndView model(HttpServletRequest req, HttpServletResponse resp,HttpSession session,Model model,Student student){
//request,response
resp.setContentType("text/html;charset=utf-8");
String sname = req.getParameter("sname");
int sage = Integer.parseInt(req.getParameter("sage"));
char ssex = req.getParameter("ssex").charAt(0);
int cid = Integer.parseInt(req.getParameter("cid"));
//student
System.out.println(student);
//session
session.setAttribute("demo", "测试");
//model
model.addAttribute("test", "modle");
return new ModelAndView("/jsp/mvctest.jsp");
}
jsp
<form action="<c:url value='/demo/test.do'/>" method="POST">
姓名:<input type="text" name="sname" value=""/>
<br/>
年龄:<input type="text" name="sage" value="" />
<br/>
性别:<input type="text" name="ssex" value="" />
<br/>
课程编号:<input type="text" name="cid" value="">
<br/>
学校编号:<input type="text" name="school.scid" value="">
<br/>
学校名称:<input type="text" name="school.scname" value="">
<input type="submit" value="提交"/>
</form>
实体类:
public class Student {
private Integer sid;
private String sname;
private Integer sage;
private Character ssex;
private Integer cid;
private School school;
}