當前位置:首頁 » 網頁前端 » 容器內運行web
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

容器內運行web

發布時間: 2022-05-29 05:55:43

Ⅰ web應用和資料庫都是運行在web容器上面的嗎

web應用需要跟db做數據交互,部署的應用程序必須依賴於web容器。

以tomcat為例來說明:

1. 打開Eclipse——打開菜單欄window選擇preference(首選項)——左側選擇Tomcat,如下圖示:

4.勾上"Is a Tomcat project"前的checkbox,將項目關聯至Tomcat。

在Context name中填入XXX,即Web應用自定義部署文件名和Context path名。

在Subdirectory to setas web application root (optional)中填入要部署的Web應用的實際路徑(即WEB-INF上級目錄)。

注意:Eclipse會自動地將workdir設置在WorkspaceWebAppwork下。

如此便自動創建了%Tomcat_Home%confCatalinalocalhostXXX.xml文件。啟動Tomcat 即可自動部署Web應用。

Ⅱ docker在web開發中得使用流程是怎樣的

docker在web開發中得使用流程概述:

1、創建java鏡像:

把所有的文件都放置在docker目錄下,分別為不同的功能創建不同的目錄。

$ sudo mkdir docker/java
$ sudo cd docker/java
接下來在該目錄下創建一個jdk的Dockerfile文件,具體內容如下:

# openjdk 6
# version 1.0
FROM ubuntu:14.04
MAINTAINER mhy "[email protected]"
RUN apt-get update
RUN apt-get install -y -q openjdk-7-jdk
WORKDIR /
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
CMD ["/bin/bash"]
創建完Dockerfile之後來生成一個jdk的鏡像

$ sudo docker build -t pobaby/java .

以上已經實現了一個簡單的基於Docker容器運行的Java Web程序。

Ⅲ Java中Web容器

web容器可以理解為打開瀏覽器後並有一個提交請求所形成的環境.

Ⅳ servlet容器在啟動web應用時創建哪些對象

Servlet容器 —— 以tomcat為例
在tomcat容器等級中,context容器直接管理servlet在容器中的包裝類Wrapper,所以Context容器如何運行將直接影響servlet的工作方式。
tomcat容器模型如下:

一個context對應一個web工程,在tomcat的配置文件server.xml中,可以發現context的配置(在eclipse工程中,可在部署路徑的conf文件夾zhoing找到)
[html] view plain在CODE上查看代碼片派生到我的代碼片
Context docBase="/Users/wongrobin/all/projects/tech-test/java-test/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/base-webapp" path="/base-webapp" reloadable="true" source="org.eclipse.jst.j2ee.server:base-webapp"/>

Servlet容器的啟動過程——以tomcat為例
Tomcat7增加了一個啟動類:
[html] view plain在CODE上查看代碼片派生到我的代碼片
org.apache.catalina.startup.Tomcat

創建一個Tomcat的一個實例對象並調用start方法就可以啟動tomcat。
還可以通過這個對象來增加和修改tomcat的配置參數,如可以動態增加context,servlet等。

在tomcat7中提供的example中,看是如何添加到context容器中:
[java] view plain在CODE上查看代碼片派生到我的代碼片
Tomcat tomcat = getTomcatInstance();
File appDir = new File(getBuildDirectory(), "webapps/examples");
tomcat.addWebapp(null, "/examples", appDir.getAbsolutePath());
tomcat.start();
ByteChunk res = getUrl("http://localhost:" + getPort() +
"/examples/servlets/servlet/HelloWorldExample");
assertTrue(res.toString().indexOf("<h1>Hello World!</h1>") > 0);

這段代碼創建了一個Tomcat實例並新增了一個WEB應用,然後啟動Tomcat並調用其中的一個HelloWorldExampleServlet。
Tomcat的addWebap方法的代碼如下:
[java] view plain在CODE上查看代碼片派生到我的代碼片
public Context addWebapp(Host host, String url, String path) {
silence(url);
Context ctx = new StandardContext();
ctx.setPath( url );
ctx.setDocBase(path);
if (defaultRealm == null) {
initSimpleAuth();
}
ctx.setRealm(defaultRealm);
ctx.addLifecycleListener(new DefaultWebXmlListener());
ContextConfig ctxCfg = new ContextConfig();
ctx.addLifecycleListener(ctxCfg);
ctxCfg.setDefaultWebXml("org/apache/catalin/startup/NO_DEFAULT_XML");
if (host == null) {
getHost().addChild(ctx);
} else {
host.addChild(ctx);
}
return ctx;
}

一個WEB應用對應一個context容器,也就是servlet運行時的servlet容器。添加一個web應用時將會創建一個StandardContext容器,並且給這個context容器設置必要的參數,url和path分別代表這個應用在tomcat中的訪問路徑和這個應用實際的物理路徑,這兩個參數與tomcat配置中的兩個參數是一致的。其中一個最重要的一個配置是ContextConfig,這個類會負責整個web應用配置的解析工作。
最後將這個context容器加入到父容器host中。
接下來會調用tomcat的start方法啟動tomcat。
Tomcat的啟動邏輯是基於觀察者模式的,所有的容器都會繼承Lifecycle介面,它管理著容器的整個生命周期,所有容器的修改和狀態改變都會由它通知已經注冊的觀察者。
Tomcat啟動的時序如下:

當context容器初始狀態設置Init時,添加到context容器的listener將會被調用。ContextConfig繼承了LifecycleListener介面,它是在調用Tomcat.addWebapp時被加入到StandardContext容器中的。ContextConfig類會負責整個WEB應用的配置文件的解析工作。
ContextConfig的init方法將會主要完成一下工作:
創建用於解析XML配置文件的contextDigester對象
讀取默認的context.xml文件,如果存在則解析它
讀取默認的Host配置文件,如果存在則解析它
讀取默認的Context自身的配置文件,如果存在則解析它
設置Context的DocBase
ContextConfig的init方法完成後,Context容器會執行startInternal方法,這個方法包括如下幾個部分:
創建讀取資源文件的對象
創建ClassLoader對象
設置應用的工作目錄
啟動相關的輔助類,如logger,realm,resources等
修改啟動狀態,通知感興趣的觀察者
子容器的初始化
獲取ServletContext並設置必要的參數
初始化「load on startuo」的Servlet

Web應用的初始化工作——以tomcat為例
WEB應用的初始化工作是在ContextConfig的configureStart方法中實現的,應用的初始化工作主要是解析web.xml文件,這個文件是一個WEB應用的入口。
Tomcat首先會找globalWebXml,這個文件的搜索路徑是engine的工作目錄下的org/apache/catalina/startup/NO-DEFAULT_XML或conf/web.xml。接著會找hostWebXml,這個文件可能會在System.getProperty("catalina.base")/conf/${EngineName}/${HostName}/web.xml.default中。接著尋找應用的配置文件examples/WEB-INF/web.xml,web.xml文件中的各個配置項將會被解析成相應的屬性保存在WebXml對象中。接下來會講WebXml對象中的屬性設置到context容器中,這里包括創建servlet對象,filter,listerner等,這些在WebXml的configureContext方法中。
下面是解析servlet的代碼對象:
[java] view plain在CODE上查看代碼片派生到我的代碼片
for (ServletDef servlet : servlets.values()) {
Wrapper wrapper = context.createWrapper();
String jspFile = servlet.getJspFile();
if (jspFile != null) {
wrapper.setJspFile(jspFile);
}
if (servlet.getLoadOnStartup() != null) {
wrapper.setLoadOnStartup(servlet.getLoadOnStartup().intValue());
}
if (servlet.getEnabled() != null) {
wrapper.setEnabled(servlet.getEnabled().booleanValue());
}
wrapper.setName(servlet.getServletName());
Map<String,String> params = servlet.getParameterMap();
for (Entry<String, String> entry : params.entrySet()) {
wrapper.addInitParameter(entry.getKey(), entry.getValue());
}
wrapper.setRunAs(servlet.getRunAs());
Set<SecurityRoleRef> roleRefs = servlet.getSecurityRoleRefs();
for (SecurityRoleRef roleRef : roleRefs) {
wrapper.addSecurityReference(roleRef.getName(), roleRef.getLink());
}
wrapper.setServletClass(servlet.getServletClass());
MultipartDef multipartdef = servlet.getMultipartDef();
if (multipartdef != null) {
if (multipartdef.getMaxFileSize() != null &&
multipartdef.getMaxRequestSize()!= null &&
multipartdef.getFileSizeThreshold() != null) {
wrapper.setMultipartConfigElement(new MultipartConfigElement(
multipartdef.getLocation(),
Long.parseLong(multipartdef.getMaxFileSize()),
Long.parseLong(multipartdef.getMaxRequestSize()),
Integer.parseInt(
multipartdef.getFileSizeThreshold())));
} else {
wrapper.setMultipartConfigElement(new MultipartConfigElement(
multipartdef.getLocation()));
}
}
if (servlet.getAsyncSupported() != null) {
wrapper.setAsyncSupported(
servlet.getAsyncSupported().booleanValue());
}
context.addChild(wrapper);
}

上面的代碼將servlet容器包裝成context容器中的StandardWrapper。StandardWrapper是tomcat容器中的一部分,它具有容器的特徵,而Servlet作為一個獨立的web開發標准,不應該強制耦合在tomcat中。
除了將Servlet包裝成StandardWrapper並作為子容器添加到Context中外,其他所有的web.xml屬性都被解析到Context中。

創建Servlet實例——以tomcat為例
前面完成了servlet的解析工作,並且被包裝成了StandardWrapper添加到Context容器中,但是它仍然不能為我們工作,它還沒有被實例化。
創建Servlet對象
如果Servlet的load-on-startup配置項大於0,那麼在Context容器啟動時就會被實例化。
前面提到的在解析配置文件時會讀取默認的globalWebXml,在conf下的web.xml文件中定義了一些默認的配置項,其中定義了兩個Servlet,分別是org.apache.catalina.servlets.DefaultServlet和org.apache.jsper.servlet.JspServelt,它們的load-on-startup分別是1和3,也就是當tomcat啟動時這兩個servlet就會被啟動。
創建Servlet實例的方式是從Wrapper.loadServlet開始的,loadServlet方法要完成的就是獲取servletClass,然後把它交給InstanceManager去創建一個基於servletClass.class的對象。如果這個Servlet配置了jsp-file,那麼這個servletClass就是在conf/web.xml中定義的org.apache.jasper.servlet.JspServlet。
初始化Servlet對象
初始化Servlet在StandardWrapper的initServlet方法中,這個方法很簡單,就是調用Servlet的init()方法,同時把包裝了StandardWrapper對象的StandardWrapperFacade作為ServletConfig傳給Servlet。
如果該Servlet關聯的是一個JSP文件,那麼前面初始化的就是JspServlet,接下來會模擬一次簡單請求,請求調用這個JSP文件,以便編譯這個JSP文件為類,並初始化這個類。
這樣Servlet對象的初始化就完成了。

容器默認Servlet
每個servlet容器都有一個默認的servlet,一般都叫做default。
例如:tomcat中的 DefaultServlet 和 JspServlet (上面的部分)

Ⅳ Java web 為什麼要運行在容器中 沒有容器不行嗎

可以。這就是java語言寫的伺服器的底層代碼的。比如tomcat
//9999就是埠號
ServerSocket ss=new ServerSocket(9999);
Socket s=ss.accept();
System.out.println("1000正在連接");
OutputStream os=s.getOutputStream();
BufferedReader br=new BufferedReader(new FileReader("F:\\Visual Studio\\readme.htm"));
String buf="";
while((buf=br.readLine())!=null){
os.write(buf.getBytes());
}
br.close();
os.close();
s.close();
其實也就是通過輸出流的形式來實現在網頁上展現效果。這還只是一部分代碼。要是還要導包。你就必須放到web-inf的lib目錄下等很多瑣碎的事。有了容器就會很方便。只要通過eclipse工具。web伺服器就會自動幫你管理多個資源。只要你將相應的文件放在相應的位置。

Ⅵ web容器tomcat中,每個服務之間如何相互調用

1、jsp容器指的是能運行jsp文件的servlet相關服務 比如tomcat
2、web容器指的是能運行web頁面或者web程序之類的服務工具,比如瀏覽器
3、tomcat是servlet和jsp容器 可以為我們提供基礎的web服務功能 一般我們可以把它作為web伺服器來使用
三者關系大概可以概況如下
jsp頁面程序通過tomcat伺服器發布後可以在web容器中訪問
個人觀點 如有問題歡迎指導 勿噴 望採納

Ⅶ web容器 web伺服器 servlet/jsp容器 之間的區別和關系

Servlet是Java代碼為主,JSP是html為主。JSP是Servlet的化生。JSP最後會自動生成.java/.clsss文件。
Servlet擅長Java代碼,JSP擅長html。但是Servler也能輸出Html代碼,JSP也能書寫Java代碼。不過有點不方便。

Ⅷ web容器之運行該servlet的一個實例,為什麼就可以滿足需求了

因為容器已經幫我們做好了初始化servlet的事情,也就是容器幫我們生成了servlet所需要的request和response對象,然後將這2個對象以參數的形式傳遞給我們所請求的servlet(在/WEB-INF/web.xml裡面根據瀏覽器請求的路徑找與之相關的servlet),並自動調用doGet()或doPost()方法,這兩個方法負責執行業務邏輯,並把結果封裝到response對象中,然後把響應結果傳遞給客戶斷,在此結束此servlet生命周期。

Ⅸ 什麼是web容器,有什麼作用

web容器 就是在網頁上可以運行的容器了
容器就是可以在上頁放控制項的控制項了

窗體,選項卡,組都可以放上控制項

Ⅹ 如何訪問docker容器的web

需要前目錄建立三文件

1).gitignore

node_moles/*
2)package.json

{
"name": "docker-centos-hello",
"private": true,
"version": "0.0.1",
"description": "Node.js Hello world app on CentOS using docker",
"author": "Daniel Gasienica ",
"dependencies": {
"express": "3.2.4"
}
}
3)server.js

var express = require('express'),
app = express(),
redis = require('redis'),
RedisStore = require('connect-redis')(express),
server = require('http').createServer(app);

app.configure(function() {
app.use(express.cookieParser('keyboard-cat'));
app.use(express.session({
store: new RedisStore({
host: process.env.REDIS_HOST || 'localhost',
port: process.env.REDIS_PORT || 6379,
db: process.env.REDIS_DB || 0
}),
cookie: {
expires: false,
maxAge: 30 * 24 * 60 * 60 * 1000
}
}));
});

app.get('/', function(req, res) {
res.json({
status: "ok"
});
});

var port = process.env.HTTP_PORT || 3000;
server.listen(port);
console.log('Listening on port ' + port);
配置Dockerfile

我需要通Dockerfile配置我docker鏡像

FROM ubuntu:14.04
MAINTAINER zengjinlong

RUN apt-get update

#Install Redis
RUN apt-get -y -qq install python redis-server

RUN apt-get -y -qq install wget

#Install Node
RUN cd /opt && \
wget && \
tar -xzf node-v0.10.33-linux-x64.tar.gz && \
mv node-v0.10.33-linux-x64 node && \
cd /usr/local/bin && \
ln -s /opt/node/bin/* . && \
rm -f /opt/node-v0.10.33-linux-x64.tar.gz

#Set the working directory
WORKDIR /src
j
CMD ["/bin/bash"]
Dockerfile通docker build建立我鏡像

docker build -t minimicall/node_web:0.1 .
需要說明需要靈根據ubuntu真實環境變化間指令例,我第執行候告訴我找python redis-server我想應該我apt 源太out所我加RUN apt-get update.解決問題

我wget候說沒指令我安裝wget.nodejs址我nodejs官網查找所碰問題具體問題具體析

查看我建立鏡像

micall@micall-ThinkPad:~/docker/nodejs_web_app$ sudo docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
minimicall/node_web 0.1 730770dff17f 6 minutes ago 268.7 MB
centos centos6 70441cac1ed5 2 weeks ago 215.8 MB
ubuntu 14.04 5506de2b643b 4 weeks ago 199.3 MB
啟我鏡像:

sudo docker run -i -t --rm \
> -p 3000:3000 \
> -v `pwd`:/src \
> minimicall/node_web:0.1
候我已經進入鏡像啟容器面

root@d80a2ed6b4c0:/src#
執行列命令

root@d80a2ed6b4c0:/src# npm install --quiet > /dev/null
npm WARN engine [email protected]: wanted: {"node":"<0.9.0"} (current: {"node":"0.10.33","npm":"1.4.28"})
root@d80a2ed6b4c0:/src# npm install -g nodemon --quiet > /dev/null
root@d80a2ed6b4c0:/src# ls
Dockerfile Dockerfile~ index.js~ package.json server.js src
Dockerfile.centos index.js node_moles package.json~ server.js~
root@d80a2ed6b4c0:/src# nodemon server.js
22 Nov 14:37:31 - [nodemon] v1.2.1
22 Nov 14:37:31 - [nodemon] to restart at any time, enter `rs`
22 Nov 14:37:31 - [nodemon] watching: *.*
22 Nov 14:37:31 - [nodemon] starting `node server.js`
Listening on port 3000
候用瀏覽器打:結

{
"status": "ok"
}