《web应用技术》第三次课后练习

1、springboot入门程序撰写并启动

SpringBootWeb快速入门:

1)在IDEA中创建一个新项目,选择“Spring Initializr”

2)勾选加入进来的依赖,选择“web”下的“Spring Web”,下载需要时间,可能等个一两分钟。

3)定义HelloController类,添加方法hello,并添加注释

4)运行测试,在运行类下点击主方法绿色三角运行

*如果报错“请删除该文件或确保该文件位于正确的类路径子目录中。”,大概是因为SpringBoot版本和Java版本不兼容,可以查一下相应版本并在pom.xml文件下进行修改,再点击右上角m浮标进行保存,再次运行就好啦。

运行成功的控制台就长这样啦:

再打开浏览器,输入“localhost:8080/hello”(默认8080端口号),就会出现:

如果访问到了服务端的这个方法,并在控制台输出了“Hello SpringBoot~”,浏览器也能看到“Hello SpringBoot~”,说明没问题啦。

2、使用postman练习参数的获取。

0)入门程序返回

1)简单参数&实体参数

简单参数:

原始方法获取请求参数:

在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手段获取。(l了解即可)

在postman中返回”OK“,测试成功:

控制台打印出tom的性别和年龄:

SpringBoot中接收简单参数:

参数名与形参变量名相同,定义形参即可接收参数。

控制台成功输出Tom:20

利用Post方式输出,在body中选择x-www-form-urlencoded,添加关键字并send:

控制台输出Tom姓名和年龄:

@RequestParam注解

*一定要保证请求参数名和Controller方法的形参名一致才能自动接收成功(name和age),否则控制台显示为null.

如果不一致则添加注解@RequestParam手动映射:

*@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。

如果该参数是可选的,可以将required属性设置为false:

@RequestMapping("/simpleParam")
  public String simpleParam(@RequestParam(name = "name",required = false) String username, Integer age){
      System.out.println(username + ":" + age);
      return "OK";
  }

实体参数:

简单实体对象:

请求参数名与形参对象属性名相同,定义POJO接收即可(封装):

首先编写Pojo包里的User类:

package com.example.springtest.Pojo;

public class User {
    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 "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

再在RequestController中编写:

@RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OK";
    }

在Postman中发起get请求:

再次运行,点击Postman中的”send“得到结果:

复杂实体对象:

请求参数名与形参对象属性名相同,按照对象层次届贵关系即可接收嵌套Pojo属性参数。

(User的属性有name,age和address,address中又包含属性privince和city)

先编写Address类:

package com.example.springtest.Pojo;

public class Address {
    private String province;
    private String city;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}

再修改User类:

package com.example.springtest.Pojo;

public class User {
    private String name;
    private Integer age;
    private Address address;

    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;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

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

再在RequestController中编写:

 @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OK";
    }

在Postman中写get方法:

再次运行,点击Postman中的”send“得到结果:

2)数组集合参数

使用数组进行封装:

请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数。

首先在RequestController中编写:

  @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }

运行,然后在postman中发出get请求:

控制台返回:

使用集合进行封装:

请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系。

首先在RequestController中编写:

@RequestMapping("/listParam")
    //需要添加注解@RequestParam
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OK";
    }

运行,然后在postman中发出get请求:

控制台返回:

3)日期参数&json参数

日期参数:

使用@DataTimeFormat注解完成日期参数格式转换。

首先在RequestController中编写:

    //5.日期参数
    @RequestMapping("/dataParam")
    //需要添加注解@DateTimeFormat来明确日期的格式
    //pattern格式大小要和这里一样,不然会报错
    public String dataParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "OK";
    }

运行,然后在postman中发出get请求:

控制台返回:

json参数:

JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识将json格式的数据封装到一个实体类中。

上面已经编写过了User和Address类,然后在RequestController中编写:

//6.json参数
    @RequestMapping("/jsonParam")
    //添加注解@RequestBody
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "OK";
    }

运行,然后在postman中发出post请求,body中选择raw中的json格式,填写json格式的请求参数:

控制台返回:

4)路径参数

通过请求URL直接传递参数,使用(…)来标识该路径参数,需要使用@PathVariable获取路径参数。

首先在RequestController中编写:

请求路径不能写成/path/1,这个参数应该是动态的,

//7.路径参数
//换成/path/{id}表示不是一个固定值,而是一个路径参数
    @RequestMapping("/path/{id}")
    //使用@PathVariable注解
    public String pathParam(@PathVariable Integer id){
        System.out.println(id);
        return "OK";
    }

运行,然后在postman中发出get请求:

控制台返回:

当在postman中路径改为/path/10,则控制台返回:

如果传递多个路径参数,则在请求路径当中用/分隔写第二个参数即可,代码修改为:

//7.路径参数
    @RequestMapping("/path/{id}/{name}")
    public String pathParam(@PathVariable Integer id,@PathVariable String name){
        System.out.println(id + " " + name);
        return "OK";
    }

请求路径改为:

控制台则显示:

5)@ResponseBody&统一响应结果

@ResponseBody:

类型-方法注解,类注解。

位置-Controller方法上/类上.

作用-将方法返回值直接响应,如果返回值类型是 实体对象/集合 ,将会转化为json格式响应。

说明-@RestController = @Controller + @ResponseBody;

响应-字符串:

首先在ResponseController中编写:

 @RequestMapping("/helloSpring")
    public String hello(){
        System.out.println("Hello SpringBoot~");
        return "Hello SpringBoot~";
    }

运行,然后在postman中发出get请求,响应成功:

响应-对象json:

首先在ResponseController中编写:

@RequestMapping("/getAddr")
    public Address getAddr(){
        Address addr = new Address();
        addr.setProvince("Hubei");
        addr.setCity("Wuhan");
        return addr;
    }

运行,然后在postman中发出get请求,响应成功,返回json格式数据:

响应-集合json:

首先在ResponseController中编写:

   @RequestMapping("/getAddr")
    public Address getAddr(){
        Address addr = new Address();
        addr.setProvince("Hubei");
        addr.setCity("Wuhan");
        return addr;
    }

    public List<Address> listAddr(){
        List<Address> list = new ArrayList<>();

        Address addr = new Address();
        addr.setProvince("Hubei");
        addr.setCity("Wuhan");

        Address addr2 = new Address();
        addr.setProvince("Hunan");
        addr.setCity("Changsha");

        list.add(addr);
        list.add(addr2);

        return list;
    }

运行,然后在postman中发出get请求,响应成功,返回json格式数组:

统一响应结果Result(code,msg,data):

使用实体对象result进行接收,在Pojo包下编写Result类:

package com.example.springtest.Pojo;

/**
 * 统一响应结果封装类
 */
public class Result {
    private Integer code ;//1 成功 , 0 失败
    private String msg; //提示信息
    private Object data; //数据 data

    //无参构造
    public Result() {
    }
    //有参构造
    public Result(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    //getset方法
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }

    //静态方法
    public static Result success(Object data){
        return new Result(1, "success", data);
    }
    public static Result success(){
        return new Result(1, "success", null);
    }
    public static Result error(String msg){
        return new Result(0, msg, null);
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

将上面在ResponseController中编写的进行修改:

@RequestMapping("/helloSpring")
    public Result hello(){
        System.out.println("Hello SpringBoot~");
        //return new Result(1,"success","Hello SpringBoot~");//创建Result对象
        return Result.success("Hello SpringBoot~");//直接调用静态方法
    }

    @RequestMapping("/getAddr")
    public Result getAddr(){
        Address addr = new Address();
        addr.setProvince("Hubei");
        addr.setCity("Wuhan");
        return Result.success(addr);
    }

    @RequestMapping("/listAddr")
    public Result listAddr(){
        List<Address> list = new ArrayList<>();

        Address addr = new Address();
        addr.setProvince("Hubei");
        addr.setCity("Wuhan");

        Address addr2 = new Address();
        addr.setProvince("Hunan");
        addr.setCity("Changsha");

        list.add(addr);
        list.add(addr2);

        return Result.success(list);
    }

运行,在postman中分别返回响应:(我上面写错啦传值的时候addr2写成了addr所以下面addr2里面是null,不过不要紧大概意思是这样的)

/helloSpring:

/getAddr:

/listAddr:

使得响应给前端的数据格式是统一的,使项目更加容易管理。

6)案例

3、体会前端页面向后端发送数据的过程。并且自己尝试将之前的注册页面的信息发送到服务端。

1)product.html的操作代码,输入产品名称和价格,点击“增加商品”按钮,页面返回“ok”。服务台返回用户输入的值。相关页面如下:

product.html放在static目录下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body style="font-size: 30px">
<form action="addProduct">

    产品名称 :<input type="text" name="name" value=""><br />
    产品价格: <input type="text" name="price" value=""><br />

    <input type="submit" value="增加商品">

</form>
</body>
</html>

ProductController.java放在Controller文件夹下:

package com.example.springtest.controller;

import com.example.springtest.Pojo.Product;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

@RestController
public class ProductController {
    @RequestMapping("/addProduct1")
    public String simpleParam1(HttpServletRequest request){
        String name = request.getParameter("name");
        String ageStr = request.getParameter("price");
        int price = Integer.parseInt(ageStr);
        System.out.println("addProduct1:" + name + ":" + price);
        return "OK";
    }

    @RequestMapping("/addProduct")
    public String simpleParam(String name,Integer price){
        System.out.println("您输入的信息是:" + name + ":" + price);
        return "OK";
    }

    @RequestMapping("/addProduct2")
    public String simpleParam2(Product product){
        System.out.println(product);
        return "OK";
    }
}

product.java放在Pojo文件夹下:

package com.example.springtest.Pojo;

public class Product {
        private String name;
        private float price;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public float getPrice() {
            return price;
        }
        public void setPrice(float price) {
            this.price = price;
        }
}

打开浏览器,输入localhost:8080/product.html出现页面:

控制台返回:

2)自己尝试将之前的注册页面的信息发送到服务端。

首先在static目录下编写1.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
<form action="Register" method="post">
    <ul style="list-style: none; line-height: 30px">
        <li>
            输入用户姓名:
            <input type="text" name="name" />
            <br />
        </li>
        <li>
            选择性别:
            <input name="sex" type="radio" value="boy" />
            男
            <input name="sex" type="radio" value="girl" />
            女
        </li>
        <li>
            选择密码提示问题:
            <select name="question">
                <option value="母亲生日">
                    母亲生日
                </option>
                <option value="宠物名称">
                    宠物名称
                </option>
                <option value="电脑配置">
                    电脑配置
                </option>
            </select>
        </li>
        <li>
            请输入问题答案:
            <input type="text" name="key" />
        </li>
        <li>
            请选择个人爱好:
            <div style="width: 400px">
                <input name="like" type="checkbox" value="dangce" />
                唱歌跳舞
                <input name="like" type="checkbox" value="web" />
                上网冲浪
                <input name="like" type="checkbox" value="hill" />
                户外登山
                <br />
                <input name="like" type="checkbox" value="sports" />
                体育运动
                <input name="like" type="checkbox" value="reading" />
                读书看报
                <input name="like" type="checkbox" value="movie" />
                欣赏电影
            </div>
        </li>
        <li>
            <input type="submit" value="提交" />
        </li>
    </ul>
</form>
</body>
</html>

其次在Pojo文件夹下编写People.java文件:

package com.example.springtest.Pojo;

public class People {
    private String name;
    private String sex;
    private String question;
    private String key;
    private String like;

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getLike() {
        return like;
    }

    public void setLike(String like) {
        this.like = like;
    }



    public void out() {
        System.out.println("People{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", question='" + question + '\'' +
                ", key='" + key + '\'' +
                ", like='" + like + '\'' +
                '}');
    }
}

最后在Controller文件夹下编写RegisterController.java文件:

package com.example.springtest.controller;

import com.example.springtest.Pojo.People;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RegisterController {
    @RequestMapping("/Register")
    public String Register(People people){
        people.out();
        return "OK";
    }
}

打开浏览器,输入localhost:8080/1.html出现页面:

控制台中返回:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值