springboot概念及创建

1: 概念

  • springboot: 约定大于配置 : 去繁就简

  • javaweb: jsp+servlet

  • ssm: 对action和dao进行封装 配置麻烦

  • springboot: 简化配置

  • 设计目的是用来简化新spring应用的初始化搭建以及开发过程.改框架使用了特定的方式来进行配置,从而使开发人员不需要定义样版化的配置.通过这种方式,spring boot致力于在蓬勃发展的快速应用开发领域(rapid application development)称为领导者.

特点:

  • (1) 可以创建独立的[spring]应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

  • (2) 内嵌Tomcat或Jetty等Servlet容器,

  • (3) 提供自动配置的"starter"项目对象模型(poms)以简化[Maven]配置;为各种应用场景设置了不同的启动器

  • (4)尽可能自动配置Spring容器;

  • (5)提供准备好的特性,如指标、健康检查和外部化配置;

  • (6)绝对没有代码生成,不需要xml配置

  • 为所有 Spring 开发提供一个更快更广泛的入门体验

  • springboot框架中还有俩个非常重要的策略: 开箱即用和约定大于配置.
    开箱即用(Outofbox):是指在开发过程中,通过在Maven项目的pom文件中添加相关依赖的包,然后使用对应注解来代替繁琐的xml配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注与业务逻辑。

  • 约定大于配置(Convention over configuration):是一种由Springboot本身来配置目标结构,由开发人员在结构中添加信息的软件设计方式.这一特点虽然降低了部分灵活性,增加了bug定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的xml配置,并且可以将代码编译、测试和打包等工作自动化。

2: 案例一

  • new model —>spring initializr
    在这里插入图片描述

  • 指定项目的id

在这里插入图片描述

  • 选择技术

在这里插入图片描述

  • 存放位置
    在这里插入图片描述

  • 项目结构 就是典型的maven项目
    在这里插入图片描述

  • 创建action

    • action所在位置必须是启动类的同一个包/子包下
package com.zhiyou100.action;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class Test01 {
    @RequestMapping("/test01.action")
    @ResponseBody
    public String test01Method(){
        return "hello spring-boot231";
    }
}
  • 创建静态页面
    • 静态页面可以有四个位置
      在这里插入图片描述
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1><a href="/test01.action">hello spring-boot:::111</a></h1>
</body>
</html>
  • 运行启动类: 发布项目
    在这里插入图片描述

  • 查看控制台:

  • 项目port:8080 项目context-path: “”
    在这里插入图片描述

  • 访问
    默认欢迎页是:index.html
    在这里插入图片描述

3: springboot的热部署

  • 修改settings
    在这里插入图片描述
  • 修改registry
在编辑器中同时按四个键:alt+shift+ctrl+?  然后选择第一个选项registry

在这里插入图片描述

  • 在pom.xml中添加依赖
<!--添加热部署依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
  • 在pom.xml中修改maven插件的配置
<!--引入maven的插件:实现maven对项目构建的管理-->
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <!--以下配置是:热部署-->
    <configuration>
        <fork>true</fork>
        <addResources>true</addResources>
    </configuration>
</plugin>
  • 测试成功,热部署配置成功

4: springboot自定义logo

  • 上网搜索spring boot banner获取需要的图形文本
      ;,    .,,   ,,;,                   ,,
         '||:   :||||;;;::;         ,,,      ;|;
         ,||,;;, ||     ||          '|||     ||'
     ;|||;||;;'' ||||||;||          ,||    ,||' ,,,|||,
      '''|||;,,  ||''   ||          ||',, ,|'||||' ,|||'
       ,|;||'|;; ||||||;||         ,||||| '    ||  ''
      ;;':||  '';||''   ||   ,,|||'|| ||'      ||
    .''  :|;    :|||||;;;'   '|''  |,,|'   ,   ||  '||,
       , .'' .,,  '''.,,           ,|||,  ||   ||   '|||
      || |;   ';|;,   '||;,        ,|||, :||;  ||   '|||
     ;|| '|;    ';;:   '|;;;    ,||'' |||'||'  ||     ||
     :||  '|;,         ., ''    ''     '' ' ,,,||
      ''   '|;;:,,,,,,,,||,                  '|||
              ''::::::::''                    '''

            Thinking of you (Chinese: xiǎng nǐ)

            --by zaneau@hk.net (Zane Au)
  • 在resources目录下创建一个文件: banner.txt
    在这里插入图片描述

  • 重启项目,显示效果

5: 配置基本参数

  • 设置参数 都在application.properties 文件中
server.servlet.context-path=/test10
server.port=8081

在这里插入图片描述

6 : action方法的参数类型

完全和springmvc的action一致
  • 单值类型参数: 接受同名的请求参数
  • 对象类型参数: 通过属性接受同名的请求参数
  • httpservletrequest: 1获取请求参数 2 获取请求头 3 请求转发/请求包含 4 作为域对象 5 其他方法
  • httpservletresponse: 1 设置响应头 2 设置响应体 3 重定向 4 其他方法
  • httpsession: 1 域对象 2 清空session 3 获取servletcontext
  • model: request的域对象

action

package com.zhiyou100.action;

import com.zhiyou100.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * @author solang
 * @date 2021-06-17 19:15
 */
@Controller
public class Test02 {
    // 单值类型参数: 接受同名的请求参数
    @RequestMapping("/test021.action")
    @ResponseBody
    public String method1(Integer sid,String sname,Float score){
        return "method1:sid="+sid+",sname="+sname+",score="+score;
    }
    //对象类型参数: 通过属性接受同名的请求参数
    @RequestMapping("/test022.action")
    @ResponseBody
    public String method2(Student student){
        return "method1:"+student;
    }
    // httpservletrequest:1 获取请求参数 2 获取请求头  3 请求转发/请求包含 4 作为域对象 5 其他方法
    @RequestMapping("/test023.action")
    @ResponseBody
    public String method3(HttpServletRequest req)throws Exception{
        req.setCharacterEncoding("utf-8");
        return "method3:"+req.getParameter("sid")+":"+req.getParameter("sname")+":"+req.getParameter("score");
    }
    // httpservletresponse: 1 设置相应头 2 设置相应体 3 重定向  4 其他方法
    @RequestMapping("/test024.action")
    @ResponseBody
    public void method4(HttpServletRequest req,HttpServletResponse resp)throws Exception{
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf_8");
        resp.setContentType("text/html;charset=utf-8");
        String message="method4:"+req.getParameter("sid")+":"+req.getParameter("sname")+":"+req.getParameter("score");
        resp.getWriter().println(message);
    }
    // httpsession:1 域对象   2 清空session 3 获取servletcontext
    @RequestMapping("/test025.action")
    @ResponseBody
    public String method5(Student student, HttpSession session)throws Exception{
        session.setAttribute("student",student);
        return session.getAttribute("student").toString();
    }
    // model : request的域对象
    @RequestMapping("/test026.action")
    @ResponseBody
    public String method6(Student student, Model model){
        model.addAttribute("student",student);
        return model.getAttribute("student").toString();
    }
}

页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a  href="/test021.action?sid=101&sname=tom&sex=1&score=11">请求test021.action</a><br/>
<a  href="/test022.action?sid=101&sname=tom&sex=0&score=11">请求test022.action</a><br/>
<a  href="/test023.action?sid=101&sname=tom&sex=0&score=11">请求test023.action</a><br/>
<a  href="/test024.action?sid=101&sname=tom&sex=0&score=11">请求test024.action</a><br/>
<a  href="/test025.action?sid=101&sname=tom&sex=0&score=11">请求test025.action</a><br/>
<a  href="/test026.action?sid=101&sname=tom&sex=0&score=11">请求test026.action</a><br/>
</body>
</html>

7 : action方法返回值类型

  • String : 请求转发的页面的逻辑路径
  • ModelAndView : 封装了相应视图的路径和request域对象
  • void
  • json @responsebody
package com.zhiyou100.action;

import com.zhiyou100.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author solang
 * @date 2021-06-17 21:42
 */
@Controller
@RequestMapping("/t3")
public class Test03 {
    //Model And View: 封装了相应视图的路径和request域对象
    @RequestMapping("/m1.action")
    public ModelAndView method01(){
        System.out.println("m1::::请求转发到success.html:");
        ModelAndView view=new ModelAndView();
        view.setViewName("/success.html");
        return view;//请求转发到页面
        //测试结论:springboot的默认视图解析器: prefix和suffix都是
    }
    //void
    @RequestMapping("/m2.action")
    public void method02(HttpServletRequest req, HttpServletResponse resp)throws Exception{
        System.out.println("m2:::请求转发到success.html");
        req.getRequestDispatcher("/success.html").forward(req,resp);
    }
    // json @responsebody
    @RequestMapping("/m3.action")
    @ResponseBody
    public Student method03() throws Exception{
        return new Student(101,"张三",11f,1);
    }
    //String : 1 响应一个字符串
    @RequestMapping("/m4.action")
    @ResponseBody
    public String method04() throws Exception{
        return new Student(101,"张三",11f,1).toString();
    }
    // String : 2 请求转发到逻辑路径/真实路径
    @RequestMapping("/m5.action")
    public String method05() throws Exception{
        return "/success.html";
    }
    //String : 3 请求转发action/html
    @RequestMapping("/m6.action")
    public String method06()throws Exception{
        return "forward:/t3/m3.action";
    }
    //String : 4 重定向到action.html
    @RequestMapping("/m7.action")
    public String method07() throws Exception{
        return "redirect:/t3/m3.action";
    }
}

请求页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>测试action的返回值</h1>
<a  href="/t3/m1.action">请求/t3/m1.action</a><br/>
<a  href="/t3/m2.action">请求/t3/m2.action</a><br/>
<a  href="/t3/m3.action">请求/t3/m3.action</a><br/>
<a  href="/t3/m4.action">请求/t3/m4.action</a><br/>
<a  href="/t3/m5.action">请求/t3/m5.action</a><br/>
<a  href="/t3/m6.action">请求/t3/m6.action</a><br/>
<a  href="/t3/m7.action">请求/t3/m7.action</a><br/>
</body>
</html>

响应页面:success.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>success页面</h1>
</body>
</html>

8 : 使用lombok

lombok插件:给实体类提供基本的方法:有参/无参的构造方法 tostring方法 getset方法
  • 在pom.xml
<!--引入lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
  • 需要在idea中配置lombok的插件

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值