杂七杂八的SpringMVC

使用POJO对象绑定请求参数

public User testPOJO(User user){
return new User();
}

支持级联属性

SpringMVC的Handler方法可以接受的原生ServletAPI
HttpServletRequest
HttpServletResponse
HttpSession
java.security,Principal
Locale
InputStream
OutputStream
Reader
Writer
处理数据模型

1. ModelAndView

@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
	String viewName="success";
	ModelAndView modelAndView = new ModelAndView(viewName);
	/*添加数据模型到modelAndView中 */
	modelAndView.addObject("ok","这是个键值对");
	return modelAndView;
}
<h3>${requestScope.ok}</h3>

通过ok这个key,在success页面获取对应的value

方法返回的目标可以是MAV类型,其中可以包含视图和模型信息,SpringMVC会把MAV的model中数据放到request域对象

2. Map 及 Model

@RequestMapping("/testMap")
public String testMap(Map<String,Object> map){
	map.put("id",Arrays.asList("1001","1002","1003"));
	return "success";
}
HTML成功页面应有的ID:${requestScope.id}

目标方法可以添加Map类型,实际上也可以是Model类型或ModelMap类型,最终还是通过ModelAndView输出内容

3. @SessionAttributes

@SessionAttributes({"user"})
@Controller
public class demo{
	@RequestMapping("/testSessionAttributes")
	public String testSessionAttributes(Map<String,Object> map){
		User user=new User("zhangsan","123456",22);
		map.put("user",user);
		return "success";
	}
}
request user:${requestScope.user}
SessionAttributes user:${sessionScope.user}

注意:SessionAttributes注解只能放在类的上面,里面的值要和下面的key对应上,这样既能在session域中有该对象,请求域里面也会有

SessionAttributes属性:
values={"user","address"}可放多个KEY
types={String.class} 也可放多个,用法与value一样。可同时存在

SessionAttribute引发的异常
有可能的解决办法:

  1. @ModelAttribute (“key-name”)
  2. 添加带有@ModelAttribute 的方法

4. ModelAttribute

@ModelAttribut
public void getUser(@RequestParam(value="id",required=false) Integer id,Map<String,Object> map){
   if(id!=null){
   	User user = new User(1,"J",123456,12);
   	map.put("user",user);
   }
}
<form action="testModelAttribute" method="post">
<input type="hidden" name="id" value="1"/>
name:<input type="text" name="username" value="J"/>
<br>
age:<input type="text" name="age" value="12"/>
<br>
<<input type="submit" value="submit"/>
</form>
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
	System.out.println("修改之后:"+user);
	return "success";
}
  1. 被ModelAttribut标记的方法会在每个目标方法执行之前被MVC执行
  2. 执行ModelAttribute 注解修饰的方法:
    从数据库中取出对象,把对象放到了Map中,key为user。
    SpringMVC从Map中取出User对象,并把表单的请求参数赋给该User对象的对应属性。
    SpringMVC把上述修改后的对象传入目标方法的参数

注意:在ModelAttribut修饰的方法中,放入到Map时的key需要和目标方法入参类型的第一个字母小写的字符串一致,若想自定义key-name, 则需在目标方法入参处增加@ModelAttribute (“key-name”)

源码有待深入了解

JstlView

JSTL标签库

补充:Bean的配置选ResourceBundleMessageSource
property name=“basename” value="配置文件名"
SpringMVC-mvc-view-controller标签
<mvc:view-controller path="/success" view-name="success">

此标签可以不通过handler直接访问success页面
但是添加了此标签的工程将无法正常访问其他controller方法
解决办法:

<mvc:annotation-driven/>
SrpingMVC重定向
如果返回的字符串中带有forward:或者redirect:前缀时,SpringMVC会对他们进行特殊处理:
将forward:和redirect:当成指示符,其后的字符串作为URL来处理
<a href="testRedirect">TestRedirect</a>
    @RequestMapping("/testRedirect")
    public String testRedirect(){
        System.out.println("testRedirect");
        return "redirect:/index.jsp";
    }
@ControllerAdvice与@ExceptionHandler
@ControllerAdvice加在类上,用于统一管理异常类
@ExceptionHandler加在方法上,参数是异常类.class
@ExceptionHandler({ArithmeticException.class})
public ModelAndView testException(Exception ex){
	System.out.println("异常信息:"+ex);
	MondelAndView mv=new ModelAndView("viewName");
	mv.addObject("exception",ex);
	return mv;
}
@ResponseStatus
主要加在类上,有两个属性,reason和value
reason主要标记错误原因,value则指定错误码类型(返回页面的时候就会变成错误码)
若写在方法上,则该方法会直接抛出异常到页面。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值