IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【框架:SpringMVC】SpringMVC注解试开发 -> 正文阅读

[Java知识库]【框架:SpringMVC】SpringMVC注解试开发

1 @RequestMapping 定义请求规则

1.1 指定模块名称

通过@RequestMapping 注解可以定义处理器对于请求的映射规则。该注解可以注解在方法上,也可以注解在类上,但意义是不同的。
在这里插入图片描述
在这里插入图片描述

1.2 对请求提交方式的定义

在这里插入图片描述

    @RequestMapping(value="/other.do", method = RequestMethod.GET)
    public ModelAndView doOther(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("school", "广州大学");
        mv.addObject("age", "20");
        mv.setViewName("other");
        return mv;
    }
请求方式提交方式
表单请求默认GET,可以指定POST
AJAX默认GET,可以指定POST
地址栏请求GET请求
超链接请求GET请求
src资源路径请求GET请求

2 处理器方法的参数

在这里插入图片描述
index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>index</title>
</head>
<body>
    <form action="test/student.do" method="post">
        用户名:
        <label>
            <input type="text" name="name"/>
        </label>
        <br/>
        密码:
        <label>
            <input type="password" name="password"/>
        </label>
        <br/>
        <input type="submit"/>
    </form>
</body>
</html>

2.1 逐个参数接受

在这里插入图片描述

@Controller
@RequestMapping(value = "/test")
public class MyController {
    @RequestMapping(value="/student")
    public ModelAndView doTable(String name, String password){
        ModelAndView mv = new ModelAndView();
        mv.addObject("name", name);
        mv.addObject("password", password);
        mv.setViewName("student");
        return mv;
    }
}

2.2 请求参数中文乱码问题

我们在处理表单的时候,可能会出现一个问题,当我们的请求是post请求的时候,会出现乱码的问题,所以我们需要在web.xml中加入如下的一个过滤器。

 <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2.3 校正请求参数名@RequestParam

在这里插入图片描述

package com.sdnu.controller;

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

@Controller
@RequestMapping(value = "/test")
public class MyController {
    @RequestMapping(value="/student")
    public ModelAndView doTable(@RequestParam(value = "myName", required = false) String name,
                                @RequestParam(value = "myPassword", required = false) String password){
        ModelAndView mv = new ModelAndView();
        mv.addObject("name", name);
        mv.addObject("password", password);
        mv.setViewName("student");
        return mv;
    }
}

2.4 对象参数接

发起请求:
在这里插入图片描述

定义SchoolStudent类

package com.sdnu.vo;

public class SchoolStudent {
    private String name;
    private  Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "SchoolStudent{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

处理器类 MyControlle

@Controller
@RequestMapping(value = "/test")
public class MyController {
    @RequestMapping(value="/schoolStudent.do")
    public ModelAndView doStudent(SchoolStudent student){
        ModelAndView mv = new ModelAndView();
        mv.addObject("name", student.getName());
        mv.addObject("age", student.getAge());
        mv.addObject("student", student);
        mv.setViewName("student");
        return mv;
    }
}

页面

<body>
    <p>用户名 : </p>${name}
    <p>密码 : </p>${password}
    ${student}
</body>

在这里插入图片描述

3 处理器方法的返回值

3.1返回 ModelAndView

若处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据,此时处理器方法返回 ModelAndView 比较好。当然,若要返回 ModelAndView,则处理器方法中需要定义 ModelAndView 对象。

在使用时,若该处理器方法只是进行跳转而不传递数据,或只是传递数据而并不向任何资源跳转(如对页面的 Ajax 异步响应),此时若返回 ModelAndView,则将总是有一部分多余:要么 Model 多余,要么 View 多余。即此时返回 ModelAndView 将不合适。

3.2 返回 String

处理器类 MyControlle

@Controller
@RequestMapping(value = "/test")
public class MyController {
    @RequestMapping(value="/stringView.do")
    public String doReturnView(HttpServletRequest request, String name, Integer password){
        System.out.println(name + " " + password);
        request.setAttribute("name", name);
        request.setAttribute("password", password);
        return "student";
    }
}

3.3 返回void

对于处理器方法返回 void 的应用场景,AJAX 响应.
若处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void。

(1)maven 加入 jackson 依赖
由于本项目中服务端向浏览器传回的是 JSON 数据,需要使用一个工具类将字符串包装为 JSON 格式,所以需要导入 JSON 的依赖。

    <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-databind</artifactId>
      <version>2.9.0</version>
    </dependency>

(2)引入 jQuery 库

(3)定义 index 页面

index.html

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>index</title>
    <script type="text/javascript" src="js/Jquery-3.4.1.js"></script>
    <script type="text/javascript">
        $(function(){
            $("button").click(function () {
                $.ajax({
                    url:"returnVoid-ajax.do",
                    data:{
                        name:"zhangsan",
                        age:20
                    },
                    type:"post",
                    dataType:"json",
                    success:function(resp){
                        alert(resp);
                    }
                })
            })
        })
    </script>
</head>
<body>
    <form action="test/stringView.do" method="post">
        用户名:
        <label>
            <input type="text" name="name"/>
        </label>
        <br/>
        密码:
        <label>
            <input type="password" name="password"/>
        </label>
        <br/>
        <input type="submit"/>
    </form>
    <button id="btn">发起Ajax请求</button>
</body>
</html>

(4)定义对象SchoolStudent

SchoolStudent.java

package com.sdnu.vo;

public class SchoolStudent {
    private String name;
    private  Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "SchoolStudent{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

(5)处理器类 MyControlle

   @RequestMapping(value="/returnVoid-ajax.do")
    public void doReturnVoidAjax(HttpServletResponse response, String name, Integer age){
        System.out.println(name + " " + age);
        SchoolStudent student = new SchoolStudent();
        student.setName(name);
        student.setAge(20);
        String json = "";
        if(student != null){
            ObjectMapper om = new ObjectMapper();
            try {
                json = om.writeValueAsString(student);
                System.out.println(json);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }
        response.setContentType("application/json;charset=utf-8");
        PrintWriter pw = null;
        try {
            pw = response.getWriter();
        } catch (IOException e) {
            e.printStackTrace();
        }
        pw.println(json);
        pw.flush();
        pw.close();
    }

3.4 返回对象 Object

在这里插入图片描述

3.4.1 加入json的工具库的依赖

springmvc默认使用jackson,上面的例子有依赖项。

3.4.2 在springmvc配置文件之间加入注解驱动

注意,annotation-driven有许多重名的,要选下面这个。
在这里插入图片描述
处理器类 MyControlle

    @RequestMapping(value = "/schoolStudent.do")
    @ResponseBody
    public SchoolStudent doReturnJson(String name, String age){
        SchoolStudent schoolStudent = new SchoolStudent();
        schoolStudent.setName("小雪");
        schoolStudent.setAge(23);
        return schoolStudent;
    }

3.4.3 在处理器方法上面加入@ResponseBody

@ResponseBody

3.4.4 返回自定义对象

   @RequestMapping(value = "/schoolStudent.do")
    public SchoolStudent doReturnJson(){
        SchoolStudent schoolStudent = new SchoolStudent();
        schoolStudent.setName("小雪");
        schoolStudent.setAge(23);
        return schoolStudent;
    }

3.4.5 返回LIst集合

   @RequestMapping(value = "/schoolStudent.do")
    @ResponseBody
    public List<SchoolStudent> doReturnJson(){
        List<SchoolStudent> list = new ArrayList<>();

        SchoolStudent schoolStudent = new SchoolStudent();
        schoolStudent.setName("小雪");
        schoolStudent.setAge(23);
        list.add(schoolStudent);

        SchoolStudent schoolStudent2 = new SchoolStudent();
        schoolStudent2.setName("小鱼");
        schoolStudent2.setAge(23);
        list.add(schoolStudent2);

        return list;
    }

4.访问静态资源

4.1 使用 mvc:default-servlet-handler

声 明 了 <mvc:default-servlet-handler /> 后 , springmvc 框 架 会 在 容 器 中 创 建DefaultServletHttpRequestHandler 处理器对象。它会像一个检查员,对进入 DispatcherServlet的 URL 进行筛查,如果发现是静态资源的请求,就将该请求转由 Web 应用服务器默认的Servlet 处理。一般的服务器都有默认的 Servlet。

在 Tomcat 中,有一个专门用于处理静态资源访问的 Servlet 名叫 DefaultServlet。其中为 default。可以处理各种静态资源访问请求。该 Servlet 注册在 Tomcat 服务器的 web.xml 中。在 Tomcat 安装目录/conf/web.xml。

4.2 使用 mvc:resources mapping="" location=""

在这里插入图片描述

5.地址分类

在这里插入图片描述
在这里插入图片描述
base使用:
在这里插入图片描述

在这里插入图片描述

作者:Beyong    
出处:Beyong博客
github地址:https://github.com/beyong2019

本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:39:09  更:2021-09-20 15:40:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:11:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码