• Spring MVC参数处理



    Spring MVC通过分析处理处理方法签名,将HTTP请求信息自动绑定到处理方法的参数中。

    @RequestMapping : 获取前台传递的参数

        @RequestMapping("/p1")
        public String param1(String uname,String pwd){
            //接收参数
            //调用业务层
            //调用Dao。。。。
            if("admin".equals(uname)&&"123".equals(pwd)){
                //登录成功
            }else{
                //登录失败
            }
            System.out.println("uname="+uname+",pwd="+pwd);
            return "hello";
        }

    @RequestHeader : 将请求头中的属性值绑定到处理方法的参数中。

    @RequestMapping("/p4")
        public String param4(@RequestHeader("Cookie")String cookie){
            System.out.println("cookie:"+cookie);
            return "hello";
        }
    

    @CookieValue: 将请求中的Cookie的值绑定到处理方法的参数中。

    @RequestMapping("/p5")
        public String param5(@CookieValue("JSESSIONID")String sessionid){
            return "hello";
        }

    使用POJO,Spring MVC 会将请求参数和POJO中的属性进行匹配,自动填充属性,并支持级联。

    @RequestMapping("/p6")
        public String param6(User user){
            //new User
            //set+Uname
            System.out.println(user);
            return "hello";
        }

    使用Servlet API作为参数

    HttpServletRequest

    @RequestMapping("/s1")
        public String s1(HttpServletRequest request){
            System.out.println(request.getParameter("uname"));
            System.out.println(request.getParameter("pwd"));
            request.setAttribute("sex", "man");
            return "hello2";
        }

    HttpServletResponse

    /**
         * 方法返回值可以是void
         * 如果没有HttpServletResponse,返回值一定不能是void
         */
        @RequestMapping("/s2")
        public void s2(HttpServletResponse response) throws IOException{
            /*response.sendRedirect("../WEB-INF/pages/hello2.jsp");*/
            response.sendRedirect("../test.jsp");
        }
    
    
    @RequestMapping("/s3")
        public void s3(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
            request.getRequestDispatcher("../test.jsp").forward(request, response);
        }
    

    HttpSession

    /**
         * 把User保存在session中
         * @param session
         */
        @RequestMapping("/s4")
        public String s4(HttpSession session,User user){
            session.setAttribute("user", user);
            return "hello3";
        }
    • @SessionAttributes(“user”)
    • @SessionAttributes:
    • 可以把模型数据当中对应的对象存储到session中
    • session.setAttr(“user”,request.getAttr(“user”))
    public class SessionController {
    
        @RequestMapping("/se1")
        public String sess1(User user,Notice notice) {
            return "hello6";
        }
    
        /**
         * 如果参数列表当中有两个类型相同的参数,只会在模型数据中存储一个
         * 使用@ModelAttribute可以给两个类型相同的对象做区分,
         * 让他们都可以存储在模型数据中
         * 如果遇到有两个类型相同并且都需要存储到session中时,
         * 可以使用model去解决问题
         */
        @RequestMapping("/se2")
        public String sess2(User user,User user2,Model model) {
            model.addAttribute("user", user);
            model.addAttribute("user2", user2);
            return "hello6";
        }
    
    }

    使用流作为参数

    InputStream

    OutputStream

    @RequestMapping("/s5")
        public void s5(OutputStream os) throws IOException{
            os.write(new String("hcfgyhgghyvf").getBytes());
        }

    Reader

    Writer

        @RequestMapping("/s6")
        public void s6(PrintWriter writer) {
            writer.print("asdfghjkl");
        }

    总结:

    • request,response,session 可以直接使用,不需要创建这个对象的类型
    • 如果涉及到页面跳转,尽量不要使用request,response
    • 如果使用了request和response进行页面跳转,它就不再使用视图解析器去匹配页面了(需要根据当前控制器的路径去匹配)
    • 方法带返回值:String要在控制器当中做页面的跳转。(普通的控制器)
    • 方法不带返回值:
    • 1.通过request(转发)或者response(重定向)这里两个对象去做跳转
    • 2.通过OutputStream或Writer直接在也页面显示内容。(前台是Ajax访问获取数据时)
    • 如果返回值是void可以搭配ajax使用(ajax拿到的就是当前控制器的信息)
    • 如果返回值不是void,必然要跳转页面。
  • 相关阅读:
    Go -- 调用C/C++
    fatal error: sys/cdefs.h: No such file or directory
    ubuntu下安装go语言;sublime+gocode搭建;go的卸载和环境变量配个人.bashrc
    sqlite多表关联update
    sqlite insert select 联合使用
    sqlite3 支持的关联查询
    iOS -- 拨打电话
    lapis 项目添加prometheus 监控
    lapis 1.7.0 更好的openresty 版本兼容以及安全数据库支持
    skipper backend 负载均衡配置
  • 原文地址:https://www.cnblogs.com/aixing/p/13327654.html
Copyright © 2020-2023  润新知