Spring MVC HTTP请求地址映射

package com.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

/**
 * <p>前期准备:了解Http请求报文结构与内容。</p>
 * <p>测试Http请求地址映射。</p>
 * author:liaody
 */
@Controller
public class ViewController {

    /**
     * <p>简单的测试Mvc框架是否搭建完成</p>
     *
     * @return 视图名称
     */
    @RequestMapping("/view")
    public String view() {
        System.out.println("你已通过springMVC进入controller方法。。。。");
        return "index";
    }

    /**
     * <p>通过URL限定:*。</p>
     * <p>示例:
     * value="/user/*\/createUser,匹配user/createUser、user/aaa/createUser、user/bb/createUser。*代表零个或多个字符。
     * </p>
     * <p>
     * 访问的url:http://localhost:8080/user/createUser、url:http://localhost:8080/user/aaa/createUser、url:http://localhost:8080/user/bb/createUser
     * </p>
     *
     * @return
     */
    @RequestMapping(value = "/user/*/createUser")
    public ModelAndView paramUrl() {
        ModelAndView mv = new ModelAndView();
        System.out.println("调用paramUrl方法");
        mv.addObject("message", "user/*/createUser匹配:url:http://localhost:8080/user/createUser");
        mv.addObject("message2", "user/*/createUser匹配:url:http://localhost:8080/user/aaa/createUser");
        mv.addObject("message3", "user/*/createUser匹配:url:http://localhost:8080/user/bb/createUser");
        mv.setViewName("/success");
        return mv;
    }

    /**
     * <p>通过URL限定:**。</p>
     * <p>示例:
     * value="/user/**\/createUser,匹配user/createUser、user/aa/bb/createUser、user/aa/bb/cc/createUser。**代表可以有多个路径。
     * </p>
     * <p>
     * 访问的url:http://localhost:8080/user/createUser、http://localhost:8080/user/aa/bb/createUser、http://localhost:8080/user/aa/bb/cc/createUser
     * </p>
     *
     * @return
     */
    @RequestMapping(value = "user/**/createUser")
    public ModelAndView paramUrl2() {
        ModelAndView mv = new ModelAndView();
        System.out.println("调用paramUrl2方法");
        mv.addObject("message", "user/**/createUser匹配:url:http://localhost:8080/user/createUser");
        mv.addObject("message2", "user/**/createUser匹配:url:http://localhost:8080/user/aa/bb/createUser");
        mv.addObject("message3", "user/**/createUser匹配:url:http://localhost:8080/user/aa/bb/cc/createUser");
        mv.setViewName("/success");
        return mv;
    }

    /**
     * <p>通过URL限定:{}占位符。</p>
     * <p>示例:
     * value="/user/**\/{userId},匹配/user/aa/123、/user/aa/bb/abc、/user/aa/bb/cc/ddd
     * </p>
     * <p>
     * 访问的url:url:http://localhost:8080/user/aa/123、http://localhost:8080/user/aa/bb/abc、http://localhost:8080/user/aa/bb/cc/ddd
     * </p>
     *
     * @return
     */
    @RequestMapping(value = "user/**/{userId}")
    public ModelAndView paramUrl3(@PathVariable("userId") String userId) {
        ModelAndView mv = new ModelAndView();
        System.out.println("调用paramUrl3方法");
        System.out.println("使用@PathVariable注解绑定参数userId:" + userId);
        mv.addObject("message", "user/**/{userId}匹配:url:http://localhost:8080/user/aa/123");
        mv.addObject("message2", "user/**/{userId}匹配:url:http://localhost:8080/user/aa/bb/abc");
        mv.addObject("message3", "user/**/{userId}匹配:url:http://localhost:8080/user/aa/bb/cc/ddd");
        mv.setViewName("/success");
        return mv;
    }

    /**
     * <p>通过URL限定:?。</p>
     * <p>示例:
     * value="/user/createUser??,匹配user/createUseraa、user/createUserbb。?代表0个或一个字符。
     * </p>
     * <p>
     * 访问的url:http://localhost:8080/user/createUseraa、http://localhost:8080/user/createUserbb
     * </p>
     *
     * @return
     */
    @RequestMapping(value = "/user/createUser??")
    public ModelAndView paramUrl4() {
        ModelAndView mv = new ModelAndView();
        System.out.println("调用paramUrl4方法");
        mv.addObject("message", "user/createUser??匹配:url:http://localhost:8080/user/createUseraa");
        mv.addObject("message2", "user/createUser??匹配:url:http://localhost:8080/user/createUserbb");
        mv.setViewName("/success");
        return mv;
    }

    /**
     * <p>通过URL限定:{XXX}绑定XXX参数值。</p>
     * <p>示例:
     * value="/owners/{ownerId},匹配owners/123、owners/abc
     * </p>
     * <p>
     * 访问的url:http://localhost:8080/owners/123、http://localhost:8080/owners/abc
     * </p>
     * <p>
     * 如果@PathVariable不指定参数名,只有在编译的时候打开窗debug开关才有效,建议不要做么做。
     * <p>
     * </p>
     *
     * @return
     */
    @RequestMapping(value = "/owners/{ownerId}")
    public ModelAndView paramUrl5(@PathVariable("ownerId") String ownerId) {
        ModelAndView mv = new ModelAndView();
        System.out.println("调用paramUrl5方法");
        mv.addObject("message", "/owners/{ownerId}匹配:url:http://localhost:8080/owners/123");
        mv.addObject("message2", "user/createUser??匹配:url:http://localhost:8080/owners/abc");
        mv.addObject("message3", "被绑定的参数" + ownerId);
        mv.setViewName("/success");
        return mv;
    }

    /**
     * <p>通过请求方式进行限定,一般只会用到GET和POST方式,PUT、DELETE不常用</p>
     * <p>通过请求方法限定:post</p>
     * <p>
     * 访问:使用post方式访问http://localhost:8080//method/post
     * </p>
     *
     * @return
     */
    @RequestMapping(value = "/method/post", method = RequestMethod.POST)
    public ModelAndView methodPost() {
        ModelAndView mv = new ModelAndView();
        System.out.println("调用的是post方法");
        mv.setViewName("/success");
        mv.addObject("message", "成功调用的是post方法");
        return mv;
    }

    /**
     * <p>通过请求方法限定:get</p>
     * <p>value值故意设置与上面的一样value="/method/post"</p>
     * <p>
     * 访问:使用get方式访问http://localhost:8080//method/post
     *
     * @return
     */
    @RequestMapping(value = "/method/post", method = RequestMethod.GET)
    public ModelAndView methodGet() {
        ModelAndView mv = new ModelAndView();
        System.out.println("调用的是Get方法");
        mv.setViewName("/success");
        mv.addObject("message", "成功调用后get方法!");
        return mv;
    }

    /**
     * <p>通过请求参数限定</p>
     * <p>
     *     "param1":表示请求必须包含名为param1的请求参数。
     *     "!param1":表示请求不能包含名为param1的请求参数。
     *     "!param1=value1":表示请求包含名为param1的请求参数且其值不能够为value1。
     *      {"param1!=value11","param2"}:表示请求包含名为param1和param2的请求参数且param1的值不能够为value1。
     * </p>
     * <p>访问的url:http://localhost:8080/param1/yuyu?userName=liaody&userPassword=123</p>
     *
     * @param validationType
     * @param userName
     * @param userPassword
     * @return
     */
    @RequestMapping(value = "/param1/{validation}", params = {"userName!=administrator", "userPassword"})
    public ModelAndView param1(@PathVariable("validation") String validationType,
                               @RequestParam("userName") String userName,
                               @RequestParam("userPassword") String userPassword) {

        System.out.println("绑定参数设置{}:" + validationType);
        System.out.println("绑定参数userName:" + userName);
        System.out.println("绑定参数设置userPassword:" + userPassword);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("/success");
        return mv;
    }

    /**
     * <p>通过请求头参数限定</p>
     * <p>访问的url:http://localhost:8080/param1/yuyu?userName=liaody&userPassword=123</p>
     *
     * @param userId
     * @return
     */
    @RequestMapping(value = "/head",headers="content-type=text/*")
    public ModelAndView head(@RequestParam("userId") String userId) {

        System.out.println("绑定参数设置{}:" + userId);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("/success");
        mv.addObject("message", "通过请求头参数限定!");
        mv.addObject("message2", "绑定参数userId!"+userId);
        mv.setViewName("/success");
        return mv;
    }

}

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
模拟登录成功页面<br>
${message }<br>
${message2 }<br>
${message3 }
</body>
</html>
时间: 2024-08-08 10:40:53

Spring MVC HTTP请求地址映射的相关文章

Spring MVC http请求地址映射(三)

Spring MVC框架通过扫描将带有@Controller的类中的@RequestMapping的方法进行映射,然后调用映射的方法处理请求,这个分发过程默认是由DispaterServlet处理的. http请求映射原理 Spring MVC进行映射的依据 通过URL限定:URL表达式 Spring MVC的地址映射支持标准的URL,同时默认支持是ant风格的URL.列如: URL 说明 /account/*/create 匹配/account/aaa/create./account/bbb/

spring mvc get请求也可以接受DTO对象

spring mvc get请求也可以接受DTO对象,比如:url上面你还是将参数&符号连接起来,并自动封装进一个DTO对象里. 只有@RequestBody注解spring mvc才会从http body里去拿数据. 默认不填注解的参数都会从url上面去拿. @ApiOperation(value = "查询卡券详情接口", consumes = "application/x-www-form-urlencoded") @RequestMapping(va

研究 Spring MVC 将请求分发到 Spring 依赖注入的类实例

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 一上午时间,碰了 N 个钉子,不断地把钉子拨掉,记录一下选择的工具和方法: 1.首先 Spring Mvc 框架的下载,那么有三个包是必不可少的:

Spring Mvc——处理请求过程

1.概述 下面这张图是Spring mvc处理请求的整体流程,其中Front controller指的是DispatcherServlet类. 1.客户端所有的请求都会发送到DispatcherServlet,由DispacherServlet处理. 2.DispacherServlet将请求分发到不同的Controller类,由Controller类去处理对应的请求. 3.Controller类将对应的请求处理完后,将处理后对应的model或者视图信息给将DispatcherServlet类.

Spring MVC HTTP请求数据绑定

package com.springmvc.controller; import com.springmvc.model.UserInfo; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.stereotype.Controller; import org.springframework.uti

spring mvc get请求中文乱码问题

使用Spring MVC进行get请求时发现get请求带上中文参数,后台收到的是乱码,即使加了encoding filter也没用. 原因是,encoding filter 是针对post请求的,tomcat对get请求的处理方式不一样,需要修改tomcat 的server.xml配置文件 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirec

跟踪spring MVC的请求

当我们点击一个超链接时,spring MVC在后台都做了些什么呢,今天就来看看后台都干了啥 首先需要在web.xml里配置一下: 上面的配置就是spring的核心控制器,所有根路径下的请求都会被拦截进行处理.当我们点击一个超链接时,首先会被这个过滤器拦截到,然后就是去查找哪些类被配置为Controller控制器了. 上面就是一个注解方式的定义控制器的.这个控制器会处理根路径下的所有匹配的请求,哪些是相匹配的请求呢.就以你访问网站首页为例 这个initIndex方法会处理{"/", &q

spring mvc ajax请求

jar包中增加 jackson-annotations-2.5.0.jar jackson-core-2.5.0.jar jackson-databind-2.5.0.jar springmvx.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="

Spring MVC 中请求返回之后的页面没法加载css、js等静态文件

1.是否被拦截,这个在Web.xml配置中servlet拦截是“/”,如果是则 a.使用spring MVC 的静态资源文件 <!-- 静态文件访问,主要是针对DispatcherServlet的拦截是/的--> <mvc:annotation-driven /> <mvc:resources location="/image/" mapping="/image/**"/> <mvc:resources location=&