SpringBoot入门及基本使用

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

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

SpringBoot基础配置

web.xml保持原样即可:

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

pom.xml配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>groupId</groupId>
  7. <artifactId>863Project1</artifactId>
  8. <version>1.0.0</version>
  9. <!--以war包形式打包,很关键!-->
  10. <packaging>war</packaging>
  11. <parent>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>1.5.3.RELEASE</version>
  15. </parent>
  16. <dependencies>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-web</artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>com.alibaba</groupId>
  23. <artifactId>fastjson</artifactId>
  24. <version>1.2.22</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-tomcat</artifactId>
  29. <scope>provided</scope>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-configuration-processor</artifactId>
  34. <optional>true</optional>
  35. </dependency>
  36. </dependencies>
  37. <!--支持maven-->
  38. <build>
  39. <plugins>
  40. <plugin>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-maven-plugin</artifactId>
  43. </plugin>
  44. </plugins>
  45. </build>
  46. </project>

启动入口 SpringBootApplication MainController.java

  1. package com.springboot;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.boot.builder.SpringApplicationBuilder;
  5. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  6. import org.springframework.boot.web.support.SpringBootServletInitializer;
  7. import org.springframework.context.annotation.ComponentScan;
  8. /**
  9. * Author: puyangsky
  10. * Date: 17/5/7
  11. */
  12. @SpringBootApplication
  13. @EnableConfigurationProperties
  14. @ComponentScan(basePackages = {"com.springboot"})
  15. public class Application extends SpringBootServletInitializer {
  16. @Override
  17. protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
  18. return application.sources(Application.class);
  19. }
  20. }

Controller层跳转到页面

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

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

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

静态资源访问

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

一、修改application.properties:

加入以下配置:

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

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

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

StaticConfig.java

  1. package com.springboot.config;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  4. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  5. /**
  6. * Author: puyangsky
  7. * Date: 17/5/8
  8. */
  9. @Configuration
  10. public class StaticConfig extends WebMvcConfigurerAdapter {
  11. @Override
  12. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  13. registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
  14. super.addResourceHandlers(registry);
  15. }
  16. }

中文乱码解决

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

  1. spring.http.encoding.force=true
  2. spring.http.encoding.charset=UTF-8
  3. spring.http.encoding.enabled=true
  4. server.tomcat.uri-encoding=UTF-8

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

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

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

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

前后端交互例子

实体类:User.java

  1. package com.springboot.model;
  2. /**
  3. * Author: puyangsky
  4. * Date: 17/5/9
  5. */
  6. public class User {
  7. private String email;
  8. private String password;
  9. public String getEmail() {
  10. return email;
  11. }
  12. public void setEmail(String email) {
  13. this.email = email;
  14. }
  15. public String getPassword() {
  16. return password;
  17. }
  18. public void setPassword(String password) {
  19. this.password = password;
  20. }
  21. }

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

  1. @Controller
  2. @RequestMapping("/api")
  3. public class ApiController {
  4. @RequestMapping(value = "/login", method = RequestMethod.POST, consumes = "application/json")
  5. @ResponseBody
  6. String login(HttpServletRequest request, @RequestBody User user) {
  7. if (user == null)
  8. return "fail";
  9. if (user.getEmail().equals("admin@osvt.net") && user.getPassword().equals("123456")){
  10. request.getSession().setAttribute("user", "admin");
  11. return "success";
  12. }else {
  13. return "fail";
  14. }
  15. }
  16. }

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

  1. <script>
  2. $("#submit").click(function () {
  3. var email = $("#inputEmail").val();
  4. var pwd = $("#inputPassword").val();
  5. var user = {"email": email, "password": pwd};
  6. $.ajax({
  7. url:"api/login", //指定POST的API地址
  8. type:"POST",
  9. contentType: 'application/json', //指定json格式
  10. async:false, //默认为异步,false指定为同步
  11. timeout:1000,
  12. data: JSON.stringify(user), //json化对象
  13. success:function(result){
  14. if (result == "success") {
  15. $("#loginSuccess").html("登录成功").show().delay(2000).hide(0);
  16. setTimeout(function () {
  17. window.location.href = "/index";
  18. }, 2000);
  19. }else {
  20. $("#loginSuccess").html("登录失败").show().delay(2000).hide(0);
  21. setTimeout(function () {
  22. window.location.href = "/login";
  23. }, 2000);
  24. }
  25. },
  26. error:function (xhr,status) {
  27. alert("error: " + status);
  28. window.location.href = "/login";
  29. }
  30. });
  31. });
  32. </script>

注意:

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

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

    1. 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. User-Agent大全

    一.基础知识篇: Http Header之User-Agent User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA.它是一个特殊字符串头 ...

  2. 关于Re模块的一些基础知识(另附一段批量抓代理ip的代码)

    1.常用匹配规则 . 表示任意字符[0-9] 用来匹配一个指定的字符类别[^5]表示除了5之外的其他字符,^不在字符串的开头,则表示它本身.* 对于前一个字符重复0到无穷次+ 对于前一个字符重复1到无 ...

  3. Vue笔记之模板语法

    插值 比较常用的就是插值,插值就是{{ foobar }}用两个大括号包起来的一个变量,显示的时候会将双大括号标签替换为这个变量的值. 基本的用法就是: <p>{{ message }}& ...

  4. Dijkstra算法(转)

    基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算). 此外,引进两个集合S和U.S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求 ...

  5. 28 - 生成器交互-__slots__-未实现异常

    目录 1 生成器交互 2 slots 3 未实现和未实现异常 4 Python的对象模型 1 生成器交互 生成器提供了一个send方法用于动态的和生成器对象进行交互.怎么理解的呢?看下面的例子: de ...

  6. julia 1.0如何使用pkg

    输入]进入pkg模式 add 加包名即可安装,如 add Cxx

  7. python中的pydoc

    在终端上输入pydoc会显示以下信息 pydoc - the Python documentation tool pydoc <name> ... Show text documentat ...

  8. python模块之itertools

    在循环对象和函数对象中,我们了解了循环器(iterator)的功能.循环器是对象的容器,包含有多个对象.通过调用循环器的next()方法 (__next__()方法,在Python 3.x中),循环器 ...

  9. [ python ] FTP作业进阶

    作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...

  10. [Linux: vim]vim自动生成html代码

    如果直接将vim编辑的文字复制粘贴到一些blog的编辑器中,这些代码将会是死板的白纸黑字.如果能加入关键字高亮功能就好了,这样代码阅读起来会很方便.一些blog的编辑器提供了这项功能,一些没有,一些支 ...