一.springMVC基础
1.使用@RequestMapping映射请求
@RequestMapping可以作用在类和方法上面,请求路径为类的value+方法的value
2.@RequestMapping处理不同提交方式
@RequestMapping(value = “/update”,method = RequestMethod.POST)
@RequestMapping(value = “/update”,method = RequestMethod.GET)
3.params简单的表达式
– param1: 表示请求必须包含名为 param1 的请求参数
– !param1: 表示请求不能包含名为 param1 的请求参数
– param1 != value1: 表示请求包含名为 param1 的请求参数,但其值
不能为 value1
@RequestMapping(value = “/update”,method = RequestMethod.GET,params = {“userid”,”age=10”,”city!=1”})
4.@RequestMapping多路径请求
映射路径可以填写多个,多个访问都能被绑定到一个方法
@RequestMapping(value = {“/hello”,”/good”})
5.@PathVariable 映射 URL绑定的占位符
user.shtml?userid=123
@RequestMapping(value = “/delete/{id}”)
public String deleleUser(@PathVariable(value = “id”)Long id){
System.out.println(“要删除的用户的ID是”+id);
return HELLO;
}
6.@RequestParam 绑定请求参数值
- alue:要接收的参数名
- required:该参数是否是必须的
- defaultValue:如果参数为空,则给它默认值
@RequestMapping(value =”/list”)
public String list(@RequestParam(value = “page”,required = false,defaultValue = “1”)Integer page){
System.out.println(“当前页是第”+page+”页!”);
return HELLO;
}
7.@RequestHeader 绑定请求报头的属性值
- value:要接收的属性名
- required:该属性是否是必须的
- defaultValue:如果属性为空,则给它默认值
@RequestMapping(value =”/list”)
public String list(@RequestHeader(value = “Accept-Language”,required = false,defaultValue = “zh-CN”)String AcceptLanguage){
System.out.println(“AcceptLanguage:”+AcceptLanguage);
return HELLO;
}
8.@CookieValue 绑定请求中的 Cookie 值
- value:要接收的Cookie名
- required:该Cookie名是否是必须的
- defaultValue:如果该Cookie为空,则给它默认值
@RequestMapping(value = “/cookie”)
public String cookieinfo(@CookieValue(value = “JSESSIONID”,required = false,defaultValue = “ABCDEFG”)String jssionid){
System.out.println(jssionid);
return HELLO;
}
9.POJO参数绑定
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。
@RequestMapping(value = “/add”,method = RequestMethod.POST)
public String add(Item item){
System.out.println(item);
return “item_add”;
}
10.List集合绑定
前端:
<div>
1号店铺名称:<input type="text" name="shops[0].shopname" /><br>
</div>
<div>
2号店铺名称:<input type="text" name="shops[1].shopname" /><br>
</div>
二:Controller方法返回值
1.ModelAndView
@RequestMapping(value = "/add",method = RequestMethod.POST)
public ModelAndView add(Item item, ModelAndView modelAndView){
System.out.println(item);
//数据模型
List<Item> items = new ArrayList<Item>();
items.add(new Item(1l,"戴尔笔记本",1999l));
items.add(new Item(2l,"华为手机",1998l));
//将数据添加到modeandview
modelAndView.addObject("items",items);
//设置视图
modelAndView.setViewName("item_list");
return modelAndView;
}
前端通过EL表达式取值:
<c:foreach items="${items}" var="item">
2.Model
@RequestMapping(value = "/add",method = RequestMethod.POST)
//public ModelAndView add(Item item, ModelAndView modelAndView){
public String add(Item item, Model model){
System.out.println(item);
//数据模型
List<Item> items = new ArrayList<Item>();
items.add(new Item(1l,"戴尔笔记本",1999l));
items.add(new Item(2l,"华为手机",1998l));
//将数据添加到modeandview
model.addAttribute("items",items);
//设置视图---model可以直接返回视图名字
return "item_list";
}
4.Void-ServletAPI
—- 1.HttpServletRequest
页面的跳转还可以用servletAPI,返回值为void
@RequestMapping(value = “/world”)
public void world(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(“这是我的第一个入门案例……”);
request.getRequestDispatcher(“/WEB-INF/view/hello.jsp”).forward(request,response);
}
—-2.HttpServletResponse
@RequestMapping(value = “/world”)
public void world(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(“这是我的第一个入门案例……”);
response.sendRedirect(“/user/hello.shtml”);
}
—-3.直接返回视图
@RequestMapping(value = “/hellopage”)
public String hellopage(){
return “hello”;
}
—-4.redirect
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
@RequestMapping(value = “/world”)
public String world(){
return “redirect:/user/hello.shtml”;
}
—-5.forward
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
@RequestMapping(value = “/world”)
public String world(){
//return “redirect:/user/hello.shtml”;
return “forward:/WEB-INF/view/hello.jsp”;
}
三.2.日期格式转换
提交Date字符串数据格式的时间转成Date类型
方法一
在实体Bean上添加@DateTimeFormate,添加时间格式
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
private Date registerDate;
方法二
该方法可以写在base类里,需要的类基础base类,或者直接写在需要的类里
@InitBinder
protected void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
四.JSON数据交互
需要加入的jar包
创建响应JSON数据的方法,直接return T即可,在方法上加上@ResponseBody
五.文件上传
第一步:springmvc.xml配置文件上传解析器
第二步:后台实现
@RequestMapping(value = "/add")
public String uplod(@RequestParam("addfile")MultipartFile file){
file.transferTo(new File("g:/a.jpg"));
return "ok";
}
六.拦截器配置
Springmvc拦截器需要实现HandlerInterceptor接口,并且实现里面三个方法。
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截路径 -->
<mvc:mapping path="/admin/**"/>
<!--自定义拦截器的bean id-->
<ref bean="logInterceptor" />
</mvc:interceptor>
</mvc:interceptors>