ホームページ  >  記事  >  Java  >  SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール

黄舟
黄舟オリジナル
2017-03-03 10:49:581363ブラウズ

シリーズ (SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール) では、単純な get リクエストを示し、単純な helloworld ページを返しました。この記事では、アクションの URL マッピング ルールを構成する方法を学びます。

シリーズ (SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール) では、HelloWorldController に @RequestMapping(value = "/helloworld") を設定しました。これは、コントローラーへのすべてのアクション リクエストが "/helloworld" で始まる必要があることを意味します。

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール.URLパスマッピング

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール.SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール. SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルールつのアクションに対して複数のURLマッピングを設定する:

前回の記事のHelloWorldControllerのindex()アクションメソッドの@RequestMappingを@RequestMapping(value={"/index ")に変更しました。 , "/hello"}、method = {RequestMethod.GET})、これは、/index と /hello の SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール つのマッピングがこのアクションに対して構成されていることを意味します。次のようにテストを実行します:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール

/helloworld/hello リクエストも正常に一致していることがわかります。

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール.SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール. URL リクエストパラメータマッピング:

これは、クエリを実行するときによく使用され、たとえば、ID または番号に基づいて特定のレコードを取得します。

HelloWorldController に getDetail アクションを追加します。コードは次のとおりです:

@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}"、その中の {id} はプレースホルダーであり、リクエストをマッピングできることを示します/detail/xxxx URL : /detail/SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルールSpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルールSpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール など。

Integer id メソッドのパラメータ @PathVariable(value="id") は、URL 内のプレースホルダーに対応する変数を @PathVariable(value="id") の value の値にマッピングするために使用されます。 /{id} の中括弧内の値は、プレースホルダーと同じである必要があります。

取得したid値を表示するには、viewsにdetail.jspビューを追加します。ビューの内容は次のとおりです:

<%@ page language="java" contentType="text/html; charset=UTF-SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール"
    pageEncoding="UTF-SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール"%><!DOCTYPE html PUBLIC "-//WSpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルールC//DTD HTML 4.0SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール Transitional//EN" "http://www.wSpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール"><title>Insert title here</title></head><body>
    ${id}</body></html>


テストを実行し、URLアドレスをリクエストしますhttp://localhost:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/detail/SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルールSpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルールSpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール、結果は次のとおりです:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール

リクエストしたIDが正しく表示されていることがわかります。

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール.SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール. URL ワイルドカード マッピング:

ワイルドカード文字を使用して URL マッピングを設定することもできます。このうち、「?」は SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール 文字、「*」は複数の文字の一致、「**」は 0 個以上のパスの一致を意味します。

例:

"/helloworld/index?" は "/helloworld/indexA" および "/helloworld/indexB" には一致しますが、"/helloworld/index" や "/helloworld/indexAA" には一致しません。 /helloworld/index*" は、"/helloworld/index"、"/helloworld/indexA"、"/helloworld/indexAA" には一致しますが、"/helloworld/index/A" には一致しません。

"/helloworld/index/* " 「/helloworld/index/」、「/helloworld/index/A」、「/helloworld/index/AA」、「/helloworld/index/AB」には一致しますが、「/helloworld/index」、「/helloworld /index」には一致しません/A/B";

"/helloworld/index/**" は、"/helloworld/index/" の下にある複数のサブパスと一致します (例: "/helloworld/index/A/B/C/D ";

今「/helloworld/index」と「/helloworld/*」があるとして、リクエストアドレスが「/helloworld/index」の場合はどうやってマッチングするのでしょうか? Spring MVC は最長一致第一の原則 (つまり、マッピング設定内で最も一致するもの) に基づいて一致するため、「/helloworld/index」と一致します。 テストを実行しましょう:

urlTest アクションを HelloWorldController に追加します。内容は次のとおりです:

@RequestMapping(value="/*", method = {RequestMethod.GET})public ModelAndView urlTest(){
    
    ModelAndView modelAndView = new ModelAndView();   
    modelAndView.setViewName("urltest");  
    return modelAndView;
}


views フォルダーに新しいビュー urltest.jsp を追加します。index.jsp と区別するために、urltest.jsp の内容は次のとおりです。 http://localhost:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson /helloworld/index をリクエストして結果を表示します:


Index に対応するアクションがマッピングされていることがわかります。

結果を表示するには http://localhost:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/AAA をリクエストします:

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール

urlTest に対応するアクションがマッピングされていることがわかります。

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール.4.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-SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール"
    pageEncoding="UTF-SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール"%><!DOCTYPE html PUBLIC "-//WSpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルールC//DTD HTML 4.0SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール Transitional//EN" 
    "http://www.wSpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール.org/TR/html4/loose.dtd"><html>
    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール">
    <title>Insert title here</title></head><body>
    ${name}-${age}</body></html>


请求http://www.php.cn/:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/reg/Hanmeimei-SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルールSpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール查看结果:

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール

请求http://www.php.cn/:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/reg/Hanmeimei-Lilei查看结果(会发现找不到对应的action返回404):

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール

 

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール.限制action所接受的请求方式(get或post):

之前我们在HelloWorldController的index() action方法上配置的为@RequestMapping(value="/*", method = {RequestMethod.GET})我们把它改为@RequestMapping(value="/*", method = {RequestMethod.POST})再次请求http://www.php.cn/:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/index试一下:

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール

这里可以看到结果映射到了urlTest这个action,这是因为我们在urlTest上配置的为@RequestMapping(value="/*", method = {RequestMethod.GET}),当index这个action映射不在符合时便映射到了urlTest。

我们也可以这样配置@RequestMapping(value="/*", method = {RequestMethod.GET, RequestMethod.POST})表示该action可以接受get或post请求,不过更简单的是不对method做配置则默认支持所有请求方式。

 

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール.限制action所接受请求的参数:

我们可以为某个action指定映射的请求中必须包含某参数,或必须不包含某参数,或者某参数必须等于某个值,或者某参数必须不等于某个值这些限制。

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール.SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール.指定映射请求必须包含某参数:

在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-SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール"
    pageEncoding="UTF-SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール"%><!DOCTYPE html PUBLIC "-//WSpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルールC//DTD HTML 4.0SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール Transitional//EN" 
    "http://www.wSpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; 
    charset=UTF-SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール"><title>Insert title here</title></head><body>
    paramstest!</body></html>


请求http://www.php.cn/:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/paramstest查看结果:

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール

这里可以看到没有找到paramsTest这个action结果还是映射到了urlTest这个action。

请求http://www.php.cn/:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/paramstest?example查看结果:

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール

这次可以看到请求映射到了paramsTest这个action。

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール.SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール.指定映射请求必须包含某参数:

把刚才添加的paramsTest的@RequestMapping(value="/paramstest", params="example", method = {RequestMethod.GET}) 改为@RequestMapping(value="/paramstest", params="!example", method = {RequestMethod.GET})

重新请求http://www.php.cn/:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/paramstest?example查看结果:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール0

可以看到又没有找到paramsTest这个action而映射到了urlTest这个action。

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール.SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール.指定映射请求中或者某参数必须等于某个值:

把刚才添加的paramsTest的@RequestMapping(value="/paramstest", params="example", method = {RequestMethod.GET}) 改为@RequestMapping(value="/paramstest", params="example=AAA", method = {RequestMethod.GET})

http://www.php.cn/:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/paramstest?example=BBB に結果を表示するようリクエストします:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルールSpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール

paramsTest アクションが見つからないが、urlTest にマップされていることがわかります。アクション。

Request http://localhost:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/paramstest?example=BBB 結果を表示します:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルールSpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール

今回は、リクエストが paramsTest アクションにマップされていることがわかります。

SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール.4. マッピング リクエストのパラメータが特定の値と等しくてはならないことを指定します: @RequestMapping(value="/paramstest", params="example", method =

{RequestMethod.GET) を変更します。 }) @RequestMapping(value="/paramstest", params="example!=AAA", method =

{RequestMethod.GET}) に変更されました Request http://localhost:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/ paramstest ?example=AAA 結果を表示します:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルールSpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルールリクエストが paramsTest アクションにマッピングされていることがわかります。

Request http://localhost:SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール0/SpringMVCLesson/helloworld/paramstest?example=AAA 結果を表示します:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール4paramsTest アクションが見つかりませんが、urlTest アクションにマップされていることがわかります。

注: params={"exampleSpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール", "exampleSpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール"} のように、params に複数のパラメータを指定すると、and 関係を表します。つまり、SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール つのパラメータ制限を同時に満たす必要があります。

4. アクションによって受け入れられるリクエスト ヘッダー パラメーターを制限する:

アクションによって受け入れられるリクエスト パラメーターを制限するのと同じように、アクションのマップされたリクエスト ヘッダーに特定のパラメーターを含める必要があるかどうかを指定することもできます。特定のパラメータが含まれているか、パラメータが特定の値と等しくなければならない、またはパラメータが特定の値と等しくなくてはなりません。

4.SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール. マッピング リクエスト ヘッダーに特定のパラメーターを含める必要があることを指定します:

@RequestMapping(value="/headerTest", headers = "example")。リクエストパラメータを制限するのと同じです。テストには上記の例を参照してください。

4.SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール. 指定されたマッピング リクエスト ヘッダーには、特定のパラメータ

@RequestMapping(value="/headerTest", headers = "!example") が含まれていてはなりません。リクエストパラメータを制限するのと同じです。テストには上記の例を参照してください。 4.SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール. マッピングリクエストヘッダーの特定のパラメータが特定の値に等しい必要があることを指定します:

@RequestMapping(value="/headerTest", headers = "Accept=text/html")。リクエストパラメータを制限するのと同じです。テストには上記の例を参照してください。

4.4. マッピング リクエスト ヘッダー内の特定のパラメーターが特定の値と等しくないことを指定します:

@RequestMapping(value="/headerTest", headers = "Accept!=text/html")。リクエストパラメータを制限するのと同じです。テストには上記の例を参照してください。

注: headers={"exampleSpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール", "exampleSpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール"} など、ヘッダーに複数のパラメーターを指定すると、and 関係が表されます。つまり、SpringMVC学習シリーズ(SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) URLリクエストからアクションまでのマッピングルール つのパラメーター制限を同時に満たす必要があります。

上記は、SpringMVC 学習シリーズ (SpringMVC学習シリーズ(3) URLリクエストからアクションまでのマッピングルール) の URL リクエストからアクションへのマッピング ルールの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.ん)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。