【后端项目】02 - 简要复习SpringMVC

1. Spring MVC

  1. 三层架构 : 表现层、业务层、数据访问层。
MVC
  1. Model:模型层 ;

  2. View: 视图层;

  3. Controller: 控制层。

2. Get到的小技巧:关于SpringBoot的自动配置

  1. get 到的小技巧关于 SpringBoot的自动配置,可以通过 Ctrl + shift + N 进行全局搜索 xxxAutoConfiguration。查看其 xxxxProperties.class
  1. 比如 Thymeleaf的自动配置:
通过Ctrl + shift + N 搜索Thymeleaf的全局自动配置类 ThymeleafAutoConfiguration
找到Thymeleaf的自动配置属性文件

3. 简单的请求响应案例理解 SpringMVC

@RequestMapping(path = "/http", method = RequestMethod.GET)
    public void sendHttp(HttpServletRequest request, HttpServletResponse response) {
        // 获取请求数据
        System.out.println(request.getMethod());
        System.out.println(request.getServletPath());
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String name = headerNames.nextElement();
            String headerValue = request.getHeader(name);
            System.out.println(name + " ===> " + headerValue);
        }
        // 获取请求地址发送的params query
        System.out.println(request.getParameter("code"));
        // 向浏览器响应数据
        response.setContentType("text/html;charset=utf-8");
        try (
                // 这是jdk 7 之后的写法如果实例有close方法最后会自动关闭进行释放
                PrintWriter writer = response.getWriter()
        ) {
            writer.write("<h2>恭喜恭喜!</h2>");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

4. GET 请求

4.1 处理GET请求中传递 query 的请求
需要使用的几个注解
  1. @ResponseBody : 当需要向页面返回一个字符串或者 JSON 数据的时候需要使用该注解修饰方法;

  2. @RequestParam : 处理请求中传递的query参数,name 指定前端 query 中传递的参数的名称;required 设置是否为必传递的参数;defaultValue 当前端为传递参数的时候设置一个默认值

  3. 下图为具体请求发起图例:


    get请求前端传递query的方式
  4. 实现代码:

   /**
     * path : students?current=1&limit=20
     *
     * @param current
     * @param limit
     * @return
     * @RequestParam 注解
     * 1. name 指定前端 query 中传递的参数的名称;
     * 2. required 是否为必传递的参数;
     * 3. defaultValue 当前端为传递参数的时候设置一个默认值
     */
    @RequestMapping(path = "/students", method = RequestMethod.GET)
    @ResponseBody
    public String getStudents(
            @RequestParam(name = "current", required = false, defaultValue = "1") Integer current,
            @RequestParam(name = "limit", required = false, defaultValue = "10") Integer limit) {
        System.out.println(current); // 20
        System.out.println(limit); // 100
        return "success";
    }
4.2 处理 GET 请求中传递 params 参数的请求
需要使用的几个注解
  1. @PathVariable: 用于指定路径中请求的参数。

  2. 请求图例:

处理 GET 请求中传递 params 参数的请求
    /**
     * path : /students/123
     *
     * @param id
     * @param param
     * @return
     */
    @RequestMapping(path = "/student/{id}/{param}", method = RequestMethod.GET)
    @ResponseBody
    public String getStudent(@PathVariable(name = "id") Integer id, @PathVariable(name = "param") String param) {
        System.out.println(id); // 10086
        System.out.println(param); // 王华
        return "student";
    }

5. POST 请求模拟添加一个学生信息

  1. 准备一个前端form表单,注意 : input 中的 name 属性对应的属性值需要和方法中的参数名称一致
<form method="post" action="/circle/alpha/student">
  <input type="text" name="name">
  <input type="text" name="age">
  <input type="submit" value="添加学生">
</form>
  1. 后端处理请求的代码:前端input中的name属性值需要与后端方法中的参数保持一致。
    /**
     * 发送一个Post请求进行学生信息的添加
     * Post 请求
     *
     * @param name input 中的 name 属性对应的属性值需要和方法中的参数名称一致
     * @param age
     * @return
     */
    @RequestMapping(path = "/student", method = RequestMethod.POST)
    @ResponseBody
    public String saveStudent(String name, String age) {
        System.out.println(name);
        System.out.println(age);
        return "success";
    }
  1. 访问 项目static文件夹下的页面:
    addStudent.html所在的文件夹
访问 项目`static`文件夹下的页面
发送一个请求进行添加信息

6. 响应 HTML 页面并携带数据

6.1 使用 ModelAndView 的方式
  1. mav.setViewName()设置的是将要返回并携带数据到的页面。该页面在 resources/templates/demo/teacher.html
 /**
     * 响应HTML的第一种方式 ModelAndView
     *
     * @return
     */
    @RequestMapping(path = "/teacher", method = RequestMethod.GET)
    public ModelAndView getTeacher() {
        ModelAndView mav = new ModelAndView();
        mav.addObject("name", "zhansgan");
        mav.addObject("age", 23);
        // 设置将数据返回的模板页面
        mav.setViewName("/demo/teacher");
        return mav;
    }
6.2 使用 Model 的方式
  1. 方法的返回值就是请求将要到达的页面:resources/templates/demo/employee.html
@RequestMapping(path = "/company", method = RequestMethod.GET)
    public String getEmpToTemplate(Model model) {
        model.addAttribute("name", "王小五");
        model.addAttribute("age", 23);
        // 返回模板页面
        return "/demo/employee";
    }

7. 响应 JSON 数据

    /**
     * Java对象 转换为 JSON字符串 => JS 对象
     *
     * @return
     */
    @RequestMapping(path = "/emp", method = RequestMethod.GET)
    @ResponseBody
    public Map<String, Object> getEmp() {
        Map<String, Object> map = new HashMap<>();
        map.put("name", "王五");
        map.put("age", 23);
        return map;
    }

    /**
     * 返回List集合形式的JSON
     *
     * @return
     */
    @RequestMapping(path = "/employees", method = RequestMethod.GET)
    @ResponseBody
    public List<Map<String, Object>> getEmployees() {
        List<Map<String, Object>> employees = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        map.put("name", "王五");
        map.put("age", 23);
        employees.add(map);

        map = new HashMap<>();
        map.put("name", "赵六");
        map.put("age", 26);
        employees.add(map);

        map = new HashMap<>();
        map.put("name", "田七");
        map.put("age", 27);
        employees.add(map);

        return employees;
    }

8. Cookie的简单使用

  1. Cookie是由服务器端创建发送到浏览器端,用于保存浏览器端的一小块数据。首先创建的Cookie会存在于响应体中,当发送请求的时候,请求体中会将Cookie携带到请求体中带到服务器。

  2. Cookie存在于浏览器端,安全性未知。

8.1 设置Cookie
  1. 在响应体中设置Cookie它会随着响应体来到浏览器的请求体中 :
响应体中的cookie信息
    /**
     * cookie的使用
     *
     * @param response
     * @return
     */
    @GetMapping("/cookie/set")
    @ResponseBody
    public String setCookie(HttpServletResponse response) {
        Cookie cookie = new Cookie("code", NewsUtils.generateUUID());
        // 设置cookie的生效范围
        cookie.setPath("/circle/alpha");
        // 设置cookie的有效时间
        cookie.setMaxAge(60 * 10);
        // 发送cookie到response中
        response.addCookie(cookie);
        return "set cookie";
    }
8.2 获取cookie信息
  1. 获取cookie信息可以通过一个注解@CookieValue
获取请求体中的Cookie信息
    /**
     * 获取cookie 可以通过一个注解 @CookieValue
     *
     * @return
     */
    @GetMapping("/cookie/get")
    @ResponseBody
    public String getCookie(@CookieValue("code") String code) {
        System.out.println(code);
        return "get cookie";
    }

9. Session的使用

  1. 服务器会创建一个 Session对象,当响应数据的时候,服务器会依赖于Cookie传递一个 sessionId回到浏览器。当再次请求服务器的时候请求体中的Cookie会将sessionId携带到服务器,服务器就会根据对应的sessionId去查找服务器端的session

  2. Session存在于服务器端安全,但是会给服务器端造成压力。

9.1 设置 Session
  1. 设置Session通过 HttpSession
响应体中会通过cookie携带sessionId
 /**
     * 设置Session
     *
     * @param session
     * @return
     */
    @GetMapping("/session/set")
    @ResponseBody
    public String setSession(HttpSession session) {
        session.setAttribute("username", "zhangsan");
        session.setAttribute("code", 123);
        return "set Session";
    }
  1. 获取Session:再次发送请求的的时候请求中会通过请求体中的cookiesessionId传回到服务器
再次发送请求的的时候请求中会通过请求体中的cookie将sessionId传回到服务器
 /**
     * 设置Session
     *
     * @param session
     * @return
     */
    @GetMapping("/session/get")
    @ResponseBody
    public String getSession(HttpSession session) {
        System.out.println(session.getAttribute("username"));
        System.out.println(session.getAttribute("code"));
        return "get Session";
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • # 传智播客vue 学习## 1. 什么是 Vue.js* Vue 开发手机 APP 需要借助于 Weex* Vu...
    再见天才阅读 9,070评论 0 6
  • client,page和screen的区别? clientX,clientY是触摸点相对于viewport视口x,...
    change_22fa阅读 5,692评论 1 1
  • 什么是Vue.js Vue.js是目前最火的一个前端框架,React是最流行的一个前端框架,(React除了开发网...
    EEEEsun阅读 3,931评论 0 1
  • flask使用操作指南1 1. flask介绍 Flask是一个基于Python实现的web开发的'微'框架 中文...
    文化银儿阅读 17,358评论 4 18
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 11,050评论 0 5

友情链接更多精彩内容