springMVC(1)

  • web.xml
<filter>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  • jsp
<a href="hello/hiddenHttpMethodFilterGet/123">hello/hiddenHttpMethodFilterGet</a>
<form action="hello/hiddenHttpMethodFilterPost/233" method="post">
    <input type="submit" value="hiddenHttpMethodFilterPost">
</form>
<form action="hello/hiddenHttpMethodFilterPut/233" method="post">
    <input type="hidden" name="_method" value="PUT">
    <input type="submit" value="hiddenHttpMethodFilterPut">
</form>
<form action="hello/hiddenHttpMethodFilterDelete/233" method="post">
    <input type="hidden" name="_method" value="Delete">
    <input type="submit" value="hiddenHttpMethodFilterDelete">
</form>
<br>
<hr>
<br>
<form action="hello/testPojo" method="post">
    name <input name="name" value="zhangsan"> <br>
    age <input name="age" value="13"> <br>
    address <input name="address.provence" value="shandong">
    <input type="submit">
</form>
<br>
<br>
<br>
<hr>
<form action="hello/testModelAttribute" method="post">
    name <input name="name" value="zhangsan"> <br>
    age <input name="age" value="13"> <br>
    address <input name="address.provence" value="shandong">
    <input type="submit" value="testModelAttribute">
</form>
  • controller.java
/**
     * PathVariable 注解 映射URl绑定的占位符
     */
    @RequestMapping("/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") Integer id) {
        System.out.println(id);
        return SUCCESS;
    }

    /**
     * rest 风格
     * -/order/1 http GET : 得到id = 1 的order
     * -/order http post : 提交一个order
     * -/order/1 http PUT : 更新id = 1 的order
     * -/order/1 http DELETE : 删除id = 1 的order
     *
     * 如何发送PUT 和DELETE请求?
     * 1.配置HiddenHttpMethodFilter
     * 2.发送POST请求
     * 3.在发送POST请求时携带name = “_method” 的隐藏域,值为DELETE或PUT
     *
     * RequestParams
     * value 请求参数的name   defaultValue require(默认true)
     */


    /**
     * 几种方法  get post delete put
     * requestHeader 参数注解 请求头的相关参数,同requestParam 可获得请求头的参数
     * cookieValue 注解参数 同 requestParam 可获得cookie的值 属性同requestParam
     * (cookie)相关操作。
     */
    @RequestMapping(value = "/hiddenHttpMethodFilterGet/{id}", method = RequestMethod.GET)
    public String hiddenHttpMethodFilterGet(@PathVariable("id") Integer id,
                                            @RequestParam(value = "name", required = false) String name) {
        System.out.println("hiddenHttpMethodFilterGet : id = " + id + ", name = " + name);
        return SUCCESS;
    }

    @RequestMapping(value = "/hiddenHttpMethodFilterPost/{id}", method = RequestMethod.POST)
    public String hiddenHttpMethodFilterPost(@PathVariable("id") Integer id) {
        System.out.println("hiddenHttpMethodFilterPost : id = " + id);
        return SUCCESS;
    }

    @RequestMapping(value = "/hiddenHttpMethodFilterDelete/{id}", method = RequestMethod.DELETE)
    public String hiddenHttpMethodFilterDelete(@PathVariable("id") Integer id) {
        System.out.println("hiddenHttpMethodFilterDelete : id = " + id);
        return SUCCESS;
    }

    @RequestMapping(value = "/hiddenHttpMethodFilterPut/{id}", method = RequestMethod.PUT)
    public String hiddenHttpMethodFilterput(@PathVariable("id") Integer id) {
        System.out.println("hiddenHttpMethodFilterPut : id = " + id);
        return SUCCESS;
    }

    /**
     * 请求参数名和java类属性名进行自动匹配,自动为对象填充属性,支持级联属性。
     */
    @RequestMapping(value = "/testPojo")
    public String testPojo(User user) {
        System.out.println("user:" + user);
        return SUCCESS;
    }

    /**
     * 使用原生 servlet
     */
    @RequestMapping(value = "/testServlet")
    public void testServlet(HttpServletRequest request, HttpServletResponse response, Writer writter) throws IOException {
        System.out.println("request: " + request + " ,response :" + response);
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        writter.write("你好,这是writer");
    }

    /**
     * 处理模型数据
     * springmvc 提供以下几种途径输出模型数据
     * <p/>
     * -modelAndView
     * -Map 及 Model
     * -ModelAttribute
     * -SessionAttribute
     */
    /**
     * modelAndview
     */
    @RequestMapping("/modelAndview")
    public ModelAndView modelAndview() {
        ModelAndView modelAndView = new ModelAndView(SUCCESS);
        modelAndView.addObject("date", new Date());
        modelAndView.addObject("list", Arrays.asList("jerry","and","tom"));
        System.out.println("modelAndview");
        return modelAndView;
    }

    /**
     * map
     */
    @RequestMapping("/mapModel")
    public String mapModel(Map<String,Object> map){
        map.put("date",new Date());
        map.put("list",Arrays.asList("jerry","tom"));
        return SUCCESS;
    }
    /**
     * @sessionAttribute 除了可以通过属性名指定需要放到会话中的属性外(value属性)
     * 还可以通过模型属性的的对象类型指定哪些模型属性可以放到会话中(types属性)
     *
     * 注意:该注解只能放到类名上面,不能修饰方法
     */
    @RequestMapping("testSessionAtttribute")
    public String testSessionAtttribute(Map<String,Object> map){
//        map.put("sessionName","七宝");
        map.put("sessionName",Arrays.asList("张三","李四"));
        return SUCCESS;
    }

    /**
     * 由 @ModelAttribute 标记的方法,会在每个目标方法执行之前被mvc调用。
     * 运行流程 :
     * 1.从数据库取出对象,放入map中,键为user
     * 2.springMVC 从map中取出user对象,并把表单请求参数赋给User对象的对应属性。
     * 3.springMVC把上述对象传入目标的方法的参数
     *
     * 注意: 在 modelAttribute 注解修饰的方法中,放入到map中的键需要和目标方法入参类型的第一个字母小写的字符串一致。
     */
    @ModelAttribute
    public void getUser(Map<String,Object> map){
        User user = new User();
        user.setName("first");
        user.setAddress(new Address());
        user.getAddress().setCity("sandong!");
        System.out.println("数据库的user:"+user);
        map.put("user",user);
    }
    @RequestMapping(value = "testModelAttribute",method = RequestMethod.POST)
    public String testModelAttribute(User user){
        System.out.println("最终的user:"+user);
        return SUCCESS;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容