1、Spring Controller方法返回值类型
1)、返回String类型
@RequestMapping("/returnString")
public String returnString(){
//返回/WEB-INF/jsp/returnDemo/returnString.jsp页面
return "returnDemo/returnString";
}
2)、返回ModelAndView类型(可以携带参数)
@RequestMapping("/returnModelAndView")
public ModelAndView returnModelAndView(){
//解析到/WEB-INF/jsp/retrunDemo/returnModelAndView.jsp页面
ModelAndView mv=new ModelAndView("/returnDemo/returnModelAndView");
//携带参数传递到页面
mv.addObject("username","小明");
return mv;
}
3)、返回void类型 (返回void类型一般配合PrintWriter使用,和Servlet用法类似)
@RequestMapping("/returnVoid")
public void returnVoid(PrintWriter pw){
pw.write("Hello World.returnVoid")
}
4)、返回Json类型 //返回json需要添加@ResponseBody 注解
注意:SpringMVC返回json需要使用jackson ,添加相关的架包 ezmorph-1.0.6.jar 、 jackson-core-asl-1.9.13.jar 、jackson-mapper-asl-1.9.13.jar 、 json-lib-2.4-jdk15.jar ;其中@ResponseBody和produces=“application/json” 必不可少
@ResponseBody //返回json需要添加@ResponseBody注解
@RequestMapping(value="/returnJson",produces="application/json")//需要指定produces="application/json"
public Object returnJson(User user){
user.setUserName(user.getUserName()+"Json数据");
return JSONSerializer.toJSON(user);
}
}
2、传递参数到页面
1)、通过request方式
@RequestMapping("byRequest")
public String byRequest(HttpServletRequest request,HttpServletResponse response,HttpSession session){
//Spring mvc中可以方便获取到request、response、session
System.out.println("request="+request);
System.out.println("response="+response);
System.out.println("session="+session);
//设置需要传递到页面的数据
request.setAttribute("username","小明同学");
return "/parametersToPageDemo";
}
2)、model方式
@RequestMapping("/byModel")
public String byModel(Model model){
//设置需要传递到页面的数据
model.addAttribute("userName","小明同学");
return "/parametersToPageDemo";
}
3)、ModelAndView方式
@RequestMapping("/returnModelAndView")
public ModelAndView returnModelAndView(){
//解析到/WEB-INF/jsp/retrunDemo/returnModelAndView.jsp页面
ModelAndView mv=new ModelAndView("/returnDemo/returnModelAndView");
//携带参数传递到页面
mv.addObject("username","小明");
return mv;
}
4、获取参数值
1)、自动类型匹配 (针对少量的参数)
@RequestMapping("/autoParameter")
public ModelAndView autoParameter(String username,String password){
System.out.println("username=“+username);
System.out.println("password=“+password);
ModelAndView mv=new ModelAndView ("/getParameterDemo/autoParameter");
mv.addObject("username",usename);
mv.addObject("password",password);
return mv;
}
2)、自动封装pojo (针对大量参数的提交)
// 编写po User
public calss User implements Serializable{
private String username;
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
编写Controller方法
@RequestMapping("/autoMaticBoxing")
public ModelAndView autoMaticBoxing(User user){
System.out.println("username=“+user.getUserName());
System.out.println("password=“+user.getPassword());
ModelAndView mv=new ModelAndView ("/getParameterDemo/autoMaticBoxing");
mv.addObject("user",user);
return mv;
}
3)、使用request获取请求参数
@RequestMapping("/getParamByRequest")
public ModelAndView getParamByRequest(HttpServletRequest request ){
String username=request.getParameter("username");
String password=request.getParameter("password");
ModelAndView mv=new ModelAndView("/getParameterDemo/getParamByRequest");
mv.addObject("username",username);
mv.addObject("password",password);
return mv;
}
4)、使用@RequestParam获取参数
@RequestMapping("/getByRequestParam")
public ModelAndView getByRequestParam(@RequestParam(value="userName",required=true)String username,@RequestParam(value="password",required=true)String password){
//Value参数表示:从页面传递过来的参数名称,相当于request.getParameter("username");
//equired=true 表示必填,fase表示非必填,如果必填但是没值就抛出异常
//注意:这里第一个username要和表单的name对应,后面的String是自己从新定义的属性值
System.out.println("username=“+username);
System.out.println("password=“+password);
ModelAndView mv=new ModelAndView("/getParameterDemo/getByRequestParam");
mv.addObject("username",username);
mv.addObject("password",password);
return mv;
}
4、Spring MVC重定向
1)、无参重定向
// 1、使用String方式,在返回String类型的方法上使用这个方式
@RequestMapping("/redirectNoParaString")
public String redirectNoParaString(){
return "redirect:/redirectDemo/targetNoPara.do";
}
//2、使用ModelAndView方式,在返回ModelAndView类型的方法上使用这个方式
public ModelAndView redirectNoParaMv(){
ModelAndView mv=new ModelAndView("redirect:/redirectDemo/targetNoPara.do");
return mv;
}
2)、有参重定向
1、拼接URL:这种方式就是在无参重定向的url上拼接参数的方式传递值。
//有参重定向String形式拼接URL
@RequestMapping("/redirectWithParaString1")
public String redirectWithParaString1(){
String name="小明";
int age=21;
return "redirect:/redirectDemo/targetWithPara.do?name="+name+"&age="+age;
}
//有参重定向ModelAndView形式拼接
@RequestMapping("/redirectWithParaMv1")
public ModelAndView redirectWithParaMv1(){
String name="小明";
int age=21;
ModelAndView mv=new ModelAndView("redirect:/redirectDemo/targetWithPara.do?name="+name+"&age="+age);
return mv;
}
2、使用SpringMVC提供的RedirectAttributes传递参数
//有参重定向String形式RedirectAttributes
@RequestMapping("/redirectWithParaString2")
public String redirectWithParaString2(RedirectAttributes attributes){
String name="小明";
int age=21;
//设置重定向参数
attributes.addAttribute("name",name);
attributes.addAttribute("age",age);
return "redirect:/redirectDemo/targetWithPara.do";
}
//有参重定向ModelAndView形式拼接URL
@RequestMapping("/redirectWithParaMv2")
public ModelAndView redirectWithParaMv2(RedirectAttributes attributes){
String name="小明";
int age=21;
//设置重定向参数
attributes.addAttribute("name",name);
attributes.addAttribute("age",age);
ModelAndView mv=new ModelAndView("redirect:/redirectDemo/targetWithPara.do?");
return mv;
}
5、什么是SpringMVC?
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过吧Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰 的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
优点:
1、可以支持各种视图技术,而不仅仅局限于JSP.
2、与Spring框架集成(如IOC容器,AOP等)。
3、清晰的角色分配:前端控制器(dispatcherServlet),请求到处理映射(handlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)。
4、支持各种请求资源的映射策略。
6、SpringMVC的工作原理
1、用户发起请求到前端控制器(DispatcherServlet)
2、前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle),通过xml配置或者注解进行查找。
3、找到以后处理器映射器(HandlerMapping)像前端控制器返回执行链(HeandlerExecutionChain)。
4、前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)
5、处理器适配器去执行Handler。
6、Handler执行完给处理器适配器返回ModelAndView。
7、处理器适配器向前端控制器返回ModelAndView。
8、前端控制器请求视图解析器(ViewResolver)去进行视图解析。
9、视图解析器像前端控制器返回view。
10、前端控制器对视图进行渲染。
11、前端控制器向用户响应结果。
SpringMVC中的几个组件:
1、前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU.
2、处理器映射器(HandlerMapping):根据URL去查找处理器。
3、处理器(Handler):需要程序员去写代码处理逻辑的
4、处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类笔记本的适配器(适配器模式的应用)
5、视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对的页面
7、常用注解
1)、@Controller : 负责注册一个bean到spring上下文中。
2)、@RequestMapping : 注解为控制器指定可以处理那些URL请求
3)、@RequestBody : 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上,再把HttpMessageConverter返回的对象数据绑定到controller中方法的参数上。
4)、@ResponseBody : 该注解用于将Controller的方法返回的对象,通过适应的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
5)、@ModelAttribute : 在方法定义上使用@ModelAttribute 注解:spring mvc 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute的方法,在方法的入参前使用@ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,在将请求参数-绑定到对象中,再传入入参对象添加到模型中。
6)、@RequestParam : 在处理方法入参处理使用@RequestParam可以把参数传递给请求方法。
7)、@PathVariable : 绑定URL占位符到入参
8)、@ExceptionHandler : 注解到方法上,出现异常是会执行该方法
9)、@ControllerAdvice : 使用一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常。