Spring MVC 简单应用

 内容概要

  • 原理简介
  • DispatcherServlet
  • RequestMapping
  • ResponseBody
  • param
  • RequestParam
  • 重定向与转发

Spring MVC原理

  • SpringMVC是一个开源的Java的的框架,为开发强大的基于Java的的网络的应用程序提供全面的基础架构支持,由RodJohnson撰写,于2003年6月首次发布
  • Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构用于开发灵活和松散耦合的Web应用程序的组件
  • 模型(Model)封装了应用程序数据,通常由POJO类组
  • 视图(View)负责渲染模型数据,生成客户端浏览器可以解释HTML输出
  • 控制器(Controller)处理用户请求并构建适当的模型

 DispatcherServlet 

  • SpringMVC框架是围绕DispatcherServlet设计的,它处理所有的HTTP请求和响应

  •   DispatcherServlet处理HTTP请求事件顺序
  •   在接收到HTTP请求后;分发器会查询HandlerMapping以调用相应的控制器
  •   控制器接受请求并根据使用的GET或POST方法调用相应的服务方法。服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet
  •   DispatcherServlet将从视图解析器的获取请求的定义视图,当视图完成;分发器将模型数据传递到最终的视图,并在浏览   器上呈现
  •   所有上述组件,即:HandlerMapping,Controller和ViewResolver是WebApplicationContext中的一部分,它是普通的ApplicationContext中的扩展,带有网络应用程序所需的一些额外功能

    
       具体流程:

  • 1.通过浏览器或app发送请求给服务器,如:HTTP://本地主机:8080 /第1页
  • 2.所有请求会交给的DispatcherServlet来处理
  • 3.在DispatcherServlet内部,会通过HandlerMapping来检查,检查是否有@RequestMapping注解对应这个URI
  • 4.如果没有,返回404,如果有,让Controller来调用该方法
  • 5.方法的返回值交给ViewResolver来处理,按照配置好的前缀和后缀拼接成一个JSP或HTML的文件路径
  • 6.将JSP或HTML处理为对应的视图对象交给的DispatcherServlet
  • 7.由DispatcherServlet将视图对象输出给服务器
  • 8.服务器将结果发给客户端

 RequestMapping

  • DispatcherServlet将请求委派给控制器来执行特定功能,@Controller注解指定特定的类充当控制器角色,@RequestMapping注解用于将URL映射到特定的方法
  • 1.基本使用
@Controller
public class MainController {

    @RequestMapping(value = "/page1",)
    public String p1(){
        return "p1";
    }
}

  •  2.多层URI
 @RequestMapping(value = "/p1/user")
    public String user1(){
        return "p1";
    }
  •  3. @ RequestMapping不仅可以写在方法上,也可以写在类上方
@Controller
@RequestMapping(value = "/user")
public class UserController {

    @RequestMapping(value = "/p1")
    public String user1(){
        return "p1";
    }
}
  • 4.多个URI指向同一个JSP
    @RequestMapping(value = {"/p2","/","/user/*})
    public String user2(){
        return "p1";
    }
  •  5.结合请求方法
    @RequestMapping(value = "/getInfo",method = RequestMethod.GET)
    public String getInfo(){
        return "p1";
    }
  • 6.带有请求头(区分是否可以访问)
    @RequestMapping(value = "/p3",headers = "token=123123")
    public String user3(){
        return "p1";
    }

ResponseBody

  • 1.改变返回结果为json
  • gson,jackson,fastjson的介绍
    @ResponseBody
    @RequestMapping(value = "/json")
    public List getJson(){
          List list = new ArrayList<>();
          list.add("aaaaa");
          list.add("bbbbb");
          return list;
    }

params参数

  • 限定的是请求参数

       如:http://localhost:8080/json?pageId=10

    @ResponseBody
    @RequestMapping(value = "/json",params = "pageId=10")
    public List getJson(){
          List list = new ArrayList<>();
          list.add("aaaaa");
          list.add("bbbbb");
          return list;
    }

 @RequestParam

  •  获取请求地址的参数

       如:/login?username=xxx&password=yyy

    @ResponseBody
    @RequestMapping(value = "/login")
    public PersonBean login(@RequestParam("username") String name,@RequestParam("password")String psw){
        PersonBean pb = new PersonBean();
        pb.setPname(name);
        pb.setPpsw(psw);
        return pb;
    }
    
    
    @ResponseBody
    @RequestMapping(value = "/login1")
    public PersonBean login2(PersonBean pb){
        return pb;
    }
    
    
        @ResponseBody
    @RequestMapping(value = "/login")
    public PersonBean login(@RequestParam("username") String name,@RequestParam(value = "password",required = false)String psw){
        PersonBean pb = new PersonBean();
        pb.setPname(name);
        pb.setPpsw(psw);
        return pb;
    }

  • 返回XML数据
  • 添加注解@XmlRootElement
  • 给实体类添加

动态地址取值

  • @PathVariable
  •  localhost/xxpage/page/1
    // localhost/j2/page/4
    @RequestMapping(value = "/j2/{pageNo}")
    public String jump2(@PathVariable("pageNo") int no, Model model){
        model.addAttribute("no",no);

        return "j2";
    }


 转发与重定向

  •  请求转发
  •  请求重定向
    @RequestMapping(value = "/j1")
    public String jump1(@RequestParam("flag") boolean flag){
        if (flag){
            // 重定向
            return "redirect:success";
        }else {
            // 转发
            return "forward:fail";
        }
    }

 SpringMVC给JSP传值

  • Model,ModelMap,Map
  •  ModelAndView
    @RequestMapping(value = "/success")
    public String success(Model model,ModelMap modelMap,Map map){
        model.addAttribute("msg","ssss");
        modelMap.addAttribute("key","value");
        map.put("key1","value1")
        return "success";
    }

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>


    Title


成功

${msg},${key},${key1}
  •  ModelAndView:包含几种传值形式
   @RequestMapping(value = "/fail")
    public ModelAndView fail(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("fail");

        mv.addObject("key3","value3");

        return mv;
    }

表单数据获取

  • JSP形式
@Controller
public class LoginController {

    @RequestMapping("/login")
    public String loginView(){
        return "login";
    }

    @RequestMapping("/login1")
    public String login(@RequestParam("username") String username,
                        @RequestParam("password") String psw, Model model){
        System.out.println(username+"---"+psw);
        if (username.equals("abc")&&psw.equals("123")){
            model.addAttribute("username",username);
            model.addAttribute("password",psw);
            return "success";
        }else {
            return "fail";
        }
    }

}

 

 

 

 

你可能感兴趣的:(Spring,MVC)