2021.11.08端口占用问题解决、Springboot的初级使用、多种注解的解释,网络错误代码,配置文件的替换

1、端口占用问题解决:

修改Tomcat的端口号,将占用端口的软件删除进程

查看当前端口被占用的命令:
win+R输入cmd
netstat - ano | findstr 8080
在这里插入图片描述
可以看到第一个占用了端口号8080
找到占用的进程命令: tasklist |findstr 13408
之后将进程退出,就可以使用该端口了。

如果在命令行中没有占用改端口的进程,那么就启动任务管理器。将java.exe全部结束

2、Spring Boot2的功能介绍:


在Spring Boot中,正常是不存在xml配置的。但是只是不推荐,并不是不支持

Spring Boot 主要提供了如下功能:

  1. 为所有基于 Spring 的 Java 开发提供方便快捷的入门体验。
  2. 开箱即用,有自己自定义的配置就是用自己的,没有就使用官方提供的默认的。
  3. 提供了一系列通用的非功能性的功能,例如:嵌入式服务器、安全管理、健康检测等。
  4. 绝对没有代码生成,也不需要XML配置。

3、Spring boot 创建

1、IDEA 新建New Projict > Spring Initializr > 使用官网的方式创建。之后创建Maven项目。打包方式为war包,语言为java。然后勾选工具,一般我们用到的:

web:spring Web、

SQL:Mybatis Framework,

Mysql:Driver 、Developer Tools :Lombok
之后就会自动导入。

2、也可以通过阿里云的官网进行配置再下载。
在这里插入图片描述

3、Spring Boot的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>com.ne</groupId>
    <artifactId>neu_shopping</artifactId>
    <version>1.5.2</version>

    <packaging>war</packaging>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.5.6</spring-boot.version>
        <mybatis-spring.version>2.2.0</mybatis-spring.version>
        <maven-compiler.version>3.8.1</maven-compiler.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring.version}</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <optional>true</optional>
        </dependency>

        <!-- jstl依赖 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <!-- jsp依赖 -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring-boot.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler.version}</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.neu.springbootdemo01.SpringbootDemo01Application</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

就会进行自动导包了。如果pom报红,说明包没完全导入,修改一些jdk和包的路径就行了。

此时的代码列表应该是:
在这里插入图片描述

在HelloController中

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello Spring Boot";
    }

}

这时候就可以通过spring,访问web项目了
,地址栏输入:http://localhost:8080/hello,就可以看到index.jsp的内容。

4、解决依赖下载不完整的问题

在这里插入图片描述
在idea的配置中找到Maven, 本地打开Maven home directiry的目录,将这个文件夹删除,再对pom.xml进行配置。耐心等待几分钟,就可以下载完成。原因。下载不成功有可能是之前的没有下载完整,重新下载可能进行冲突。所以重新下载就可以了/
在这里插入图片描述
重新下载完成,再更新一下,就可以使用了

我们在pom.xml中加入

    <packaging>war</packaging>


<!--        jstl依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>


<!--   jsp依赖-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>

新的pom文件:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.neu</groupId>
    <artifactId>springboot-demo01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-demo01</name>
    <description>Demo project for Spring Boot-在阿里云镜像官网直接创建SpringBoot项目</description>
    <packaging>war</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.5.6</spring-boot.version>
        <mybatis-spring.version>2.2.0</mybatis-spring.version>
        <maven-compiler.version>3.8.1</maven-compiler.version>
    </properties>



    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring.version}</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <optional>true</optional>
        </dependency>


<!--        jstl依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>


<!--   jsp依赖-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring-boot.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler.version}</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.neu.springbootdemo01.SpringbootDemo01Application</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

同时在src下新建webapp目录,(我们在修改pom文件之后就可以看到,出现了一个小十字符号,说明打包方式是war,可以应用。),在该目录下新建index.jsp
此时重新运行spring,直接打开还是404,但是在地址栏输入http://localhost:8080/index.jsp就可以看到我们写的内容。那么我们如何才能打开8080端口就直接访问index.jsp呢?

5、Spring中application.properties配置文件讲解


这个文件名不能随便进行修改,只能是指定的。

内容:

# 应用名称
spring.application.name=springboot-demo01

# 应用服务 WEB 访问端口,可以进行修改
server.port=8080


#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.neu.springbootdemo01.mybatis.entity

# 数据库驱动:,这里的cj是5.0版本以后必须有的,如果是5.0版本以前的就可以不写
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址,这里的连接地址,需要和数据库的连接地址一致,否则就无法正确的连接
spring.datasource.url=jdbc:mysql://localhost:3306/shopping01?characterEncoding=UTF-8&amp;serverTimezone=UTC

# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=123456


数据库的驱动,为什么会有cj呢?
在这里插入图片描述

因为在导入的库中,cj是一个路径。

6、Spring中的视图解析器

在Spring中其实没有给我们进行默认的视图配置,如果不信我们可以进行视图解析器的尝试

@Controller
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

在通常的项目中,这样进行注解的配置,一般如果在webapp中有hello.jsp就会可以打开hello.jsp,但是在spring中,你不管将hello.jsp放在webapp/hello.jsp还是放置webapp/WEB-INF/jsp/hello.jsp中。都无法打开。而且报错都是:
在这里插入图片描述

报错翻译是:查看你的视图解析器有没有进行配置。

我们该如何解决这个视图解析器的问题呢?
我们可以在application.properties文件最下层中加入:

#视图解析器:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

我们在地址栏输入:http://localhost:8080/hello,就可以正常的访问了。
问题:为什么我们的注解不同时,视图表现得不同?
当注解为@RestController时,我们访问http://localhost:8080/hello页面,出现得是hello。但是当注解为@Controller时,还需要配置application.properties才可以出现正确得页面呢?

7、@RestController和@Controller的区别,多种注解的解释


新建一个entity》User.java

package com.neu.springbootdemo01.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class User {
    private String username;
    private String password;
}

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }

    @GetMapping("user")
    public User u1(){
        return new User("小娃","12346");

    }
}

这里idea虽然是报错的,但是仍然可以运行。而且可以将数值返回出来
在这里插入图片描述
可以看出,这里的响应格式就是json格式的。所以表明@RestController是返回json格式的。
在User中,我们还用了一个lombok的注解:

@AllArgsConstructor,所有参数的构造器

@NoArgsConstructor,无参构造器

 //@AllArgsConstructor
    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
    //@NoArgsConstructor
    public User() {
    }

@Date相当于产生get和set方法 toString方法。

注释@GetMapping("/user")和之前的@RequestMapping(value="/user",method= RequestMethod.GET)意义相同。都是使用GET方法。

注释@ResponseBody的意思是代表返回类型为json
注释@RequestBody的意思是请求类型为json

原因: 注解为@RestController:表示返回数据类型为JSON
注解为@Controller:如果是字符串类型String,表示返回默认视图名称。

8、网络错误代码:

400(Bad Request):错误的请求,请求格式不一致,参数类型不一致,请求出现语法错误

404(Not Found):未找到,没有找到目录或者文件

405(Method Not Allwed):用来访问本页面的HTTP谓词不被允许,方法不允许。请求方法(GET、POST、HEAD、delete、Put、Trace等)对指定资源不适用

100:Cintunue请求已接受,客户应当继续发送请求的其余部分。

200:OK 一切正常,对GET和POST的请求的应答文档在后面。

500:内部服务器错误

501:未实现

502:网关错误

9、appliction.yml文件


用途和appliction.properties一致,但是优先级要比appliction.properties低。
为什么两个文件用途一致,还需要有两个呢?原因:
在appliction.properties文件中,我们在一些配置之前都需要写spring.xxxx.xxxxx再写配置参数。增加了我们的代码量。yum文件就可以简化我们的代码量。
内容:

server:
  #应用端口号
  port: 9999



spring:
  #应用名
  application:
    name: springboot-demo01
    #数据源
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    name: defaultDataSource
    password: root
    url: jdbc:mysql://localhost:3306/shopping01?characterEncoding=UTF-8&amp;serverTimezone=UTC
    username: 123456

#视图解析器:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp

  #Mybatis
mybatis:
  mapper-locations: classpath:mappers/*xml
  type-aliases-package: com.neu.springbootdemo01.mybatis.entity

可以和上面的appliction.properties进行对比。这个yml文件使用缩进的路径同一级的进行缩进,可以简化很多appliction.properties中重复的代码,而且这个yml文件,配置的名称和配置的参数颜色不同,很容易进行区分。

附上appliction.properties转换为appliction.yml格式的网址:

https://toyaml.com/index.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值