Springboot的正确打开方式

版权声明:非商业性使用,禁止演绎,转载请保留原文链接及作者 https://blog.csdn.net/qq_39478237/article/details/89577604

听说springboot很久了,今天就上手来玩玩,以下是我开始玩的记录。
首先就是创建一个springboot 的一个quickstart的项目。

创建项目

create


完成项目的创建还不够,此时你的maven项目中依赖文件还没有导入,你需要将pom.xml文件配置如下,当然name根据自己配置,然后右键项目找到mavenreimport,成功的话项目中会出现很多springboot的依赖包

  <name>Springboot_Test</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <!-- spring boot-->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
  </parent>

  <dependencies>
    <!--spring boot 配置web依赖-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

测试

首先创建一个HelloController类,当创建好之后,我们运行该项目,然后在浏览器访问localhost://8080/hello 会会出现Hello,Spring boot

@RestController
@EnableAutoConfiguration
public class HelloController {
 
    @RequestMapping("hello")
    @ResponseBody
    public String hello(){
        return "Hello,Spring boot";
    }
    public static void main(String[] args) {
        //启动springboot项目
        SpringApplication.run(HelloController.class,args);
    }
}

启动方式

one

第一种方法就是上面的测试写法,将main函数写在controller中,但是这样写的弊端就是一个控制器中只有一个main,一次只能启动一个controller,因此这样的写法是不推荐。

two

第二种方法其实采用的原理就是包扫描,

首先创建一个App类,如下:

@EnableAutoConfiguration  //自动配置spring,当然,这里有的话其他文件中就不需要在写
@ComponentScan(basePackages = "com.lxk.web.controller") //扫描该包下的
public class App
{
    public static void main( String[] args )
    {
        //启动springboot项目
        SpringApplication.run(App.class,args);
    }
}

注解解释:
@EnableAutoConfiguration
注解的作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,这就减少了开发人员的工作量。

注解@RestController@RequestMapping由 Spring MVC 提供,用来创建 REST 服务。这两个注解和 Spring Boot 本身并没有关系。

Spring Boot依赖介绍

spring-boot-starter		核心 POM,包含自动配置支持、日志库和对 YAML 配置文件的支持。
spring-boot-starter-amqp	通过 spring-rabbit 支持 AMQP
spring-boot-starter-aop	包含 spring-aop 和 AspectJ 来支持面向切面编程(AOP)。
spring-boot-starter-batch	支持 Spring Batch,包含 HSQLDB。
spring-boot-starter-data-jpa	包含 spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA。
spring-boot-starter-data-mongodb	包含 spring-data-mongodb 来支持 MongoDB。
spring-boot-starter-data-rest	通过 spring-data-rest-webmvc 支持以 REST 方式暴露 Spring Data 仓库。
spring-boot-starter-jdbc	支持使用 JDBC 访问数据库
spring-boot-starter-security	包含 spring-security。
spring-boot-starter-test	包含常用的测试所需的依赖,如 JUnit、Hamcrest、Mockito 和 spring-test 等。
spring-boot-starter-velocity	支持使用 Velocity 作为模板引擎。
spring-boot-starter-web	支持 Web 应用开发,包含 Tomcat 和 spring-mvc。
spring-boot-starter-websocket	支持使用 Tomcat 开发 WebSocket 应用。
spring-boot-starter-ws	支持 Spring Web Services
spring-boot-starter-actuator	添加适用于生产环境的功能,如性能指标和监测等功能。
spring-boot-starter-remote-shell	添加远程 SSH 支持
spring-boot-starter-jetty	使用 Jetty 而不是默认的 Tomcat 作为应用服务器。
spring-boot-starter-log4j	添加 Log4j 的支持
spring-boot-starter-logging	使用 Spring Boot 默认的日志框架 Logback
spring-boot-starter-tomcat	使用 Spring Boot 默认的 Tomcat 作为应用服务器。

web开发介绍

静态资源的访问

在我们开发Web应用的时候,需要引用大量的js、css图片等静态资源。
Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:

/static
/public
/resources
/META-INF/resources

示例:
我们可以在src/main/resources/目录下创建static/imgs,在该位置放置一个图片文件。启动程序后,尝试访问http://localhost:8080/imgs/d.jpg。如能显示图片,配置成功。

自动返回json格式数据

注解说明:
@RestController 相当于Controller 提供restful风格
@RequestMapping("login") 映射路径
@ResponseBody 响应体-自动返回json格式字符串

@RestController
public class UserController {
    @RequestMapping("login")
    @ResponseBody
    public Map<String,Object> login(String username,String password){
        Map<String,Object> map = new HashMap<String,Object>();
        if("lxk".equals(username) && "123".equals(password)){
            map.put(username,password);
        }else {
            map.put("success",1);
            map.put("errMsg","");
        }
        return map;
    }
 }

http://localhost:8080/login?username=lxk&password=123
当运行时,我们访问该链接时浏览器打印如下:
{"lxk":"123"}

全局捕获异常

  • @ExceptionHandler 表示拦截异常
  • @ControllerAdvice
    controller 的一个辅助类,最常用的就是作为全局异常处理的切面类,可以指定扫描范围,
    约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用
  • @ResponseBody 进行 json 转换

示例:
在刚才的方法中,定义一个算术异常,int i=10/0;如下:

@RestController
public class UserController {
    @RequestMapping("login")
    @ResponseBody
    public Map<String,Object> login(String username,String password){
        Map<String,Object> map = new HashMap<String,Object>();
        int i=10/0;
        if("lxk".equals(username) && "123".equals(password)){
            map.put(username,password);
        }else {
            map.put("success",1);
            map.put("errMsg","");
        }
        return map;
    }
 }

定义异常捕获类

@ControllerAdvice  //切面
public class GlobalException {
    @RequestMapping("exceptionHander")
    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Map<String,Object> exceptionHander(){
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("1","101");
        map.put("errmsg","系统错误");
        return  map;
    }
}

http://localhost:8080/login?username=lxk&password=123
当运行时,我们访问该链接时浏览器打印如下:

{"1":"101","errmsg":"系统错误"}

渲染web页面

模板引擎
在动态 HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。
Spring Boot提供了默认配置的模板引擎主要有以下几种:

  • Thymeleaf
  • FreeMarker
  • Velocity
  • Groovy
  • Mustache

Springboot+freemarker

Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性,具体可见后文:支持JSP的配置
当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。

既然说到FreeMarker,那我就说说FreeMaker的使用

Freemarker的使用

第一步:引入依赖包

pom.xml中的dependencies中加入以下依赖后,我们查看是否加入成功,选中pom.xml右键选择maven中的reimport

<!-- 引入freeMarker的依赖包. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
第二步:写控制器

创建一个StudentController控制类,Student的模板类

public class Student {
    private String name;
    private String sex;
    ...
    无参和有参构造
    setter/getter方法
}
@Controller
@RequestMapping("stu")
public class StudentController {

    @RequestMapping("/list")
    public String list(Model model){
        model.addAttribute("name","lxk");
        model.addAttribute("age",30);
        List<Student> stuList = new ArrayList<>();
        stuList.add(new Student("lxk","男"));
        stuList.add(new Student("ls","男"));
        stuList.add(new Student("wangwu","男"));

        model.addAttribute("stuList",stuList);

        return  "stu/list";
    }
 }

第三步:创建.ftl模板文件

在src/main/resources/创建一个templates文件夹,后缀为.ftl

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    欢迎你:${name}
    <table border="1">
        <tr>
            <td>姓名:</td>
            <td>性别:</td>
        </tr>
        <#list stuList?sort_by("name")?reverse as stu>
            <tr>
                <td>${stu.name}</td>
                <td>${stu.sex}</td>
            </tr>
        </#list>
    </table>
</body>
</html>

运行项目成功后,访问http://localhost:8080/stu/list 会出现预期结果,关于freeMarker后续请查阅相关资料进行学习.

猜你喜欢

转载自blog.csdn.net/qq_39478237/article/details/89577604