SpringBoot入门及基本使用

SpringBoot的介绍我就不多说了,核心的就是“约定大于配置”,接下来直接上干货吧!

本文的实例: github-LPCloud,欢迎star&fork。

SpringBoot基础配置

web.xml保持原样即可:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!--<welcome-file-list>-->
<!--<welcome-file>index.html</welcome-file>-->
<!--</welcome-file-list>-->
</web-app>

pom.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>groupId</groupId>
<artifactId>863Project1</artifactId>
<version>1.0.0</version>
<!--以war包形式打包,很关键!-->
<packaging>war</packaging> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.22</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<!--支持maven-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

启动入口 SpringBootApplication MainController.java

package com.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan; /**
* Author: puyangsky
* Date: 17/5/7
*/ @SpringBootApplication
@EnableConfigurationProperties
@ComponentScan(basePackages = {"com.springboot"})
public class Application extends SpringBootServletInitializer { @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}

Controller层跳转到页面

修改appliction.properties,增加以下配置:

# 配置jsp文件的位置,默认位置为:src/main/webapp
spring.mvc.view.prefix=/views/
# 配置jsp文件的后缀
spring.mvc.view.suffix=.html

因此在Controller层返回一个字符串如“index”可以映射到src/main/webapp/views/index.html,即跳转到该页面。

静态资源访问

两种方式可以实现静态资源访问,参考文章

一、修改application.properties:

加入以下配置:

# 默认值为 /**
spring.mvc.static-path-pattern=
# 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
spring.resources.static-locations=/static/,这里设置要指向的路径,多个使用英文逗号隔开,

注意这里有个非常坑的地方,SpringBoot默认的classpath为/src/main/resources目录,也就是说在spring.resources.static-locations中配置的地址都是在这个文件夹下面,放在其他地方就无法访问了,直接报404。

二、自定义配置,增加资源处理器:

StaticConfig.java

package com.springboot.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /**
* Author: puyangsky
* Date: 17/5/8
*/
@Configuration
public class StaticConfig extends WebMvcConfigurerAdapter { @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
super.addResourceHandlers(registry);
}
}

中文乱码解决

向application.properties中添加以下配置,参考文章

spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8

@Autowired、@Resource无法自动注入Bean

开始我也遇到了这个问题,搜索之后看到这篇文章,其中的原因是启动入口Application.java的位置太深入了,如果没有手动对扫描的包进行配置,如

@ComponentScan(basePackages = {"com.springboot"})

Spring就不会对相应的层级进行扫描,而只扫描Applciation.java当前及其中的类,所以一种范式就是把入口启动文件放在最外层,或者自己手动配置一下扫描的包。

前后端交互例子

实体类:User.java

package com.springboot.model;

/**
* Author: puyangsky
* Date: 17/5/9
*/
public class User {
private String email;
private String password; public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}

Controller层代码,POST请求,接收json格式,使用@RequestBody将接收到数据转换为User对象,并用@ResponseBody注解将字符串直接返回到前端。

@Controller
@RequestMapping("/api")
public class ApiController { @RequestMapping(value = "/login", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
String login(HttpServletRequest request, @RequestBody User user) {
if (user == null)
return "fail";
if (user.getEmail().equals("admin@osvt.net") && user.getPassword().equals("123456")){
request.getSession().setAttribute("user", "admin");
return "success";
}else {
return "fail";
}
}
}

前端页面使用ajax与后端API交互,html文件太长就不全贴上来了只放核心部分,文件地址

<script>
$("#submit").click(function () {
var email = $("#inputEmail").val();
var pwd = $("#inputPassword").val();
var user = {"email": email, "password": pwd};
$.ajax({
url:"api/login", //指定POST的API地址
type:"POST",
contentType: 'application/json', //指定json格式
async:false, //默认为异步,false指定为同步
timeout:1000,
data: JSON.stringify(user), //json化对象
success:function(result){
if (result == "success") {
$("#loginSuccess").html("登录成功").show().delay(2000).hide(0);
setTimeout(function () {
window.location.href = "/index";
}, 2000);
}else {
$("#loginSuccess").html("登录失败").show().delay(2000).hide(0);
setTimeout(function () {
window.location.href = "/login";
}, 2000);
}
},
error:function (xhr,status) {
alert("error: " + status);
window.location.href = "/login";
}
});
});
</script>

注意:

  • 如果前后端数据格式没有对上,比如后端实体类参数和前端发送的json数据不匹配,就会报400Error。

  • 我在使用ajax过程中遇到一个诡异的错误:

      org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

    也没有搜到合适的方式解决,只是说原因是因为后端还在发送数据,前端就将这个连接关闭,比如说页面跳转,那么这个连接肯定就关闭了(http协议底层是TCP连接)。所以我猜测是ajax异步搞的鬼,将ajax的async调为false,即使用同步方式请求后端API,问题就消失了。

【Java】SpringBoot入门学习及基本使用的更多相关文章

  1. java多线程入门学习(一)

    java多线程入门学习(一) 一.java多线程之前 进程:每一个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销.一个进程包括1--n个线程.     线程:同一类线程共享代码 ...

  2. SpringBoot入门学习看这一篇就够了

    1.SpringBoot是什么? SpringBoot是一套基于Spring框架的微服务框架. 2.为什么需要SpringBoot 由于Spring是一个轻量级的企业开发框架,主要的功能就是用于整合和 ...

  3. SpringBoot入门学习(一)

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我 ...

  4. springboot入门学习1

    springboot学习1 SpringBoot对Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑 业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中 ...

  5. SpringBoot入门学习记录(一)

    最近,SpringBoot.SpringCloud.Dubbo等框架非常流行,作为Coder里的一名小学生,借着改革开放的东风,自然也是需要学习学习的,于是将学习经历记录于此,以备日后查看. 官网:h ...

  6. Java Web入门学习(四)Eclipse与Maven、Tomcat整合配置

    Java Web学习(四)Eclipse与Maven整合配置 一.准备工作 1.Tomcat 8.5.15 2.Maven3.5 3.Eclipse Neon.3 Release (4.6.3) 二. ...

  7. springboot入门学习-helloworld实例

    今天学习了springboot,发现使用springboot创建项目确实非常方便,创建第一个springboot项目之前先看一下下面两个问题. 一.什么是springboot? Spring Boot ...

  8. java struts2入门学习--OGNL语言常用符号和常用标签学习

    一.OGNL常用符号(接上一篇文章): 1.#号 1)<s:property value="#request.username"/> 作用于struts2的域对象,而不 ...

  9. java struts2入门学习--OGNL语言基本用法

    一.知识点学习 1.struts2中包含以下6种对象,requestMap,sessionMap,applicationMap,paramtersMap,attr,valueStack; 1)requ ...

随机推荐

  1. [转]memmove、memcpy和memccpy

    原文地址:http://www.cppblog.com/kang/archive/2009/04/05/78984.html 在原文基础上进行了一些小修改~ memmove.memcpy和memccp ...

  2. Javascript判断Chrome浏览器

    今天分享一下如何通过Javascript来判断Chrome浏览器,这里是通过userAgent判断的,检测一下userAgent返回的字符串里面是否包含“Chrome”, 具体怎么检测是通过index ...

  3. 如何阻止自动更新‘updated_at’和'created_at'

    可以在模版中添加一条代码: public $timestamps = false;

  4. NYOJ 739 笨蛋难题四 (数学)

    题目链接 描述 这些日子笨蛋一直研究股票,经过调研,终于发现xxx公司股票规律,更可喜的是 笨蛋推算出这家公司每天的股价,为了防止别人发现他的秘密.他决定对于这家公司的 股票最多买一次,现在笨蛋已经将 ...

  5. three.js轨道控制器OrbitControls.js

    https://blog.csdn.net/qq_37338983/article/details/78575333 文章地址

  6. flask基础之安装和使用入门(一)

    前言 Flask框架作为一个python极简化的web框架,它不像Django那样的重型,非常适合快速开发一些小型的应用.本人用flask开发了几个项目之后,慢慢研究flask底层的一些原理,开始一步 ...

  7. $FFT$(快速傅里叶变换)

    - 概念引入 - 点值表示 对于一个$n - 1$次多项式$A(x)$,可以通过确定$n$个点与值(即$x$和$y$)来表示这唯一的$A(x)$ - 复数 对于一元二次方程 $$x^2 + 1 = 0 ...

  8. 在flask中返回requests响应

    在flask服务端,有时候需要使用requests请求其他url,并将响应返回回去.查阅了flask文档,About Responses,可以直接构造响应结果进行返回. If a tuple is r ...

  9. JSP、EL表达式、JSTL

    JSP 1.什么是jsp? Java Server Pages: java服务器端页面.可以理解为一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码.其本质就是一个Servlet. ...

  10. Copy List with Random Pointer——技巧

    A linked list is given such that each node contains an additional random pointer which could point t ...