• SpringMvc(2)


    1.接受的参数为日期类型

    2.controller进行数据保存

    3. 静态资源的映射关系

    4.Springmvc 完成ajax功能

     

     

    (1)接收的参数为日期类型

      使用Controller注解的类在接收参数时如果参数为时间类型的参数时会报错:表示请求的参数有问题

      解决方法(1):在对应的Controller类中加入如下代码 表示:当接收的参数为日期类型时先经过该方法进行处理。适合接收单个日期参数

    @InitBinder
        public void initBinder(ServletRequestDataBinder binder){
            //只要网页中传来的数据格式为yyyy-MM-dd 就会转化为Date类型
            binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),//模式可以更改
                    true));
        }

     解决方案(2):当接收的参数比较多时(接收的是一个对象)

    @RequestMapping("/list.do")
        public String list(User user) {
            System.out.println(user);
            return "index";
        }

    参数有上图几个,这时为了避免报错400,我们可以在该实体类的Date属性中加入@DateTimeFormat(pattern="yyyy-MM-dd")注解 适合用于实体类中

     (2)controller 进行数据保存

       2.1 数据保存到request作用域的方式.   

        1. 使用ModelAndView,那么该方法的返回类型必须是ModelAndView

          

    package com.zhiyou100.ydb.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.SessionAttributes;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.zhiyou100.ydb.bean.User;
    
    @Controller
    @RequestMapping("/user")
    @SessionAttributes(names={"name"})
    public class UserController {
    //    使用ModelAndView 将数据保存到request
        @RequestMapping("/mod.do")
        public ModelAndView Mod() {
            ModelAndView mv =new ModelAndView("index");
            mv.addObject("name", "张三");
            return mv;
        }
    }

    测试:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    ${requestScope.name }
    <img src="/springmvc-03/img/1.jpeg" height="700px">
    </body>
    </html>

        2. 使用Model, 方法的返回值还是字符串类型。

    package com.zhiyou100.ydb.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.SessionAttributes;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.zhiyou100.ydb.bean.User;
    
    @Controller
    @RequestMapping("/user")
    @SessionAttributes(names={"name"})
    public class UserController {
           // 使用Model 将数据保存到request
          @RequestMapping("/mode.do")
           public String Mode(Model mdoel) {
                 mdoel.addAttribute("name", "李四");
    return "index"; } }

     测试

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    ${requestScope.name }
    <img src="/springmvc-03/img/1.jpeg" height="700px">
    </body>
    </html>

        3. 使用Map.方法的返回值还是字符串类型。

    package com.zhiyou100.ydb.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.SessionAttributes;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.zhiyou100.ydb.bean.User;
    
    @Controller
    @RequestMapping("/user")
    @SessionAttributes(names={"name"})
    public class UserController {
         //    使用Map 将数据保存到request
        @RequestMapping("map.do")
        public String Setmap(Map<String, Object> map) {
            map.put("name", "王五");
            return "index";
        }
    }

    测试

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    ${requestScope.name }
    <img src="/springmvc-03/img/1.jpeg" height="700px">
    </body>
    </html>

      4. 原始的HttpServletRequest对象保存

    package com.zhiyou100.ydb.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.SessionAttributes;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.zhiyou100.ydb.bean.User;
    
    @Controller
    @RequestMapping("/user")
    @SessionAttributes(names={"name"})
    public class UserController {
       //    使用原始 HttpServletRequest 将数据保存到request
        @RequestMapping("req.do")
        public String Setmap(HttpServletRequest request) {
            request.setAttribute("name", "刘六");
            return "index";
        }
    }

    测试:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    ${requestScope.name }
    <img src="/springmvc-03/img/1.jpeg" height="700px">
    </body>
    </html>

      2.2数据保存到session作用域的方式.

    1. 使用原始的HttpSession保存。
    package com.zhiyou100.ydb.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.SessionAttributes;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.zhiyou100.ydb.bean.User;
    
    @Controller
    @RequestMapping("/user")
    @SessionAttributes(names={"name"})
    public class UserController {
     //    使用原始 HttpSession 将数据保存到Session
        @RequestMapping("ses.do")
        public String Setmap(HttpSession session) {
            session.setAttribute("name", "赵七");
            return "index";
        }
    }

    测试:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    ${sessionScope.name }
    <img src="/springmvc-03/img/1.jpeg" height="700px">
    </body>
    </html>

       2.使用注解@SessionAttributes(name={key1,key2})

    package com.zhiyou100.ydb.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.SessionAttributes;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.zhiyou100.ydb.bean.User;
    
    @Controller
    @RequestMapping("/user")
    @SessionAttributes(names={"name"})//键名叫:name的保存的作用域为session
    public class UserController {
    //    使用注解 将数据保存到request
        @RequestMapping("/sess.do")
        public String Mode(Model mdoel) {
            mdoel.addAttribute("name", "李四");
            return "index";
        }
    }

    测试:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    ${sessionScope.name }
    <img src="/springmvc-03/img/1.jpeg" height="700px">
    </body>
    </html>

       2.3保存到application中

    package com.zhiyou100.ydb.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.SessionAttributes;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.zhiyou100.ydb.bean.User;
    
    @Controller
    @RequestMapping("/user")
    @SessionAttributes(names={"name"})
    public class UserController {
           // 使用Model 将数据保存到request
          @RequestMapping("/mode.do")
           public String Mode(Model mdoel,HttpSession session) {
                 mdoel.addAttribute("name", "李四");
            session.getServletContext().setAttribute("name","我在application中")
                    return "index";
          }
    }

    测试:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    ${applicationScope.name }
    <img src="/springmvc-03/img/1.jpeg" height="700px">
    </body>
    </html>

    因为RequestMapping注解下的方法 返回的默认为请求转发 如何让其变成重定向呢?

     解决方案 :加入redirect:

     (3)静态资源的映射关系

    当我们在jsp文件中引入img 图片,在用浏览器运行会出现找不到图片现象

    1.首先配置任何请求都要经过DispatcherServlet

     

     2.这时就需要使用静态资源映射 在springmvc的配置文件中添加

      (4)Springmvc完成ajax功能

          1.加入Jackson的jar包 和 jquery jar包

          

          2.引入js

     

          3.在响应的方法上加 @ResponseBody : 表示把Java对象转化为json对象

    @RequestMapping("Ajax1")
        @ResponseBody
        public String ajax1(String name) {
            System.out.println(name);
            return "你好";
        }

          4.编写ajax方法

          5.方法的返回类型可以是字符串 ,对象 , 集合

    package com.zhiyou100.ydb.controller;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.zhiyou100.ydb.bean.User;
    
    @Controller
    @RequestMapping(value="ajax", produces = "text/plain;charset=UTF-8")
    public class AjaxController {
        
        @RequestMapping("Ajax1")
        @ResponseBody
        public String ajax1(String name) {
            System.out.println(name);
            return "你好";
        }
        @RequestMapping("Ajax2")
        @ResponseBody
        public User ajax2(String name) {
            User user = new User("张三",10);
            return user;
        }
        @RequestMapping("Ajax3")
        @ResponseBody
        public List<User> ajax3(String name) {
            User user1 = new User("张三",10);
            User user2 = new User("李四",10);
            User user3 = new User("王五",10);
            User user4 = new User("刘六",10);
            User user5 = new User("赵七",10);
            List<User> list = new ArrayList<>();
            list.add(user1);
            list.add(user2);
            list.add(user3);
            list.add(user4);
            list.add(user5);
            return list;
        }
        
        
    }

    (注意:)如果ajax返回的为字符串,那么就会出现乱码

        因为在spring-webmvc 源码中返回的是字符串默认的格式是ISO--1

     解决方案(1):在springmvc 映射文件中加入

     解决方案(2):在RequestMapping的属性中添加返回数据类型属性  produces = "text/plain;charset=UTF-8" 

     

  • 相关阅读:
    一个程序员的职业规划
    基于Andoird 4.2.2的Account Manager源代码分析学习:创建选定类型的系统帐号
    [置顶] C++学习书单
    js快速分享代码
    The declared package does not match the expected package
    IBM Rational Appscan Part 1
    IBM Rational Appscan: Part 2 ---reference
    阅读redis源代码的一些体会
    18 Command Line Tools to Monitor Linux Performance
    代码规范
  • 原文地址:https://www.cnblogs.com/Kuriyama-Mirai/p/11455767.html
Copyright © 2020-2023  润新知