首页 > 编程语言 >TOMCAT和JAVA应用

TOMCAT和JAVA应用

时间:2024-09-03 10:49:43浏览次数:12  
标签:JAVA TOMCAT tomcat com magedu 应用 ubuntu java root

JDK 和 JRE

JRE只有运行环境,JDK是开发开发工具包(包含JRE)
# 使用LTS, 长期稳定版

 

安装JDK

#ubuntu22.04默认是openjdk-11,这个是开源的jdk。如果要用官方的要去oracle下载
#不管用openjdk还是用官方jdk都可以

#生产环境中没有特殊要求,用openjdk即可
[root@ubuntu ~]#apt list *jdk*    #查看可用jdk版本
[root@ubuntu ~]#apt update && apt install -y openjdk-11-jdk
[root@ubuntu ~]#java --version

#安装 Oracle 官方 JDK ARM64是arm芯片 x64是64位 inter芯片 RPM和Debian包,低版本没有Debian包(比如没有java8的deb包) Compressed Archive包需要解压缩,做配置,不需要编译了(linux系统通用) #在oracle下载deb和rpm包 (直接安装即可) jdk-11.0.24_linux-x64_bin.deb #ubuntu使用 jdk-11.0.24_linux-x64_bin.rpm #rocky使用 #Oracle JDK的二进制文件安装 # 下载版本x64 Compressed Archive [root@centos8 ~]#tar xvf jdk-8u241-linux-x64.tar.gz -C /usr/local/ [root@centos8 ~]#cd /usr/local/ [root@centos8 ~]#ln -s jdk1.8.0_241/ jdk #初始化环境变量 [root@centos8 ~]#vim /etc/profile.d/jdk.sh [root@centos8 ~]#cat /etc/profile.d/jdk.sh export JAVA_HOME=/usr/local/jdk #java程序运行所需环境变量(tomcat等需要) export PATH=$PATH:$JAVA_HOME/bin #方便使用java命令

java代码编译实例

#java代码
[root@ubuntu ~]#vim Hello.java
class Hello{  
    public static void main(String[] args)
    {  
        System.out.println("hello, world");  
    }  
}  

#编译成字节码文件
[root@ubuntu ~]#javac Hello.java
#生成class文件,无法查看(这个文件就是跨平台文件)
[root@ubuntu ~]#ls
Hello.class  Hello.java

#运行class文件,不用写后缀
[root@ubuntu ~]#java Hello
hello, world

 

Tomcat

#Tomcat是java编写的,必须跑在JVM上

java包格式: jar包, war包
jar包直接跑在JVM上,war包需要跑在tomcat上(tomcat跑在JVM上)

#安装
#直接apt安装
#ubuntu中的包安装版tomcat存在Bug(无法将资源配置到 catalina.base 目录之外)
#如果之前没有安装过java,也会自动安装openjdk-11-jre
[root@ubuntu ~]# apt install tomcat9*    #把doc,admin等相关功能一起安装
#这种方式安装文件路径需要找
[root@ubuntu ~]# systemctl status tomcat9.service
# 在浏览器中访问 http://10.0.0.151:8080


#二进制安装 Tomcat 
#官网下载,Binary Distributions(二进制,不用编译,解压就能用)
#Core核心包,下这个就行
#从tomcat官网下载
[root@ubuntu ~]#wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.91/bin/apache-tomcat-9.0.91.tar.gz
[root@ubuntu ~]#tar xf apache-tomcat-9.0.91.tar.gz -C /usr/local/
[root@ubuntu ~]#cd /usr/local/
[root@ubuntu local]#ln -sv apache-tomcat-9.0.91/ tomcat
'tomcat' -> 'apache-tomcat-9.0.91/'

#加环境变量
[root@ubuntu local]# ln -sv /usr/local/tomcat/bin/* /usr/local/bin/

#启动
[root@ubuntu local]#catalina.sh start
[root@ubuntu local]#ss -lntp | grep 8080
LISTEN 0      100                     *:8080            *:*    users:(("java",pid=1302,fd=43)) 
#浏览器访问测试
http://10.0.0.151:8080/

#查看版本
[root@ubuntu local]#catalina.sh version

#停止
[root@ubuntu local]#catalina.sh stop

#用systemctl去管理
#添加用户并修改文件属主属组
[root@ubuntu ~]# useradd -r -s /sbin/nologin tomcat
[root@ubuntu ~]# chown -R tomcat.tomcat /usr/local/tomcat/
#服务脚本
[root@ubuntu local]#vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
After=syslog.target network.target    #基于哪些资源之后启动(要求这些资源先启动)

[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

[root@ubuntu local]#systemctl daemon-reload

#启动服务
[root@ubuntu ~]# systemctl start tomcat.service 
[root@ubuntu ~]# systemctl status tomcat.service

 

Tomcat 组成

[root@ubuntu ~]# ls -1 /usr/local/tomcat/
bin # 管理脚本文件目录
BUILDING.txt    #编译的说明文件
conf # 配置文件目录
CONTRIBUTING.md
lib # 库文件目录
LICENSE
logs # 日志目录
NOTICE
README.md
RELEASE-NOTES
RUNNING.txt
temp # 临时文件目录
webapps # 应用程序目录(网站内容)
#work相当于缓存(有修改自动更新),删了不影响,就再次把jsp编译serlet和class走一遍
work # jsp编译后的结果文件(serlet和class),建议提前预热访问,升级应用后,删除此目录数据才能更新

目录结构

#注意tomcat访问路径和nginx不同,如果带路径,不在ROOT,还是和ROOT平级路径
http://10.0.0.200:8080/test.jsp
/usr/local/tomcat/webapps/ROOT/test.jsp

http://10.0.0.200:8080/myapp/test.jsp
/usr/local/tomcat/webapps/myapp/test.jsp

www.magedu.org/index.jsp -->        /usr/local/tomcat/webapps/ROOT/index.jsp 
www.magedu.org/tmall/index.jsp  --> /usr/local/tomcat/webapps/tmall/index.jsp
www.magedu.org/pig/index.jsp        /usr/local/tomcat/webapps/pig/index.jsp

配置文件和日志

#/usr/local/tomcat/conf/server.xml

#组件说明
Server  服务器,Tomcat 运行的进程实例,一个Server中可以有多个service,但通常就一
个
Service  服务,用来组织Engine和Connector的对应关系,一个service中只有一个Engine
Connector  连接器,负责客户端的HTTP、HTTPS、A JP等协议连接,一个Connector只属于某
一个Engine
Engine  引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector
Host  虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分
Context  应用的上下文,配置特定url路径映射和目录的映射关系:url => directory

#只要会配 <Host>,里面加上<Valve> 功能即可

#日志配置 
日志正常情况下只要关注 catalina.out 即可

#范例: tomcat日志实现json格式的访问日志
[root@centos8 ~]#vim /usr/local/tomcat/conf/server.xml
.......
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
########################添加下面一行,注意是一行,不要换行
#####################################
pattern="
{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot
;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;
method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&qu
ot;:&quot;%b&quot;,&quot;Query?
string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%
{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}"/>
################################################################################
########
<!-- pattern="%h %l %u %t &quot;%r&quot; %s %b" /> -->
     </Host>
   </Engine>
 </Service>
</Server>
[root@centos8 ~]#systemctl restart tomcat

Tomcat 内部组成

#nginx
<Host name="localhost"  appBase="webapps"

#tomcat
server {
     server_name localhost;
     root webapps;
 }

 

应用部署

默认项目配置

<Host name="www.xyz.com"  appBase="/data/www.www.xyz.com"></Host>
#如果单个文件,会去找ROOT下的文件
www.xyz.com/index.html ----------------- /data/www/www.xyz.com/ROOT/index.html
#如果有路径,那就回找该路径下的文件(优先级高),如果没有就去ROOT+路径下找
www.xyz.com/dir1/index.html ----------------- /data/www/www.xyz.com/dir1/index.html

部署

[root@ubuntu tomcat]#mkdir webapps/dira
[root@ubuntu tomcat]#echo "dira index" > webapps/dira/index.html
[root@ubuntu tomcat]#vim webapps/dira/test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>jsp</title>
    </head>
    <body>
        hello world!<br />
        <% 
            out.println("this is test page");
        %>
        <br />
        <%=request.getRequestURL()%>
        </body>
</html>

# 在浏览器中测试
# http://10.0.0.151:8080/dira/
# http://10.0.0.151:8080/dira/test.jsp

# 访问jsp时tomcat会转为serlet, 访问 JSP 会生成缓存
[root@ubuntu tomcat]# tree work/
work/
└── Catalina
   └── localhost
       ├── dira
       │   └── org
       │       └── apache
       │           └── jsp
       │               ├── test_jsp.class # java 字节码,非文本格式
       │               └── test_jsp.java       # servlet 代码

默认主页

[root@ubuntu tomcat]# vim conf/web.xml
<welcome-file-list>    #优先级从上到下排序
       <welcome-file>index.html</welcome-file>
       <welcome-file>index.htm</welcome-file>
       <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   
#可以自己写一个index.html
[root@ubuntu tomcat]# echo "ROOT INDEX" > webapps/ROOT/index.html

#单独项目默认主页
[root@ubuntu tomcat]# ls webapps/dira/
[root@ubuntu tomcat]# mkdir webapps/dira/WEB-INF
[root@ubuntu tomcat]# vim webapps/dira/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true">
   <welcome-file-list>
          <welcome-file>xx.txt</welcome-file>
       <welcome-file>test.jsp</welcome-file>
       <welcome-file>index.html</welcome-file>
   </welcome-file-list>
</web-app>

[root@ubuntu tomcat]# echo "xxxxxxxx" > webapps/dira/xx.txt
[root@ubuntu tomcat]# chown -R tomcat.tomcat webapps/dira
#重启tomcat

#测试浏览器输入
10.0.0.151:8080/dira/

部署独立域名的WEB服务

[root@ubuntu ~]#mkdir -pv /data/java.m99-magedu.com/ROOT
[root@ubuntu ~]#echo "java.m99-magedu.com index" > /data/java.m99-magedu.com/ROOT/index.html
[root@ubuntu tomcat]#vim /data/java.m99-magedu.com/ROOT/test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>jsp</title>
    </head>
    <body>
        hello world!<br />
        <% 
            out.println("this is test page");
        %>
        <br />
        <%=request.getRequestURL()%>
        </body>
</html>
[root@ubuntu ~]#chown -R tomcat.tomcat /data/

#新增域名配置
[root@ubuntu tomcat]# vim conf/server.xml
 <Host name="java.m99-magedu.com"  appBase="/data/java.m99-magedu.com" unpackWARs="true" autoDeploy="true">
 </Host>

#重启服务,在客户端配置域名解析,并测试
[root@ubuntu tomcat]# systemctl restart tomcat.service

#浏览器测试
http://java.m99-magedu.com:8080/

以 war 格式压缩包部署

[root@ubuntu ~]#mkdir app1
[root@ubuntu ~]#cp /data/java.m99-magedu.com/ROOT/index.html  app1/
[root@ubuntu ~]#cp /data/java.m99-magedu.com/ROOT/test.jsp app1/

[root@ubuntu ~]#chown -R tomcat.tomcat app1/
##打成 war 包
[root@ubuntu ~]#cd app1/
[root@ubuntu app1]#jar cvf ../app1.war *

[root@ubuntu ~]#cp app1.war /data/java.m99-magedu.com/
[root@ubuntu ~]#cd /data/java.m99-magedu.com/
#自动解包来自于配置文件中的设置 unpackWARs="true" 表示自动解包包
[root@ubuntu java.m99-magedu.com]#ls
app1.war  ROOT
[root@ubuntu java.m99-magedu.com]#ls
app1  app1.war  ROOT

#浏览器测试
http://java.m99-magedu.com:8080/app1
http://java.m99-magedu.com:8080/app1/test.jsp


#示例:
#部署jpress
[root@ubuntu webapps]#mkdir -pv /data/webapps
[root@ubuntu webapps]#chown -R tomcat.tomcat /data/
#传入jpress.war包,改名ROOT.war(jpress设计问题,必须根路径,否则跳转有问题)

[root@ubuntu tomcat]#vim conf/server.xml
<Host name="www.magedu.org"  appBase="/data/webapps"
            unpackWARs="true" autoDeploy="true">
</Host>

#重启服务,在客户端配置域名解析,并测试
[root@ubuntu tomcat]# systemctl restart tomcat.service

#浏览器测试
http://www.magedu.org:8080

以 jar 包部署 halo 开源项目 (自带sqlit数据库)

#jar包直接跑在jvm上(jar包自带web server)

[root@ubuntu ~]# wget https://dl.halo.run/release/halo-1.6.1.jar -O halo.jar
[root@ubuntu ~]# java -jar halo.jar

# 在浏览器中测试
# http://10.0.0.151:8090/

 

默认应用管理

# Server Status 是状态查看页,默认只能通过本机访问
# Manager App 是应用管理,默认只能通过本机访问
# Host Manager 是虚拟主机管理,默认只能通过本机访问
# Server Status,Manager App 导航对应的项目目录是 manager,根据页面提示,修改下列配置

上述内容需要访问,除了配置ip允许访问,还需要添加允许访问用户
# webapps/host-manager/META-INF/context.xml 也按此配置修改
[root@ubuntu tomcat]# vim webapps/manager/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" >
 <CookieProcessor 
className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
                   sameSiteCookies="strict" />
  #此处限定的是远程访问IP,添加 |10\.0\.0\.\d+ 
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" />
 <Manager sessionAttributeValueClassNameFilter="java\.lang\.
(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreve
ntionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

# 添加角色和授权用户
# http://10.0.0.206:8080/docs/manager-howto.html role 与项目对应关系文档
[root@ubuntu tomcat]# cat conf/tomcat-users.xml
# manager 项目配置
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcater" password="123456" roles="manager-gui,admin-gui"/>

#不用重启tomcat,直接就能登录访问了

#很少使用界面部署

 

结合反向代理实现 Tomcat 部署

Nginx 单机反向代理实现

#把图片复制到项目ROOT下
[root@ubuntu ~]#cd /data/java.m99-magedu.com/ROOT
[root@ubuntu ROOT]# rz
[root@ubuntu ROOT]#chown tomcat.tomcat tank.jpeg

#在tomcat项目中直接日志,方便查看
[root@ubuntu tomcat]#vim conf/server.xml
<Host name="java.m99-magedu.com"  appBase="/data/java.m99-magedu.com" unpackWARs="true" autoDeploy="true">
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
     prefix="java.m99-magedu.com_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
[root@ubuntu tomcat]#systemctl restart tomcat.service

#在 nginx 中配置动静分离
[root@ubuntu nginx]#vim sites-enabled/java.m99-magedu.com.conf
[root@ubuntu ~]# cat /etc/nginx/sites-enabled/java.m99-magedu.com.conf
server{
    listen 80;
    server_name java.m99-magedu.com;
    root /var/www/html/java.m99-magedu.com;
    
    # 将 .jsp 转发给 tomcat
    location ~* \.jsp$ {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header host $http_host;
    }
}

[root@ubuntu ~]# systemctl restart nginx.service 

[root@ubuntu nginx]#mkdir -pv /var/www/html/java.m99-magedu.com
[root@ubuntu nginx]#cd /var/www/html/java.m99-magedu.com
#传图片
[root@ubuntu java.m99-magedu.com]#rz

#测试
http://java.m99-magedu.com/f.jpg

Nginx 代理多机 Tomcat 实现

#nginx 配置
[root@ubuntu ~]# cat /etc/nginx/sites-enabled/java.m99-magedu.com.conf 
upstream tomcat {
 server 10.0.0.208:8080;
 server 10.0.0.210:8080;
}

server{
 listen 80;
 server_name java.m99-magedu.com;
 root /var/www/html/java.m99-magedu.com;#静态资源在本地
 
 location ~* \.jsp$ {
 proxy_pass http://tomcat;
 proxy_set_header host $http_host;
 }
}

配置 Https 监听 转发到后端 Http

#可以自建证书,把CA证书ca.crt导入系统。(可以谷歌浏览器,安全,管理证书,受信任的证书)

实现真实客户端IP地址透传

#nginx
upstream blog {
   server 10.0.0.101:8080;
   server 10.0.0.102:8080;
}
server {
   listen 80;
   server_name blog.wangxiaochun.com;
   return 302 https://$host$request_uri;
    #return 302 https://$server_name$request_uri; #$server_name 来自于上面的server_name,即blog.wangxiaochun.com
}
server {
   listen 443 ssl;
   server_name blog.wangxiaochun.com;
   ssl_certificate   /etc/nginx/ssl/blog.wangxiaochun.com.pem;
   ssl_certificate_key /etc/nginx/ssl/blog.wangxiaochun.com.key;
   client_max_body_size 20m;    #默认1m,要是上传资源大就加上
   location / {
       proxy_pass http://blog;
       proxy_set_header Host  $http_host; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}


#tomcat 中设置单独的访问日志
[root@ubuntu ~]# cat /usr/local/tomcat/conf/server.xml
 <Host name="java.m99-magedu.com"  appBase="/data/webapps" unpackWARs="true"
autoDeploy="true">
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="java.m99-magedu.com_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b %{x-forwarded-for}i"/> #i不区分大小写
   </Host> 

 

Tomcat Session 复制集群

tomcat的session是写在内存中的,php的session是写在文件中的

#session复制是tomcat自己带的功能,tomcat之间互相同步session (适合小集群,少量服务器)

Memcached 实现 Session 共享

memchached了解即可,生产中使用机会不多(不支持持久化)

后端把session存到memchached中,实现共享

-m 设置内存(生产环境可以调成总内存的1/4)

#memchached没提供客户端工具,可以用telnet连接

 

虚拟机

HotSpot不开源,openjdk开源

标签:JAVA,TOMCAT,tomcat,com,magedu,应用,ubuntu,java,root
From: https://www.cnblogs.com/ludingchao/p/18394122

相关文章

  • JavaScript中的export、export default、exports和module.exports(export、export defa
    简介:在JavaScript中,export和exportdefault是ES6模块系统的核心部分,用于从文件中导出函数、关键字,对象或值,使其可以在其他文件中通过import语句导入和使用,而exports和module.exports是CommonJS模块系统的一部分,在Node.js环境中,你可以使用exports或module.exports......
  • Android架构组件:MVVM模式的实战应用与数据绑定技巧
    Android应用开发已经逐渐变得高效且模块化,MVVM(Model-View-ViewModel)设计模式与Android架构组件的结合,无疑提升了开发者的生产力。在本指南中,我们将详细介绍MVVM模式的概念,如何在Android中实现MVVM,并结合实际操作案例让读者更好地理解与运用数据绑定技巧。1.MVVM模式......
  • 10 Python面向对象编程:类和对象以及和Java的对比
    本篇是Python系列教程第10篇,更多内容敬请访问我的Python合集这里只介绍类和对象,self、属性、方法、访问控制、类继承、方法重写在后面的文章里介绍在Python中,类和对象是面向对象编程的基础。1类的概念类是一种创建对象的蓝图或模板。它定义了一组属性(变量)和方法(函......
  • 对OpenHarmony中LiteOS的内核分析——超时原理和应用
    前言在软件世界里面,超时是一个非常重要的概念。比如●当前线程暂时休眠1秒钟,休眠结束后继续执行●每5秒钟采集一下CPU利用率●数据发送失败,2秒钟以后再试一试●等待某种数据,但最多等待50毫秒应用//将当前任务休眠若干tick数,tick为时间单位,常见值为10毫秒LITE_OS_SEC_TEXTUINT3......
  • 在Java中23种设计模式,分类以及代码示例
    在Java中23种设计模式,分类以及代码示例在Java中,设计模式可以分为23种,以三个不同的分类进行划分。1.创建型模式(CreationalPatterns):单例模式(Singleton)原型模式(Prototype)工厂方法模式(FactoryMethod)抽象工厂模式(AbstractFactory)建造者模式(Builder)2.结构型模式(Structura......
  • HarmonyOS鸿蒙开发 应用程序项目工程结构
    文章目录前言一、基础知识1、应用程序包2、UI框架3、Stage应用模型二、Stage模型的应用程序包结构总结前言鸿蒙的应用程序工程结构分为FA和Stage两种模型结构,这两种模型的应用包结构并不相同。FA模型:API7开始支持的模型,目前已不是官方主推模型,所以不再做详细介绍......
  • Java+Vue开发的智慧园区综合管理系统(项目源码分享)
    前言:智慧园区管理系统是一个集成了多种功能的综合性系统,旨在通过信息化、智能化手段提升园区的管理效率和服务质量。以下是针对系统的各个功能模块的简要描述:一、楼栋管理会务管理:管理园区内的会议预约、会议室使用等。园区信息:展示园区的基本信息,如位置、面积、规划等。楼......
  • Java+Vue开发的固定资产管理系统(项目源码分享)
    前言:资产设备管理系统旨在实现对企业资产和设备的全面管理,通过信息化手段提升管理效率,确保资产和设备的有效利用和安全性。以下是该系统的主要功能模块及其详细描述:一、个人中心用户登录与权限管理:实现用户身份验证和权限分配,确保系统数据的安全性。个人信息管理:允许用户查......
  • Java+Vue开发的企事业移动培训考试平台(项目源码分享)
    前言:企事业移动培训考试系统是一个集成多种功能的综合性平台,旨在为企业提供便捷、高效、灵活的在线培训和考试解决方案。以下是针对平台所列出的八个主要功能的详细解释:一、文档管理及在线预览允许企业上传、存储、管理和分享各种培训文档,如PPT、PDF、Word等。提供在线预览......
  • 基于java+springboot+vue人事人力资源管理系统求职简历系统(源码+LW+部署讲解)
    前言......