Web开发

  • Web开发的简介
  • 开始上手
  • JSON的支持
  • RESTful的支持
  • 快速上手:
  • MockMvc


Web开发的简介

  1. 自从B/S架构(Browser/Server,浏览器/服务器)被发明以来,因为具有跨平台、易移植、方便使用等特点,迅速成为技术架构的首选,前端Web技术迅速发展起来。
  2. Spring Boot对Web开发的支持很全面,包括开发、测试和部署阶段都做了支持。
  3. spring-boot-starter-web 是Spring Boot队Web开发提供支持的组件,主要包括JSON、RESTful,作为tomcat内嵌容器等等功能。

开始上手

  1. 首先创建构建项目:
    在前面的博客中创建一个Spring Boot项目已经讲过创建项目,这边就不详细说明了。
  2. 添加依赖包(启动器):
    首先配置好pom.xml文件,添加需要和相对应的依赖包即可。
<dependencies>
 <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>5.1.18</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>
  • lombok:支持getter/setter生成
  • mysql-connector-java:MySql版本
  • mybatis-plus-boot-starter:mybatis-plus的版本
  • spring-boot-starter-test:Spring Boot test启动器
  • spring-boot-starter-web:Spring Boot web启动器

还包括一些其他的依赖,如jstl和web mvc还有json等等

<!--        jstl依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <!--        jsp引擎依赖,springboot内置tomcat没有依赖-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
  1. Model准备:
    提供基本的CRUD功能
    存放业务逻辑的一些代码
public interface UserService {
    //登录
    public User login(String usrName, String usrPassword);

    //新增用户
    public int addUser(User user);

    //删除用户
    public int deleteUser(Long usrId);

    //修改用户
    public int updateUser(User user);

    //根据主键Id查询用户信息
    public User getUser(Long usrId);

    //查询所有用户信息
    public List<User> findAllUsers();
}

JSON的支持

JSON是一种轻量级的数据交换格式,易于阅读和编写,同事也易于机器解析和生成。JSON采用完全独立于语言的文本格式。

  1. 控制器的准备:
public class UserController {
    @Resource
    private UserService userService;

    //最普遍的方法
    @RequestMapping(value = "/getUser", method = RequestMethod.GET)
    public User getUser(Long usrId) {
        User user = userService.getUser(usrId);//根据id查询
        System.out.println(user);
        return user;
    }
}
  • @RestController 注解就相当于@ResponseBody+@Controller的组合,数据是返回JSON格式的。
  • @RequestMapping(value = “crmLogin”),默认是GET请求方式。

RESTful的支持

RESTful是目前最流行的一种互联网软件架构。
REST(Representaional State Transfer)
定义了他对软件架构的原则REST

在Spring Boot中对RESTful的支持:
Spring Boot全面支持开发RESTful程序,通过不同的注解来支持前端的请求,除了一些常用的注解外,还有一些Spring Boot的组合注解。

  • @GetMapping,处理Get请求
  • @PostMapping,处理Post请求
  • @PutMapping,用于更新资源
  • @DeleteMapping,处理删除请求
  • @PatchMapping,用于更新部分资源
快速上手:

请求

地址

说明

GET

/user

说明所有数据

GET

/user/id

根据id查询

Put

/user

修改

Delete

/user/id

删除

POST

/user

新增

话不多说,上代码

@RestController
@Slf4j
public class UserController {
    @Resource
    private UserService userService;
  //  @GetMapping== @RequestMapping
    @GetMapping(value = "/user")
    public List<User> findAllUser() {
        List<User> list = userService.findAllUsers();//查询所有
        return list;
    }

//使用REST风格,根据查询id
    @GetMapping(value = "/user/getUser/{id}")
    public User getUser(@PathVariable("id") Long usrId) {
        User user = userService.getUser(usrId);
        return user;
    }


    @PostMapping(value = "/user/addUser")
//    @ResponseBody
    public User addUser(User user) {
        user.setUsrName("测试用户153");
        user.setUsrPassword("123456");
        user.setUsrRoleId(8L);
        user.setUsrFlag(1);
        userService.addUser(user);
        if (userService.addUser(user) > 0) {
            System.out.println("成功:");
            log.info(user.toString());
        } else {
            System.out.println("失败:");
            log.info(user.toString());
        }
        System.out.println(user);
        return user;
    }

    @PutMapping(value = "/user/updateUser")
    public User updateUser(User user) {
        //修改
        user = userService.getUser(28L);
        user.setUsrName("测试用户152");
        user.setUsrPassword("123456");
        user.setUsrRoleId(8L);
        user.setUsrFlag(1);
        if (userService.updateUser(user) > 0) {
            System.out.println("成功:");
            log.info(user.toString());
        } else {
            System.out.println("失败:");
            log.info(user.toString());
        }
        return user;
    }

    @DeleteMapping(value = "/user/deleteUser/{id}")
    public User deleteUser(@PathVariable("id") Long usrId) {
        User user = new User();
        if (userService.deleteUser(usrId) > 0) {
            System.out.println("成功:");
            log.info(user.toString());
        } else {
            System.out.println("失败:");
            log.info(user.toString());
        }
        System.out.println(user);
        return user;
    }
}

此时可以看到执行结果:

spring boot空白项目启动后马上停止了 spring boot start web_System

接下来我们使用Web测试的支持

MockMvc

这是官网的网址可以可以进行下载
MockMvc可以通过PostMan工具或自己写一些Http 请求进行测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
    @Resource
    private WebApplicationContext wac;//注入Spring Web上下文的环境

    private MockMvc mockMvc;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
//        System.out.println(mockMvc);
    }
}
  • @Before代表在测试启动时候需要提前加载的内容,这里是提前加载MVC环境。

测试根据id查询数据(get请求):

@Test
    public void testGetUser() throws Exception {
        //查询
        String mvcResult =
                mockMvc.perform(MockMvcRequestBuilders.get("/user/getUser/27"))//测试地址
                        .andReturn().getResponse().getContentAsString();//返回响应主体内容
        System.out.println("mvcResult===" + mvcResult);
        System.out.println(mvcResult);
    }

测试效果:

spring boot空白项目启动后马上停止了 spring boot start web_System

spring boot空白项目启动后马上停止了 spring boot start web_spring_03

测试根据新增数据(post请求):

@Test
    public void testAddUser() throws Exception {
        //新增
        //构造请求参数
        final MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
        params.add("usrName", "RESTful");
        params.add("usrPassword", "123456");
        params.add("usrRoleId", "2");
        params.add("usrFlag", "1");

        mockMvc.perform(MockMvcRequestBuilders.post("/user/addUser").params(params))
                //isOk ==200
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print());

    }

spring boot空白项目启动后马上停止了 spring boot start web_restful_04

总结:通过RESTful的方式让更好的遵守了互联网软件架构的原则。