注解:SpringMVC中表单参数的限定和获取表单参数以及获取request,response,session+方法返回值讲解

后台对表单的参数限定

    /*
     * params表示对表单参数的一个限定。
     * 这里的username表示表单参数里面必须有username这个参数。否则无法通过url访问该方法。
     *      例如:"http://localhost:8080/SpringMVC/showLang01.action?username=FireLang"
     *          - 当然也可以这么写"http://localhost:8080/SpringMVC/showLang01.action?username="表示后台获取到的数据为空字符串。
     */
    @RequestMapping(value="/showLang01.action",params={"username"})
    public String showLang01() throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        return "/showItemsListByAnnotation.action";
    }

另外还可以这么写:

    /*
     * params表示对表单参数的一个限定。
     *      如果在参数名前面加上一个"!",这样就表示如果表单传递过来有这个参数,那么无法通过url访问到该方法。
     */
    @RequestMapping(value="/showLang01.action",params={"!username"})
    public String showLang01() throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        return "/showItemsListByAnnotation.action";
    }
    /*
     * params表示对表单参数的一个限定。
     *      这样就表示传递过来的username参数值必须为FireLang,否则无法通过url访问到该方法。
     */
    @RequestMapping(value="/showLang01.action",params={"username=FireLang"})
    public String showLang01() throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        return "/showItemsListByAnnotation.action";
    }
    /*
     * params表示对表单参数的一个限定。
     *      这样就表示传递过来的username参数值不能为FireLang,否则无法通过url访问到该方法。
     */
    @RequestMapping(value="/showLang01.action",params={"username!=FireLang"})
    public String showLang01() throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        return "/showItemsListByAnnotation.action";
    }

获取表单参数

  • 获取表单数据通过变量名封装!!!
    /*
     * 获取表单数据!!
     */
    @RequestMapping(value="/showLang04.action",params={"username!=FireLang"})
    public String showLang04(String userLevel) throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        System.out.println(userLevel);
        return "/showItemsListByAnnotation.action";
    }

通过链接:http://localhost:8080/SpringMVC/showLang04.action?userLevel=vip

    /*
     * 如果方法参数名称和表单数据名称不匹配时,可以通过
     * 其中:如果只有一个参数,value可以省略。
     * 规定:在写了注解调整参数名的情况下,必须要传入该参数,否则会报错!!!
     */
    @RequestMapping(value="/showLang05.action",params={"username!=FireLang"})
    public String showLang05(@RequestParam(value="level")String userLevel) throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        System.out.println(userLevel);
        return "/showItemsListByAnnotation.action";
    }

访问链接:http://localhost:8080/SpringMVC/showLang05.action?level=vip

如果两个参数都写了,以注解参数为准:http://localhost:8080/SpringMVC/showLang05.action?level=vip&userLevel=lang

    /*
     * 如果我们封装的数据太多,我们需要把需要的数据封装到实体对象当中。
     * 
     * 注意:
     *      我们的实体类必须写set方法!!!否则不能够把数据封装进去!!!
     */
    @RequestMapping(value="/showLang06.action",params={"username!=FireLang"})
    public String showLang06(User user) throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        System.out.println(user);
        return "/showItemsListByAnnotation.action";
    }

访问链接:http://localhost:8080/SpringMVC/showLang06.action?name=FireLang&password=123

    /*
     * 如果我们封装的数据太多,我们需要把需要的数据封装到实体对象当中。
     * 
     * 注意:
     *      我们的实体类必须写set方法!!!否则不能够把数据封装进去!!!
     * 
     * 当把数据封装到user后,我们依然可以单独获取某个数据!!
     */
    @RequestMapping(value="/showLang07.action",params={"username!=FireLang"})
    public String showLang07(User user,String name) throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        System.out.println(user);
        System.out.println("["+name+"]"); //获取name
        return "/showItemsListByAnnotation.action";
    }

访问链接:http://localhost:8080/SpringMVC/showLang07.action?name=FireLang&password=123

    /*
     * 我们也可以获取Model对象
     */
    @RequestMapping(value="/showLang10.action",params={"username!=FireLang"})
    public void showLang10(Model model) throws Exception{

        /*
         * 当然可以向model中添加数据!!!来让页面显示,model数据最终会放进request中!!!
         */
        model.addAttribute("lang", "哈哈哈");
        System.out.println(model);

    }

获取HttpServletRequest,HttpServletResponse,HttpServletSession:

  • 通过类型获取!!!
  • 注意和上面获取表单数据区分开!!!

获取HttpServletRequest,HttpServletResponse

    /*
     * 获取request和response
     * 
     *      结论:从代码中可以看出,我们获取HttpServletRequest和HttpServletResponse时是按照类型获取的。因为在当前请求中,可以肯定,HttpServletRequest只能有一个,由服务器产生。
     */
    @RequestMapping(value="/showLang01.action",params={"username!=FireLang"})
    public String showLang01(HttpServletRequest xxx,HttpServletResponse yyy,HttpServletRequest request,HttpServletResponse response) throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        System.out.println(xxx);
        System.out.println(yyy);
        System.out.println(request);
        System.out.println(response);
        return "/showItemsListByAnnotation.action";
    }

获取HttpServletSession

    /*
     * 获取request和response
     *      同样,获取HttpSession的时候也和获取HttpServletRequest,HttpServletResponse是一样的。
     */
    @RequestMapping(value="/showLang02.action",params={"username!=FireLang"})
    public String showLang02(HttpSession session,HttpSession xxxx) throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        System.out.println(session);
        System.out.println(xxxx);
        return "/showItemsListByAnnotation.action";
    }

但是有个特例:我们不能够获取ServletContext(application)

原因是:ServletContext在Tomcat中对象只有一个,不能够实例化多个!!
反而request,response,session等都可以实例化多个!!!

    /*
     * 这会报错!!!
     * 所以我们只能够通过request获取ServletContext。
     */
    @RequestMapping(value="/showLang03.action",params={"username!=FireLang"})
    public String showLang03(ServletContext application) throws Exception{
        /*
         * 返回一个视图的路径或者另外一个url路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View。
         */
        System.out.println(application);
        return "/showItemsListByAnnotation.action";
    }

方法返回值

    /*
     * 如果我们已经在代码中把页面输出处理好了,我们可以把返回值设置为null
     */
    @RequestMapping(value="/showLang08.action",params={"username!=FireLang"})
    public void showLang08(HttpServletResponse response) throws Exception{

        response.getWriter().print("这是一个页面!!!");
    }
    /*
     * 我们也可以只返回一个View(视图,由视图解析器可以解析创建一个视图)而不返回 ModelAndView
     * 
     * 其中可以是JstlView也可以是RedirectView等等。
     */
    @RequestMapping(value="/showLang09.action",params={"username!=FireLang"})
    public View showLang09() throws Exception{

        JstlView view=new JstlView();
        view.setUrl("/WEB-INF/content/langx.jsp");
        return view;
    }
    /*
     * 我们也可以只返回一个View(视图,由视图解析器可以解析创建一个视图)而不返回 ModelAndView
     * 
     * 其中可以是JstlView也可以是RedirectView等等。
     */
    @RequestMapping(value="/showLang09.action",params={"username!=FireLang"})
    public View showLang09() throws Exception{

        RedirectView view=new RedirectView();
        view.setUrl("http://www.baidu.com");
        return view;
    }
}
    /*
     * 但是最终返回的对象不能够是自定义类型!!!比如User否则会报错。
     */
    @RequestMapping(value="/showLang11.action",params={"username!=FireLang"})
    public Object showLang11(Model model) throws Exception{

        RedirectView view=new RedirectView();
        view.setUrl("http://www.baidu.com");
        return view;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值