Java服务器部署springboot 的web项目
1.使用idea创建springboot web项目
在springboot中配置jsp问题多多,暂时还没解决。且由于springboot不建议使用.jsp,所以这里我使用.html来做。创建工程和目录文件都按照以下步骤并保持一致,是没有错误的。
idea创建新project:
new-> project-> spring initializr-> next-> (修改Artifact为:webtest)-> next-> next ->finish
工程创建完成后,修改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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>webtest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>webtest</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<!--必需-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<!--必需-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<!--解析html必需-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<!--测试,非必需-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<!--自动配置工程,必需-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--开发编译插件,必需-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
等待工程依赖加载完成,创建一些必需的文件夹和文件,最好按照如图结构,否则可能出错:
各文件内容如下:
helloworld.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
<link rel="stylesheet" href="/css/test.css" type="text/css" />
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
test.css
body{
color: red;
}
application.yml
#服务端口号
server:
port: 3002
webController
注意这里使用@Controller标注,不是@RestController
package com.example.webtest.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/api")
public class webController {
@RequestMapping("/helloworld")
public String helloworld(){
return "helloworld";
}
}
至此工程创建完毕,运行一下:
可能遇到的错误及解决方案:
- 500错误
注意pom中thymeleaf的配置。
由于thymeleaf无法解析jsp,所以访问jsp也会出现500错误。 - 404错误
注意html文件所在文件夹结构是否如上方结构图所示,按照那个结构来建立。
2.springboot web使用本地静态资源
springboot使用静态资源很简单,按如下步骤即可。但是打成jar包在服务器运行时有些不同,接下来一步步的来做。
先看本地效果如图:
步骤:随便找一张图片,我这里使用op.png,放入image文件夹,并且修改test.css
test.css:
body{
此处的url路径为相对路径,关于工程中路径的使用见下方说明
background-image: url(../image/op.png);
position: absolute;
background-repeat:no-repeat;
background-size: 200px 100px;
top: 30px;
color:red;
}
css中的相对路径和绝对路径:
“.” 代表当前所在目录,相对路径。如:<a href="./abc">文本</a>或<img src="./abc" />;
“…” 代表上一层目录,相对路径。如:<a href="…/abc">文本</a>或<img src="…/abc"/>;
“…/…/” 代表的是上一层目录的上一层目录,相对路径。 如:<img src="…/…/abc" />;
“/” 代表根目录,绝对路径。 如:<a href="/abc">文本</a>或<img src="/abc"/>;
“D:/abc/” 代表根目录,绝对路径。
参考:https://zhidao.baidu.com/question/583441244.html
此时在本地可访问css及image资源,接下来将工程打包在服务器运行。
3.springboot web使用服务器静态资源
将工程打jar包上传到服务器,此时直接运行jar包,在浏览器中访问此页面,发现网页是获取不到css文件和图片的。并且考虑到静态资源的体积可能越来越大的问题,可以单独将静态资源上传到服务器中,这样当运行jar包时,直接访问服务器中的静态资源即可。
接下来是详细步骤:
3.1.修改pom文件的build标签配置,打包时跳过resources目录:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<excludes>
<exclude>resources/**</exclude>
</excludes>
</resource>
</resources>
</build>
3.2.打包工程并上传到服务器,同时将资源文件上传到服务器。
这里我将jar传到目录:
scp webtest-0.0.1-SNAPSHOT.jar root@你的域名.com:/root/Desktop/zjs/
将resources传到目录:
scp -r /root/workspace/java/webtest/target/classes/resources root@你的域名.com:/root/Desktop/zjs/resources/api/test/
此时运行,发现确实无法获取css文件。还需要配置nginx监听。
3.3.配置nginx映射服务器静态资源
在nginx.conf文件中加入以下配置,注意nginx.conf文件头可能有一个注释掉的#user xxx
,将#号删除并改为user root。否则之后会出现403 forbidden错误。
ngxin.conf,修改并保存重载:
location /resources/ {
root /root/Desktop/zjs/;
autoindex on;
}
/usr/local/nginx/sbin/nginx -s reload //重载nginx配置
此时基本配置已完成,将helloworld.html中的css路径修改一下,然后重新打包上传到服务器并运行:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
// 此处href路径如下
<link rel="stylesheet" href="/resources/api/test/css/test.css" type="text/css" />
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
在浏览器中访问,发现还是未加载css文件,原因是上传静态资源文件时多传了一个根目录到服务器中,将里面的资源文件移动到上级目录即可,步骤如下:
再次访问,成功,效果如图:
这个demo地址:https://github.com/Jason-zzzz/webtest
参考:
linux使用Nginx搭建静态资源服务器:https://www.cnblogs.com/tangyin/archive/2018/09/25/9700852.html
nginx操作:https://www.cnblogs.com/fhen/p/5896105.html
nginx多端口:https://blog.csdn.net/springlustre/article/details/75173653
springboot配置jsp支持:https://blog.csdn.net/uniqueweimeijun/article/details/82151559