欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SSM框架-SpringMVC篇

程序员文章站 2024-02-26 18:53:34
...

SpringMVC框架介绍

Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。

SpringMvc原理:

 *       1.用户发送请求给服务器,URI:/user/index;
 *       2.请求会发送给DispatcherServlet,因为在web.xml里配置了,
 *         所有的请求都会交给dispatcherServlet处理;
 *       3.在dispatcherServlet内部,通过HandlerMapping检查是否
 *          有方法和URI对应;
 *       4.如果有,就调用该方法,获得JSP文件名;
 *       5.viewResolver根据文件名获取响应的jsp文件,转化为视图对象;
 *       6.dispatcherServlet将视图对象发送给服务器,由服务器最终
 *         发送给用户浏览器.

Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:

1).处理器映射:选择使用哪个控制器来处理请求
2).视图解析器:选择结果应该如何渲染

通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。

SpringMVC原理图

SSM框架-SpringMVC篇

SpingMVC实战代码

@Controller
public class MainController {
    // 输入/index.jsp -> home.jsp;
    /**
     * 此注解是SpringMVC特有的
     * 后面value值对应的是返回的字符串;
     * value中若想加默认只需要加"/";
     * @return
     */
    @RequestMapping(value = "/index")
    public String frontPage(){
        /**
         * 可以在返回值中设置请求转发,重定向等操作;
         */
        return "home";
    }

    @RequestMapping(value = "/doo")
    public String frontPage2(){
        return "welcome";
    }

    /**
     * 两大传值的方式:
     *      /doo?username=1111;
     *      /doo/222/333/444;
     *两种请求方式:
     *      get/post
     *如何使用Json/xml数据:
     *      json/xml
     *
     * 怎么样使用springMvc返回Json/xml数据?
     *     springMVC需要jackson库才能进行json数据解析和构成,
     *     库名:
     *         jackson-databind
     *         jackson-core
     *
     *1.返回json数据:例子如下所示;
     *2.返回XML数据:例子如下;
     *
     * Restful:
     *     1.必须是map/实体类:key-value;
     *     2.必须要有反馈信息:errorCode(错误代码),msg(具体的错误信息);
     *     3.必须要精简,不要将没有意义的字段内容放到json中;
     *     4.文档必须要详细,数据接口文档,前段页面流程文档.
     */

//    方式一:
    /**
     * /infopage/用户名
     */
    @RequestMapping(value = "/infopage/{username}")
    public String infopage(@PathVariable("username")String name){
        System.out.println(name);
        return "welcome";
    }

    /**
     * /infopage/用户名/昵称
     */
    @RequestMapping(value = "/infopage/{username}/{nickname}")
    public String infopage2(@PathVariable("username")String name,
                            @PathVariable("nickname")String nickname){
        System.out.println(nickname);
        System.out.println(name);
        return "welcome";
    }

//    方式二:
    /**
     * /text?username=222&password=333
     * @return
     */
    @RequestMapping(value = "/params")
    public String paramPage(@RequestParam("username")String name,
                            @RequestParam("password")String password){
        System.out.println(name);
        System.out.println(password);
        return "text";
    }

//  Map集合接收
    @RequestMapping(value = "/content")
    public String contentPage(@RequestParam Map<String,String> params){
        System.out.println(params);

        return "text";
    }
//    实体类接收
    @RequestMapping(value = "/stuinfo")
    public String studentPage(Student students){
        System.out.println(students);
        return "text";
    }

//    接收post/get请求
    @RequestMapping(value = "/stuinfoo",method = RequestMethod.POST)
    public String studentPage2(Student students){
        System.out.println(students);
        return "text";
    }

//    返回json数据
    @ResponseBody
    @RequestMapping(value = "/studentinfo")
    public Student student(Student student){
//        Student student = new Student("yugege","666","man","yu","earshot","love");

        return student;
    }
//     返回xml数据
    @ResponseBody
    @RequestMapping(value = "/studentinfoo")
    public Student2 student2(){
        Student2 student2 = new Student2("yugege","666","man","yu","earshot","love");

        return student2;
    }
}

用实体类或者JSON的形式接受时对应的实体类:

package com.lan.bean;

/**
 * Created by yugege on 17/9/29.
 */

public class Student {
    private String username;
    private String password;

    private String gender;
    private String name;
    private String address;
    private String hobby;

用XML形式接受时对应的实体类(Student2):

@XmlRootElement("注意此处有注解")
public class Student2 {
    private String username;
    private String password;

    private String gender;
    private String name;
    private String address;
    private String hobby; 
}