web项目在tomcat中的启动过程分析

部署资源管理系统chemx 资源管理系统的部署教程 阅读详情

web项目在tomcat中的启动过程分析
转载自:https://blog.youkuaiyun.com/qq_21441857/article/details/82992320
平常开发中只需要把开发好的war包上传到服务器,启动服务器,web项目就跟着启动运行了,这是为什么?服务器都做了哪些事情?下面我们通过跟踪调试tomcat源码,分析一下web项目的启动过程。
源码下载地址:
http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.34/src/apache-tomcat-8.5.34-src.zip
下载完成解压后删除webapps目录下的examples目录,不删除启动可能会报错(我的机器上是这样的),然后在根目录下创建pom.xml的maven依赖文件,内容如下:

<?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>cn.linxdcn</groupId>
    <artifactId>Tomcat8.0</artifactId>
    <name>Tomcat8</name>
    <version>8.0</version>
    <build>
        <finalName>Tomcat8</finalName>
        <sourceDirectory>java</sourceDirectory>
        <resources>
            <resource>
                <directory>java</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.9.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-apache-log4j</artifactId>
            <version>1.9.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-commons-logging</artifactId>
            <version>1.9.5</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.rpc</groupId>
            <artifactId>javax.xml.rpc-api</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jdt.core.compiler</groupId>
            <artifactId>ecj</artifactId>
            <version>4.4</version>
        </dependency>
    </dependencies>
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
把文件保存好之后,就可以导入源码到开发工具中查看了。
查看源码之前,首先我们看一下tomcat的结构模型


Server:代表整个服务器,一个服务器中可以有多个Service;
Service: 由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求;
Connector: 一个Connector将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户;
Engine:Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名
当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理,Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理
Host: 代表一个Virtual Host,虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配,每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context,有一个Context path当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理,匹配的方法是“最长匹配”,所以一个path==”"的Context将成为该Host的默认Context,所有无法和其它Context的路径名匹配的请求都将最终和该默认Context匹配
Context:一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成,Context在创建的时候将根据配置文件CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类,当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类,如果找到,则执行该类,获得请求的回应,并返回
在源码中与这6个组件对应的类如下:
Connector :org.apache.catalina.connector.Connector.java
Server: org.apache.catalina.core.StandardServer.java
Service: org.apache.catalina.core.StandardService.java
Engine: org.apache.catalina.core.StandardEngine.java
Host: org.apache.catalina.core.StandardHost.java
Context: org.apache.catalina.core.StandardContext.java

组件的生命周期:Connector、StandardServer、StandardService、StandardEngine、StandardHost、StandardContext这6个组件类通过继承它们的父类都间接实现了生命周期接口Lifecycle。该接口定义组件在初始化、启动、停止、销毁的时候所要做的处理。初始化调用接口的init()方法,启动调用接口的start()方法,停止调用接口的stop()方法,销毁调用接口的destroy()方法。调用这些方法的前后通常会伴随着组件状态(LifecycleState)的改变,当组件状态改变的时候会发布相应的事件(LifecycleEvent),该事件将由接口注册的事件监听器(LifecycleListener)来处理。
Lifecycle接口部分内容:

源码跟踪:
tomcat启动入口在Bootstrap类下的main()函数
源码中的类路径:org.apache.catalina.startup.Bootstrap.java
main函数如下(代码过长的以后只列出核心代码)

进入Bootstrap的init()方法:

init()方法的核心是创建Catalina类的一个实例catalinaDaemon,回到main()函数中接着往下走

进入Bootstrap的load()方法:

在daemon.load(args)方法中反射调用了catalinaDaemon.load(args)方法,进入Catalina.load()方法中

digester这个对象中定义了在接下来的启动过程中要创建的对象以及创建对象的规则
file是读取conf/server.xml生成的文件


在Catalina.load()方法中接着往下走:

调用digester.parse()之后,在之前我们在createStartDigester()函数中添加的对象都会按照给定的规则实例化。
(Connector、StandardServer、StandardService、StandardEngine、StandardHost就是在这一步实例化的,StandardContext的实例化不在这个过程中,后面讲)
创建的过程参见Digester.startElement()方法和Rule.begin()方法。

在Catalina.load()方法中接着往下走:

getServer().init()执行的是StandardServer.init(),StandardServer中的init()方法来自于它父类的父类LifecycleBase,该类是一个实现生命周期接口Lifecycle的抽象类,LifecycleBase.init()方法的实现如下:

StandardServer的初始化主要是在StandardServer.initInternal()中完成的,其他几个组件跟这类似,初始化也是主要在自己的initInternal()方法中完成。

进入到StandardServer.initInternal()


StandardServer.initInternal()最后用循环调用StandardService.init()方法。init()方法的执行流程都是类似的,不再进入查看了。StandardService的初始化方法中又调用了StandardEngine的初始化方法。StandardEngine初始化完成后,整个的初始化过程完成(StandardHost和StandardContext的初始化不在这个过程中)。
getServer.init()方法执行完,load()方法执行完之后,接着执行Bootstrap的start()方法

进入Bootstrap的start()方法中:

Bootstrap.start()方法中反射调用了Catalina.start()方法,进入该方法中:

getServer().start()执行的是StandardServer.start()方法,与StandardServer.init()类似,StandardServer.start()最终执行的是StandardServer.startInternal()方法,进入该方法:

StandardService.start()最终执行的是 StandardService.startInternal()方法,进入该方法:

StandardEngine、StandardHost、StandardContext都继承了ContainerBase类,ContainerBase实现了容器接口Container。StandardHost是StandardEngine的子容器(child),StandardContext是StandardHost的子容器。
StandardEngine.start()方法最终调用的是ContainerBase.startInternal(),进入该方法中:

该方法的核心是自己启动的同时找到自己的子容器,并以多线程的方式启动它们。StandardEngine启动之后,会接着启动自己的子容器StandardHost。

StandardHost在启动的时候会发布一个启动事件给自己的监听器来处理,StandardHost的事件监听器的实现类是HostConfig,进入它的事件处理函数:

进入start()方法:

deployApps()就是部署Host中项目的操作,进入该函数:

这个函数就是根据不同的情况来部署我们的项目的,其中deployWARs()就是用来部署war包的,进入该函数:

该函数的核心是利用多线程来部署每一个war包,最总的部署代码是HostConfig.deployWAR(),进入该方法中:


该方法的核心是创建StandardContext的实例(每部署一个项目都会生成一个StandardContext的实例),并将其作为子容器添加到StandardHost中。StandardHost启动完成后启动它的子容器StandardContext。进入StandardContext.startInternal()方法中:

在该方法执行过程中发布了一个事件,进入StandardContext的事件监听器ContextConfig的事件处理函数中查看对该事件的处理:

进入configureStart()函数:

进入webConfig()函数:

这个函数的核心是对我们项目中web.xml文件的解析处理,在这个函数中接着往下走:

进入configureContext()中:


从web.xml中解析出Filter、Listener、Servlet定义的代码。
从web.xml中解析的所有内容都会添加到对应项目的StandardContext实例中。解析完成之后继续回到
StandardContext.startInternal()中往下执行:

如果我们的项目全部是基于注解开发的,没有web.xml文件,这一步的作用十分重要,想要了解的请去看
org.springframework.web.SpringServletContainerInitializer.class这个类。如果我们的项目是基于xml配置开发的
这一步貌似没什么卵用。接着往下执行:

进入listenerStart()函数:

listener是我们在web.xml中配置的,用于加载spring配置文件的,有兴趣的可以去看下源码contextInitialized()的实现,常见配置如下:

listener.contextInitialized()执行之后,我们web项目中的spring容器才真正启动。
回到StandardContext.startInternal()中往下执行:

loadOnStartup()方法的作用是初始化servlet,我们知道servlet有个init()方法,这个地方就是调用init()方法。
DispatcherServlet就是在这儿初始化的,它父类的初始化方法如下,有兴趣的可以去看下完整的初始化过程:


当StandardContext.start()执行完成之后,一个项目的基本启动流程算是执行完了。
分析的不是很细,建议大家下载源码自己跟一下启动过程。
————————————————
版权声明:本文为优快云博主「笨笨小孩945」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_21441857/article/details/82992320

YOLO26 实战全流程:从数据集标注到端到端无NMS推理(完整版,附ProgLoss核心调参技巧+避坑指南) 本章节是实战经验的精华❌ 数据集标注不规范,导致模型精度低 → ✅ 严格遵守工业级标注规范,标注框紧贴目标边缘,不要漏标/多标;❌ 训练时未使用预训练权重,导致收敛极慢 → ✅ 必须开启,预训练权重能让模型快速收敛;❌ ProgLoss参数调整幅度过大,导致训练崩溃 → ✅ 每次只调整一个参数,幅度±0.02即可,循序渐进;❌ 推理时强行添加NMS参数,画蛇添足 → ✅ YOLO26无需NMS,推理命令中不要加conf/iou参数,否则会降低推理速度; 阅读详情

相关推荐

写给小白的“具身智能”入门科普

智能”,大家都懂,也就是AI。那么,什么是“具身”?“具身”是一个很小众的名词,通常都出现在哲学、认知科学领域。它的英文叫Embodied,是embody的过去式和过去分词。em-表示“进入,使……”,-body表示“身体”。组合起来,就是“使……进入身体”。Embodied Intelligence(具身智能),顾名思义,就是“使智能进入身体”、“给智能一个身体”的意思。那么,具身智能,是不是就是“AI+身体”呢?这样说并不准确。

欢迎来到我的博客 1819

web项目04-----项目入口文件

项目入口文件 基础代码 新建一个项目入口文件 manage.py文件 关于DEBUG遇到了一些问题,app.run(debug=True)不好使了,可以看一下这个:https://www.cnblogs.com/my_captain/p/9615956.html # 倒入flask库 from flask import Flask # app是Flask的实例,它接受包或者模块的名字作为参数,但一般都是传递__name__ app = Flask(__name__) # 使用app.route..

zaaaacki的博客 960

告别环境配置噩梦:VSCode + MinGW 下 OpenGL (glad/glm/glfw) 一站式配置指南(含常见错误排查)

本文提供了一份详细的VSCode与MinGW下OpenGL开发环境配置指南,涵盖glad、glm和glfw三大核心库的安装与调试。通过逐步指导解决常见错误,帮助开发者快速搭建高效的OpenGL开发环境,特别适合初学者避免环境配置中的常见陷阱。

weixin_42557803的博客 490

web应用的入口:web.xml核心配置文件详解

前言:如果要了解web项目的底层实现,web.xml配置文件,是必须要掌握的。web.xml配置文件,是web项目的核心,web项目的启动,从这里开始。 为了方便大家理解,我们从最常见的配置开始着手来说明。 一,contextConfigLocation contextConfigLocation用来配置自定义的配置文件的加载路径,如果指定了contextConfigLocati

reggergdsg的博客 8288

BMW Trojan 样本分析

仅用于链接已经删却但是需要方便查阅的原文http://blog.youkuaiyun.com/zirconsdu/article/details/7997470 转载请注明出处http://blog.youkuaiyun.com/zirconsdu/article/details/8153813。 一些具体数据结构和具体路径隐去。   BMW木马样本分析 摘要 2011年底和某Hunter的谈话涉及到当时新检

zirconsdu的专栏 3911

《网络安全自学教程》- 802.1x协议

802.1x协议架构,工作原理/认证流程,认证方式,MAB认证,触发认证的三种方式,EAP报文格式,EAPOL报文格式

wangyuxiang946的博客 2万+

JavaWeb学习笔记(一)——JavaWeb开发入口

JavaWeb学习笔记(一)——JavaWeb开发入口

m0_63019304的博客 889

【大模型+知识图谱】哈工大版chinese-roberta-wwm-ext模型介绍、下载部署和GPU显卡配置

RoBERTa模型的一个重要改进版本,由阿里云的研究团队提出。而Chinese RoBERTa-wwm-ext则是针对中文文本的预训练模型,它在哈工大的研究团队手中进一步优化,特别适用于中文自然语言处理任务。

知识靠谱的博客 2773

Tomcat启动时报错:Web应用程序[ROOT]似乎启动了一个名为[SeedGenerator Thread]的线程,但未能停止它。这很可能会造成内存泄漏。

Tomcat启动时报错:Web应用程序[ROOT]似乎启动了一个名为[SeedGenerator Thread]的线程,但未能停止它。这很可能会造成内存泄漏。

伟庭的博客 1万+

手把手教你学PCIE(10.5)--PCIE故障排除方法的分步排查法介绍

通过以上分步排查法,你可以系统地诊断和解决 PCIe 设备的故障。每个步骤都有助于逐步缩小问题范围,最终找到并解决问题。

MHD0815的博客 1873

YOLOv5源码逐行超详细注释与解读(5)——配置文件yolov5s.yaml

全网最详细的YOLOv5源码解读之配置文件yaml。逐行注释,逐句讲解,一文带你了解yaml。小白必看!

路人贾的博客 1万+

tomcat 运行war包

直接将*.war文件拷贝到tomcat\webapps\目录下,启动tomcat,访问localhost:8080,进入anager app中,需要输入密码,在C:\jakarta-tomcat-4.1.30\conf目录下找到tomcat-users.xml文件,加入 <role rolename="manager-gui"/> <user username="admin" password="admin" roles="manager-gui"/> 有时tomcat启动到一

翎墨袅 3362

【100%通过率】华为OD机试真题 C++ 实现【水库蓄水问题】【2022.11 Q4 新题】

给定一个长度为 n 的整数数组height。数组的元素表示山的高度,选择两个元素作为水库的边界,求蓄水量的最大值并输出蓄水量最大时的边界下标(蓄水量相同时输出下标较近的)。

MISAYAONE的博客 1万+

tomcat源码解析---web项目在tomcat中的启动过程分析

java程序的入口应该是main()函数,可是基于xml配置开发的web项目,我们从来没有写过main()函数,只需要把开发好的war包上传到服务器,启动服务器,web项目就跟着启动运行了,这是为什么?服务器都做了哪些事情?下面我们通过跟踪调试tomcat源码,分析一下web项目的启动过程。 源码下载地址: http://mirrors.hust.edu.cn/apache/tomcat/tomc...

qq_21441857的博客 5383

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IntelliJ IDEA通过Tomcat启动项目过程分析

Tomcat部署项目的多种方式 Tomcat安装目录:${TOMCAT_HOME} 1.常规的webapps下 直接部署到${TOMCAT_HOME}/webapps下 2.利用控制台进行部署 3.外部部署 修改${TOMCAT_HOME}/conf/server.xml 在<Host>标签下添加web所在的目录指定path,如: 1 <Contextpath="/xx" docBase="D:\\workspace\\xx\\target\\x..

z69183787的专栏 1424

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Tomcat的基本使用,如何用Maven创建Web项目、开发完成部署的Web项目

Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是“提供网上信息浏览服务”。Tomcat是Apache软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量JavaEE规范。JavaEE: Java Enterprise Edition,Java企业版。指Java企业级开发的技术规范总和。

宁可枝头抱香死,何曾吹落北风中。 4332

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Tomcat WEB 的启动过程

  前言:很多文章已经对springmvc 的加载细节进行详细的介绍,但是并没有去介绍服务容器是如何触发这一系列动作的。这里我们将通过实际项目进行分步骤介绍web 启动加载步骤。如下是一个实际的springMVC下web项目的结构。 那么问题是tomcat 启动过程中是如何使得该项目生效的呢。大致分为两个步骤。 步骤一、解析server.xml   启动Tomcat,会去读取web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常的被启动起来。但是加载webapps中的web.xml

iamwiam的博客 668

单独启动tomcat和从eclipse中启动tomcat的差异,以及将Eclipse中的Web项目部署到Tomcat的方法

刚接触java web,对很多东西还不是太了解,特别是各种配置方面的问题,下面仅是自己个人的理解,如有错误或不足之处,希望大家能指教。 如果通过tomcat的bin目录下的startup.bat来启动tomcat,此时tomcat使用conf中的配置文件来配置服务器,tomcat启动后webapps下的各个应用开始工作,浏览器中都可以访问到。 地址栏输入http://localhost:8080

ErrorZero的专栏 2935

Tomcat下发布Web项目

为了可以通过浏览器访问到自己tomcat下的web项目,我们需要先了解以下内容: Web开发概述 1.1WEB通信 WEB采用B/S通信模式,通过超文本传送协议(HTTP, Hypertext transport protocol)进行通信。通过浏览器地址栏编写URL,向服务器发送一个请求,服务器端根据请求进行相应的处理,处理完成之后,会向浏览器作出一个响应,及将服务器端资源发送给浏览器。 1....

qq_40091033的博客 3259

idea配置tomcat启动web项目

配置tomcat 1.点击run configuration 2.选择tomcat local 3.配置tomcat 4.部署web项目 部署有2种方式 war包:打成war置于服务器运行,这种方式我们比较常见。 war exploded:将web工程以当前文件夹的位置关系上传到服务器。就是直接把文件夹、jsp页面 、classes等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方...

lucky_ly的博客 9万+

IDEA配置tomcat的方法、IDEA配置tomcat运行web项目

IDEA配置tomcat的方法 1.打开idea,在项目运行列表下拉选择“Edit Configurations” 2.点击 左上角的"+">Templates -> Tomcat Server -> Local>ok 3.在打开的界面,第一行“Name”中填入tomcat的名称 4.然后点击Configure…,在Application Servers界面,点击“+”,在Tomcat Server配置界面选择要添加的已安装的tomcat路径(bin的上一级路径),最后点击“O

m0_67402731的博客 1万+

idea web项目添加tomcat后启动失败

org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLDidea web项目添加tomcat后启动失败 idea web项目添加tomcat后启动失败 idea web项目添加tomcat后启动失败,报错 org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被...

站在墙头上的博客 1877

idea启动tomcat项目

idea启动tomcat项目 1. 配置项目结构 project 打开项目配置页面 在project中选择项目依赖的jdk环境 modules 在source中选择jdk环境对应的language level 在modules-dependencies中配置module SDK和项目SDK相同 选中报红的依赖并删除 libraries 在依赖中添加项目本身或maven依赖 选择WEB-I...

silence_la的博客 4084

java项目如何启动tomcat服务器,Java web项目启动Tomcat报错解决方案

Java web项目启动Tomcat报错解决方案点击运行项目时显示 A Java Exception has occurred.'Starting Tomcat v9.0 Server at localhost' has oncountered a problem.Server Tomcat v9.0 Server at localhost failed tostart.并显示以下两个弹框同时控制...

weixin_34566436的博客 3230

idea部署tomcat web项目

1我之前安装的idea是社区版的,对tomcat不支持,只有Android ,maven的默认支持项,其他类型的项目没有选项,不能自动生成相应类型的项目,所以下了19年ultimate版,并使用了破解码,估计明年到期。暂时就只是作为工具使用了 2下面简单记录下我在使用时遇到的一些问题 创建一个web项目,纯测试 加部署tomcat使用 1File--new Project--Java---J...

零零落落的博客 1万+

Tomcat下启动web项目

一、启动一个web项目,首先要保证当前电脑安装了数据库。 数据库安装好后,为了能让Windows命令行操作MySQL数据库,需要配置一下系统的环境变量。 右击“我的电脑”-->"属性"-->"高级系统设置"-->"高级"-->"环境变量",在打开的窗口中选择 “系统变量” 下的 “新建” 按钮创建环境变量。 1.创建 MYSQL_HOME 环境变量 ...

qq_41489356的博客 9445
上一篇: 5_Tomcat_Context启动
下一篇: 在生产环境下部署tomcat
Be_nurturing
博客等级 码龄11年 7粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值