SpringMVC研究ノート-04アノテーション開発

1. @ Controller

@Controllerは、プロセッサクラスに注釈を付けるために使用されます。この注釈が付いたクラスは、コンテナによってスキャンされた後、自動的にインスタンス化され、コンテナに挿入されます。

2. @ RequestingMapping

1.値属性

@RequestingMappingは、value属性を使用してリクエストパスを指定します。パラメータが1つしかない場合、デフォルトで値がvalue属性に割り当てられます。

    @AliasFor("path")
    String[] value() default {};

A. @ RequestingMappingはメソッドに配置されます

package com.zzt.Controller;

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

@Controller
public class MyController {

    @RequestMapping("/some.do")
    public ModelAndView doSome(){
        ModelAndView modelAndView = new ModelAndView();

        // 存放数据 框架会自动将数据放到request作用域
        modelAndView.addObject("msg","hello-word");

        // 指定视图的路径 框架会自动通过forward进行请求转发 request.getRequestDispatcher("/show.jsp").forward(..)
        modelAndView.setViewName("show");

        return modelAndView;
    }

}

この時点で、要求がコントローラーオブジェクトのdoSomeメソッドを呼び出す場合、要求パスはsome.doである必要があります。

<a href="some.do">发起请求</a>
 

B. @ RequestingMappingはクラスに配置されます

package com.zzt.Controller;

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

@Controller
@RequestMapping("/Test")
public class MyController {

    @RequestMapping("/some.do")
    public ModelAndView doSome(){
        ModelAndView modelAndView = new ModelAndView();

        // 存放数据 框架会自动将数据放到request作用域
        modelAndView.addObject("msg","hello-word");

        // 指定视图的路径 框架会自动通过forward进行请求转发 request.getRequestDispatcher("/show.jsp").forward(..)
        modelAndView.setViewName("show");

        return modelAndView;
    }

}

この時点で、要求がコントローラーオブジェクトのdoSomeメソッドを呼び出す場合、要求パスは/Test/some.doである必要があります。

<a href="/Test/some.do">发起请求</a>

C.value属性は複数のマッピングを指定します

valueは、複数のパスマッピングを格納できる配列です。つまり、同じメソッドに複数のリクエストパスをマッピングできます。これが2つの属性の割り当てであるとコンパイラが誤解しないようにするために、{}を使用して値がvalue []に​​割り当てられていることを示します。

    <a href="some.do">发起第一个请求</a>
    <a href="other.do">发起第二个请求</a>
package com.zzt.Controller;

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

@Controller
public class MyController {

    @RequestMapping(value = {"/some.do","/other.do"} )
    public ModelAndView doSome(){
        ModelAndView modelAndView = new ModelAndView();

        // 存放数据 框架会自动将数据放到request作用域
        modelAndView.addObject("msg","hello-word");

        // 指定视图的路径 框架会自动通过forward进行请求转发 request.getRequestDispatcher("/show.jsp").forward(..)
        modelAndView.setViewName("show");

        return modelAndView;
    }

}

2.方法

methodは、アノテーションのメソッドが対応するリクエストタイプ(一般的に使用されるgetおよびpost)を必要とすることを指定するために使用されます。指定されていない場合、リクエストタイプが制限されないことを意味します。

Webでは、getリクエストが安全ではないことを知っておく必要があります。渡されたパラメータがURLに追加されますが、これはgetに利点がないことを意味するわけではありません。実際、postリクエストはフォームを再送信する必要があります。がロールバックされます。、およびgetは必要ありません。セキュリティ要件がない場合は、getで十分です。

package com.zzt.Controller;

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

@Controller
@RequestMapping(value = "/test")
public class MyController {

    @RequestMapping(value = "/some.do" , method = RequestMethod.GET)
    public ModelAndView doSome(){
        ModelAndView modelAndView = new ModelAndView();

        // 存放数据 框架会自动将数据放到request作用域
        modelAndView.addObject("msg","hello-get");
        
        modelAndView.setViewName("show");

        return modelAndView;
    }

    @RequestMapping(value = "/other.do", method = RequestMethod.POST)
    public ModelAndView doOther(){
        ModelAndView modelAndView = new ModelAndView();

        // 存放数据 框架会自动将数据放到request作用域
        modelAndView.addObject("msg","hello-post");
        
        modelAndView.setViewName("show");

        return modelAndView;
    }

    @RequestMapping(value = "/noLimit.do")
    public ModelAndView doNoLimit(){
        ModelAndView modelAndView = new ModelAndView();

        // 存放数据 框架会自动将数据放到request作用域
        modelAndView.addObject("msg","hello-nolimit");
        
        modelAndView.setViewName("show");

        return modelAndView;
    }

}
    <p>第一个项目</p>
    <a href="test/other.do">发起some.do请求</a>
    <br>
    <form action="test/some.do" method="post">
        <input type="submit" value="post请求提交">
    </form>
    <a href="test/noLimit.do">noLimit.do-get方式</a>
    <form action="test/noLimit.do" method="post">
        <input type="submit" value="post提交noLimit">
    </form>

1

次に、リクエストメソッドを変更します。

    <p>第一个项目</p>
    <a href="test/other.do">发起some.do请求</a>
    <br>
    <form action="test/some.do" method="post">
        <input type="submit" value="post请求提交">
    </form>

指定されたメソッド以外のリクエストメソッドを使用すると、サポートされていないため、正常にアクセスできないことがわかります。

3. @RequestParam

        @RequestParamは、現在指定されている属性に割り当てるパラメーター値を指定するために使用されます。使用法はMybatisの@Paramと同じで、プロセッサーメソッドでのみ使用できます。オブジェクト受信を使用する場合、フレームワークはエンティティクラスのリクエストパラメータに必要な属性。

A.値は、リクエストでパラメータ名を指定するために使用されます

    <p>提交参数</p>
    <form action="test/receiveProperty.do" method="post">
        姓名:<input type="text" name="rname"><br>
        年龄:<input type="text" name="rage"><br>
        <input type="submit" value="提交参数">
    </form>
    @RequestMapping(value = "/receiveProperty.do")
    public ModelAndView doReceiveProperty(@RequestParam(value = "rname") String name,@RequestParam(value = "rage") Integer age){
        ModelAndView modelAndView = new ModelAndView();

        System.out.println("age = " + age);

        modelAndView.addObject("name",name);
        modelAndView.addObject("age",age);

        modelAndView.setViewName("showProperty");

        return modelAndView;
    }

B. requiredは、パラメーターが存在する必要があるかどうかを指定するために使用されます

requiredのデフォルト値はtrueです。これは、パラメーターをリクエストに含める必要があることを意味します。パラメーターが存在しない場合、エラーが発生します。これの利点は、リクエストパスがわかっている場合、パラメータを送信する通常のプロセス(http:// localhost:8080 / SpringMVC_01 / test / receiveProperty.do)から直接アクセスしないことを回避できることです

上図に示すように、リクエストパスがわかっていても、パラメータが正常に送信されないため、サーバーは正常に応答しません。

 

おすすめ

転載: blog.csdn.net/qq_39304630/article/details/112872236