当前位置:首页 » 网页前端 » 容器内运行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"
}