Spring Boot 对基础 Web 开发的支持

首先让大家快速认识Spring Boot 对基础Web开发所做的优化;接下来讲解了如何在SpringBoot中使用前端技术JSP、Thymeleaf,重点介绍了Thymeleaf的各种使用场景;后面几课介绍了如何使用Spring Boot 来构建RESTful服务、RESTful APIs,利用WebSocket双向通信的特性创建聊天室。

自从B/S架构(Browser/Server,浏览器/服务器模式)被发明以来,因为其具有跨平台、易移植、方便使用等特点,迅速地成为了技术架构的首选,前端Web 技术迅速发展起来。人们利用前端 Web技术构建各种应用场景,如电子商务平台、在线聊天室、后台管理系统等。页面技术也从最初的JSP演化为现在的模板引擎;信息交互由以前的XML发展到现在更流行的JSON;Spring Filter、loC、Aop等概念的发展更加方便人们构建Web系统。

Spring Boot 对Web开发的支持很全面,包括开发、测试和部署阶段都做了支持。spring-boot-starter-web是Spring Boot对Web开发提供支持的组件,主要包括RESTful,参数校验、使用Tomcat作为内嵌容器等功能,接下来给大家一一介绍。
 

JSON的支持

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等),这些特性使JSON成为理想的数据交换语言。

早期人们习惯使用XML进行信息交互,后来JSON的使用更加简单,到了现在信息交互大部分都以JSON为主。早期在Spring体系中使用JSON还比较复杂,需要配置多项XML和注解,现在在Spring Boot体系中,对JSON支持简单而又完善,在Web层使用仅仅只需要一个注解即可完成。接下来使用案例说明。

新建一个spring-boot-web项目,在pom.xml中添加Web依赖。
 

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

启动类: 

package com.neo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebApplication {

	public static void main(String[] args) {
		SpringApplication.run(WebApplication.class, args);
	}
}

在项目根路路径下新建 model 包,在包下新建一个实体类 User,User 信息如下:

package com.neo.model;

import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;

public class User {
    @NotEmpty(message="姓名不能为空")
    private String name;
    @Max(value = 100, message = "年龄不能大于100岁")
    @Min(value= 18 ,message= "必须年满18岁!" )
    private int age;
    @NotEmpty(message="密码不能为空")
    @Length(min=6,message="密码长度不能小于6位")
    private String pass;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    @Override
    public String toString() {
        return ("name=" + this.name + ",age=" + this.age + ",pass=" + this.pass);
    }
}

在项目中新建 Web 包,并在 Web 包下新建⼀一个类 WebController,在类中创建⼀一个方法返回 User,如下:

@RestController
public class WebController {
@RequestMapping(name="/getUser", method= RequestMethod.POST)
public User getUser() {
User user=new User();
user.setName("⼩小明");
user.setAge(12);
user.setPass("123456");
return user;
}
}

@RestController 注解相当于@ResponseBody+@Controller合在一起的作用,如果Web层的类上使用了@RestController注解,就代表这个类中所有的方法都会以JSON的形式返回结果,也相当于JSON的一种快捷使用方式;

@RequestMapping(name="/getUser",method=RequestMethod.POST),以/getUser的方式去请求,method=RequestMethod.POST 是指只可以使用Post的方式去请求,如果使用Get的方式去请求的话,则会报405不允许访问的错误。
 

在 test 包下新建 WebControllerTest 测试类,对 getUser() ⽅方法进行测试。

@SpringBootTest
public class WebControllerTest {
//省略略部分代码
@Test
public void getUser() throws Exception {
String responseString = mockMvc.perform(MockMvcRequestBuilders.post("/getU
ser"))
.andReturn().getResponse().getContentAsString();
System.out.println("result : "+responseString);
}
}

这里的测试代码和上面的稍有区别,“.andReturn().getResponse().getContentAsString(); ”的意思是获取请求的返回信息,并将返回信息转换为字符串,最后将请求的响应结果打印出来。执⾏完 Test,返回结果如下:

D:\software\java1.8.40\jdk1.8.0_40\bin\java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:65046,suspend=y,server=n -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:C:\Users\Mac\.IntelliJIdea2017.3\system\captureAgent\debugger-agent.jar=C:\Users\Mac\AppData\Local\Temp\capture.props -Dfile.encoding=UTF-8 -classpath "G:\idea2017\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar;G:\idea2017\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit-rt.jar;G:\idea2017\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit5-rt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\charsets.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\deploy.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\access-bridge-64.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\cldrdata.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\dnsns.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\jaccess.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\jfxrt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\localedata.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\nashorn.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunec.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunjce_provider.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunmscapi.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunpkcs11.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\zipfs.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\javaws.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jce.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfr.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfxswt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jsse.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\management-agent.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\plugin.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\resources.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\rt.jar;M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web\target\test-classes;M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web\target\classes;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.5.RELEASE\spring-boot-starter-web-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.5.RELEASE\spring-boot-starter-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.5.RELEASE\spring-boot-starter-logging-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Mac\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Mac\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Mac\.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;C:\Users\Mac\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Mac\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Mac\.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.5.RELEASE\spring-boot-starter-json-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.6\jackson-core-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.6\jackson-datatype-jdk8-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.6\jackson-datatype-jsr310-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.6\jackson-module-parameter-names-2.9.6.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.5.RELEASE\spring-boot-starter-tomcat-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.34\tomcat-embed-core-8.5.34.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.34\tomcat-embed-el-8.5.34.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.34\tomcat-embed-websocket-8.5.34.jar;C:\Users\Mac\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.12.Final\hibernate-validator-6.0.12.Final.jar;C:\Users\Mac\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Mac\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Mac\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-web\5.0.9.RELEASE\spring-web-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-beans\5.0.9.RELEASE\spring-beans-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-webmvc\5.0.9.RELEASE\spring-webmvc-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-aop\5.0.9.RELEASE\spring-aop-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-context\5.0.9.RELEASE\spring-context-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-expression\5.0.9.RELEASE\spring-expression-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-devtools\2.0.5.RELEASE\spring-boot-devtools-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot\2.0.5.RELEASE\spring-boot-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.5.RELEASE\spring-boot-autoconfigure-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.5.RELEASE\spring-boot-starter-test-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-test\2.0.5.RELEASE\spring-boot-test-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.5.RELEASE\spring-boot-test-autoconfigure-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Mac\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Mac\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Mac\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Mac\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\Mac\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Mac\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Mac\.m2\repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;C:\Users\Mac\.m2\repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;C:\Users\Mac\.m2\repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;C:\Users\Mac\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Mac\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Mac\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Mac\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Mac\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-core\5.0.9.RELEASE\spring-core-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-jcl\5.0.9.RELEASE\spring-jcl-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-test\5.0.9.RELEASE\spring-test-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 com.neo.web.WebControllerTest,getUser
Connected to the target VM, address: '127.0.0.1:65046', transport: 'socket'
21:10:44.270 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
21:10:44.275 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
21:10:44.276 [main] DEBUG org.springframework.core.env.StandardEnvironment - Initia
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值