Algumas anotações comuns e uso de springMVC

Prefácio

Acabei de aprender o springMVC e apresentarei anotações comuns, na esperança de melhorar minha compreensão e aplicação do springMVC, e espero ajudar a todos!
Em primeiro lugar, conhecemos a arquitetura de três camadas do lado do servidor: camada de apresentação, camada de negócios e camada de persistência, e springMVC é a estrutura da camada de apresentação.
Fluxo de trabalho MVC:
primeiro, o cliente (geralmente um navegador) faz uma solicitação. O primeiro componente a aceitar essa solicitação é geralmente um controlador frontal. Ele entrega diferentes solicitações a diferentes controladores de back-end para processamento, e o controlador de back-end pode chamar o objeto de modelo correspondente para processar a lógica de negócios específica e, finalmente, retornar uma resposta de visão específica ao cliente.
A figura a seguir mostra os detalhes da operação da estrutura springMVC:
Fluxo de trabalho SpringMVC: O
primeiro controlador de front-end que aceita essa solicitação é chamado DispatcherServlet, e o controlador de back-end é chamado de Controller. O responsável pelo processamento da URL de solicitação e mapeamento do controlador de back-end se chama HandMapping, possui vários tipos e é mais flexível, além de ser configurado em arquivo xml. O objeto de modelo responsável pelo processamento da lógica de negócios é geralmente o componente DAO / DTO que normalmente escrevemos. Mas seu retorno final é mais flexível. O controlador retorna um objeto ModelAndView para DispatcherServlet. ModelAndView pode carregar um objeto de visualização ou o nome lógico de um objeto de visualização. Se ele carrega o nome lógico de um objeto de visualização, o DispatcherServlet precisa de um ViewResolver para localizar o objeto de visualização usado para renderizar a resposta. Finalmente, DispatcherServlet despacha a solicitação para o objeto de visualização especificado pelo objeto ModelAndView. O objeto de visualização é responsável por renderizar a resposta retornada ao cliente.
(Da Enciclopédia Sogou)
Insira a descrição da imagem aqui

@Controlador:

Atuando na classe, indica que a classe atual é uma classe controladora Após adicionar esta anotação, o framework spring irá escanear o método da classe que usa a anotação, e irá detectar se o método usa a anotação @RequestMapping.

@RequestMapping :

Função: usado para estabelecer a correspondência entre o URL da solicitação e o método de processamento da solicitação
. Escopo: o escopo está no método ou na classe. Se a anotação for usada na classe, o acesso JSP à página precisa ser anterior ao caminho do método de acesso href Adicione o
atributo path da classe :
path: path
value: alias do path
method: determine o valor do método de solicitação é um tipo enumerado
params: "username" você solicitará este método mais tarde, você deve me passar um atributo de nome de usuário se o comentário tiver um valor para nome de usuário Então, o valor de nome de usuário também deve ser o valor que você passa.
Headers: cabeçalhos de solicitação que devem ser incluídos na solicitação de envio

@Controller
public class HelloController {

    @RequestMapping(path = "/Hello",params={"username=heihei"},headers={"Accept"})
    public String sayHellio() {
        System.out.println("Hello SpringMVC");
        return "success";
    }
    }

@RequestParam :

Cenário: Se o parâmetro carregado não corresponder ao parâmetro do método acessado, o parâmetro não pode ser obtido, então o que devo fazer?

    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(name = "name") String username) {
        System.out.println("执行了");
        System.out.println(username);
        return "success";
    }

@RequestBody :

É usado para obter o conteúdo do cabeçalho da solicitação, que é obtido diretamente na forma de key = value & key = value. O
método get request não está disponível

    //获取请求体
    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String body) {
        System.out.println(body);
        return "success";
    }

@RequestHeader :

Obtenha o cabeçalho do pedido especificado

    //    获取请求头的值  需要哪个填哪个 (据说可以防爬虫 可以试下)
    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value = "Accept") String header) {
        System.out.println(header);
        return "success";
    }

@CookieValue :

   //获取cookie的值
    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
        System.out.println(cookieValue);
        return "success";
    }

@ModelAttribute :

Comentário sobre o método

Nesse caso, o método será chamado antes de cada método do controlador ser chamado.

   //获取cookie的值
    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
        System.out.println(cookieValue);
        return "success";
    }

@SessionAttributes

Usado para execução múltipla de compartilhamento de parâmetro de método entre controladores.
Esta anotação só pode ser usada em classes

//@SessionAttributes(value = {"msg"}) //把msg存入到session域中

    //获取SessionAttributes的值
    @RequestMapping("/testSessionAttributes")
    public String testSessionAttributes(Model model) {
        System.out.println("testSessionAttributes执行了");
        //底层会存储到request域当中
        model.addAttribute("msg", "haha");
        return "success";
    }

    @RequestMapping("/getSessionAttributes")
    public String getSessionAttributes(ModelMap model) {
        System.out.println("testSessionAttributes执行了");
        //从session中获取值
        String msg = (String) model.get("msg");
        System.out.println(msg);
        return "success";
    }

@RequestBody encapsula automaticamente o corpo da solicitação e a correspondência do bean

@ResponseBodyt converte automaticamente os beans em dados json

contar com:

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
        </dependency>

ps: Ao usar o upload de ajax do jquery, resolva o problema de interceptação de recurso estático
springmvc.xml

    <!--前端控制器,哪些静态资源不拦截 两参数:请求路径带js任何文件也都不拦截 以后js下的任何文件都不拦截 -->
    <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>

 //模拟异步请求和响应
    @RequestMapping("/testAjax")
    public @ResponseBody User1 testAjax(@RequestBody User1 user1) { //拿到请求体的内容
        System.out.println("异步");
        //客户端发送的是ajax请求 传的是json字符串,后端把json字符串封装到user1对象中
        System.out.println(user1);

        //做响应,模拟查询
        user1.setUsername("查完了");
        user1.setAge(40);
        user1.setPassword("ahha");

        System.out.println(user1);
        //做响应
        return user1;
    }

Acima estão algumas anotações comuns. Vou detalhar o interceptor de upload, upload e download de arquivos, tratamento de exceções e outros artigos mais tarde!

Acho que você gosta

Origin blog.csdn.net/Pzzzz_wwy/article/details/105458806
Recomendado
Clasificación