Dans la série (Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction), nous avons montré une simple requête get et renvoyé une simple page helloworld. Dans cet article, nous allons apprendre comment configurer les règles de mappage d'URL d'une action.
Dans la série (Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction), nous avons configuré un @RequestMapping(value = "/helloworld") sur HelloWorldController, ce qui signifie que toutes les demandes d'action adressées au contrôleur doivent commencer par "/helloworld".
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction. Mappage du chemin d'URL
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction. Configurez plusieurs mappages d'URL pour une action :
Nous avons mis @ dans la méthode d'action index() de HelloWorldController dans l'article précédent RequestMapping. est remplacé par @RequestMapping(value={"/index", "/hello"}, method = {RequestMethod.GET}), ce qui signifie que l'action est configurée avec deux mappages de /index et /hello. Exécutez le test comme suit :
Vous pouvez voir que la requête /helloworld/hello correspond également avec succès.
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction. Mappage des paramètres de requête d'URL :
Ceci est souvent utilisé lors d'une requête, par exemple, nous obtenons un certain enregistrement basé sur un identifiant ou un numéro.
Ajoutez une action getDetail dans HelloWorldController, le code est le suivant :
@RequestMapping(value="/detail/{id}", method = {RequestMethod.GET})public ModelAndView getDetail(@PathVariable(value="id") Integer id){ ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("id", id); modelAndView.setViewName("detail"); return modelAndView; }
where value="/detail/{id}", dans { id} est un espace réservé indiquant que la demande d'URL peut être mappée vers /detail/xxxx, tel que : /detail/Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à lactionSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à lactionSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction, etc.
Le paramètre @PathVariable(value="id") de la méthode Integer id est utilisé pour mapper la variable correspondant à l'espace réservé dans l'URL au paramètre id La valeur de value dans @PathVariable(value=. "id") Doit être cohérent avec la valeur entre les accolades /{id}.
Ajoutez la vue detail.jsp dans les vues pour afficher la valeur d'identification obtenue. Le contenu de la vue est le suivant :
<%@ page language="java" contentType="text/html; charset=UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction" pageEncoding="UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction"%><!DOCTYPE html PUBLIC "-//WSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à lactionC//DTD HTML Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.org/TR/htmlSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction"><title>Insert title here</title></head><body> ${id}</body></html>
Exécutez le test, Demander l'adresse URLhttp://localhost:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/ detail/Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à lactionSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à lactionSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction, Les résultats sont les suivants :
Vous pouvez voir que l'identifiant que nous avons demandé a été correctement affiché.
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.Mappage de caractères génériques d'URL :
Nous pouvons également configurer le mappage d'URL via des caractères génériques. Les caractères génériques incluent "?" et "*". Parmi eux, "?" signifie Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction caractère, "*" signifie correspondre à plusieurs caractères et "**" signifie correspondre à 0 chemin ou plus.
Par exemple :
"/helloworld/index?" peut correspondre à "/helloworld/indexA", "/helloworld/indexB", mais ne peut pas correspondre à "/helloworld/index" ni à " / helloworld/indexAA";
"/helloworld/index*" peut correspondre à "/helloworld/index", "/helloworld/indexA", "/helloworld/indexAA" mais pas à "/helloworld/index/" A ";
"/helloworld/index/*" peut correspondre à "/helloworld/index/", "/helloworld/index/A", "/helloworld/index/AA", "/helloworld/index" /AB" mais ne peut pas correspondre à "/helloworld/index", "/helloworld/index/A/B" ;
"/helloworld/index/**" peut correspondre à "/helloworld/index/" Il y a de nombreux sous-chemins, tels que : "/helloworld/index/A/B/C/D";
S'il y a maintenant "/helloworld/index" et "/helloworld/*", si la requête l'adresse est « /helloworld/index ». Alors, comment va-t-elle correspondre ? Spring MVC correspondra en fonction du principe de correspondance la plus longue en premier (c'est-à-dire celui qui correspond le plus dans la configuration de mappage), il correspondra donc à "/helloworld/index". Faisons le test :
Ajoutez un urlTest. dans l'action HelloWorldController, le contenu est le suivant :
@RequestMapping(value="/*", method = {RequestMethod.GET})public ModelAndView urlTest(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("urltest"); return modelAndView; }
Ajoutez une nouvelle vue urltest.jsp dans le dossier vues Afin de la distinguer de index.jsp, le contenu de urltest.jsp est le suivant :
<%@ page language="java" contentType="text/html; charset=UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction" pageEncoding="UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction"%><!DOCTYPE html PUBLIC "-//WSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à lactionC//DTD HTML Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.org/TR/htmlSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction"> <title>Insert title here</title> </head> <body> urlTest!</body></html>
Demandez http://localhost:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/index pour voir les résultats :
On voit que ce qui est cartographié est l'action correspondant à l'index.
Demande http://localhost:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/AAA pour visualiser les résultats :
On voit que l'action correspondant à urlTest est cartographié.
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.Mappage d'expression régulière d'URL :
Spring MVC还支持正则表达式方式的映射配置,我们通过一个测试来展示:
在HelloWorldController添加一个regUrlTest的action,内容如下:
@RequestMapping(value="/reg/{name:\\w+}-{age:\\d+}", method = {RequestMethod.GET})public ModelAndView regUrlTest(@PathVariable(value="name") String name, @PathVariable(value="age") Integer age){ ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("name", name); modelAndView.addObject("age", age); modelAndView.setViewName("regurltest"); return modelAndView; }
在views文件夹中新加一个视图regurltest.jsp内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction" pageEncoding="UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction"%><!DOCTYPE html PUBLIC "-//WSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à lactionC//DTD HTML Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.org/TR/htmlSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction/loose.dtd"><html> <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction"> <title>Insert title here</title></head><body> ${name}-${age}</body></html>
请求http://www.php.cn/:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/reg/Hanmeimei-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à lactionSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction查看结果:
请求http://www.php.cn/:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/reg/Hanmeimei-Lilei查看结果(会发现找不到对应的action返回Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction):
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction.限制action所接受的请求方式(get或post):
之前我们在HelloWorldController的index() action方法上配置的为@RequestMapping(value="/*", method = {RequestMethod.GET})我们把它改为@RequestMapping(value="/*", method = {RequestMethod.POST})再次请求http://www.php.cn/:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/index试一下:
这里可以看到结果映射到了urlTest这个action,这是因为我们在urlTest上配置的为@RequestMapping(value="/*", method = {RequestMethod.GET}),当index这个action映射不在符合时便映射到了urlTest。
我们也可以这样配置@RequestMapping(value="/*", method = {RequestMethod.GET, RequestMethod.POST})表示该action可以接受get或post请求,不过更简单的是不对method做配置则默认支持所有请求方式。
Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.限制action所接受请求的参数:
我们可以为某个action指定映射的请求中必须包含某参数,或必须不包含某参数,或者某参数必须等于某个值,或者某参数必须不等于某个值这些限制。
Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction.指定映射请求必须包含某参数:
在HelloWorldController添加一个paramsTest的action,内容如下:
@RequestMapping(value="/paramstest", params="example", method = {RequestMethod.GET})public ModelAndView paramsTest(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("paramstest"); return modelAndView; }
在views文件夹中新加一个视图paramstest.jsp内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction" pageEncoding="UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction"%><!DOCTYPE html PUBLIC "-//WSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à lactionC//DTD HTML Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.org/TR/htmlSérie dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction"><title>Insert title here</title></head><body> paramstest!</body></html>
请求http://www.php.cn/:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/paramstest查看结果:
这里可以看到没有找到paramsTest这个action结果还是映射到了urlTest这个action。
请求http://www.php.cn/:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/paramstest?example查看结果:
这次可以看到请求映射到了paramsTest这个action。
Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction.指定映射请求必须不包含某参数:
把刚才添加的paramsTest的@RequestMapping(value="/paramstest", params="example", method = {RequestMethod.GET}) 改为@RequestMapping(value="/paramstest", params="!example", method = {RequestMethod.GET})
重新请求http://www.php.cn/:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/paramstest?example查看结果:
可以看到又没有找到paramsTest这个action而映射到了urlTest这个action。
Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.指定映射请求中或者某参数必须等于某个值:
把刚才添加的paramsTest的@RequestMapping(value="/paramstest", params="example", method = {RequestMethod.GET}) 改为@RequestMapping(value="/paramstest", params="example=AAA", method = {RequestMethod.GET})
Demande http://www.php.cn/:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/paramstest?example=BBB Voir les résultats :
Vous pouvez voir que paramsTest était introuvable Cette action est mappée à l'action urlTest.
Demande http://localhost:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/paramstest?example=BBB Voir les résultats :
Cette fois, vous pouvez voir que le La requête est mappée à paramsTest cette action.
Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction. Spécifiez qu'un certain paramètre dans la requête de mappage ne doit pas être égal à une certaine valeur :
Modifiez le @RequestMapping(value="/paramstest", params="example", method = {RequestMethod.GET}) remplacé par @RequestMapping(value="/paramstest", params="example!=AAA", method = {RequestMethod.GET})
Demande http://localhost:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/paramstest?example=AAA Voir les résultats :
Vous pouvez voir La demande est mappée à l'action paramsTest.
Demande http://localhost:Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction0/SpringMVCLesson/helloworld/paramstest?example=AAA Voir les résultats :
Vous pouvez voir que l'action paramsTest n'a pas été trouvé Et il est mappé à l'action urlTest.
Remarque : lorsque nous spécifions plusieurs paramètres pour les paramètres, tels que : params={"exampleSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction", "exampleSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction"}, cela représente une relation et, c'est-à-dire que les deux restrictions de paramètres doivent être respectées en même temps.
Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction. Limiter les paramètres d'en-tête de requête acceptés par l'action :
De la même manière que limiter les paramètres de requête acceptés par l'action, nous pouvons également spécifier un mappage pour une action L'en-tête de la requête doit contenir un certain paramètre, ou ne doit pas contenir un certain paramètre, ou un certain paramètre doit être égal à une certaine valeur, ou un certain paramètre ne doit pas être égal à une certaine valeur.
Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction. Spécifiez que l'en-tête de la requête de mappage doit contenir certains paramètres :
@RequestMapping(value="/headerTest", headers = "example"). Cela revient à limiter les paramètres de requête. Vous pouvez vous référer à l'exemple ci-dessus pour les tests.
Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction. L'en-tête de requête de mappage spécifié ne doit pas contenir un certain paramètre :
@RequestMapping(value="/headerTest", headers = "!example"). Cela revient à limiter les paramètres de requête. Vous pouvez vous référer à l'exemple ci-dessus pour les tests.
Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction. Spécifiez qu'un certain paramètre dans l'en-tête de la requête de mappage doit être égal à une certaine valeur :
@RequestMapping(value="/headerTest", headers = "Accept=text/html "). Cela revient à limiter les paramètres de requête. Vous pouvez vous référer à l'exemple ci-dessus pour les tests.
Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction.Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction. Spécifiez qu'un certain paramètre dans l'en-tête de la requête de mappage ne doit pas être égal à une certaine valeur :
@RequestMapping(value="/headerTest", headers = "Accepter ! =text/html"). Cela revient à limiter les paramètres de requête. Vous pouvez vous référer à l'exemple ci-dessus pour les tests.
Remarque : lorsque nous spécifions plusieurs paramètres pour les en-têtes, tels que : headers={"exampleSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction", "exampleSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction) Règles de mappage de la demande dURL à laction"}, cela représente une relation et, c'est-à-dire que les restrictions des deux paramètres doivent être respectées. en même temps.
Ce qui précède est le contenu des règles de mappage des requêtes URL aux actions de la série d'apprentissage SpringMVC (Série dapprentissage SpringMVC (3) Règles de mappage de la demande dURL à laction), et plus de contenu connexe Veuillez faire attention au site Web PHP chinois (www.php.cn) !