A. Java中Web容器
web容器可以理解为打开浏览器后并有一个提交请求所形成的环境.
B. 常用的java web 容器有哪几种
小项目,或者是个人开发tomcat
大项目或者商业项目一般采用:weblgoic/webshere
其他的还有jboss、glasshfish等
一些示例项目或者小项目常采用jetty
C. JAVA WEB开发 初学者!
先跟你说几个事情,后期好处理你多个问题。
1.src是源文件夹,这里你可以创建N个源文件夹,都是未来要编译的,你也可以创建一个源文件夹叫conf,把配置文件都放这里,但是前提struts1不可以(一会说为什么),也就是源文件夹是一类,等着编译的,那么编译到哪呢? 就是下面的
2.WebRoot\WEB-INF\classes有这个文件夹,编译的东西就在这,WEB-INF下这里只对程序员可见,对请求者也就是客户端不可见(默认就是classes和lib),所以有些项目为了不让用户直接访问JSP,就将JSP放这下面,用户只能请求控制层(以后我说C层),然后返回相应页面,当然,有的项目还有欢迎页,在web.xml里配置的,下面说它
3.web.xml,这个是Web项目中自带的,为什么自带?因为一个web项目在被部署(就是加载到WEB容器里,比如tomcat,jboss等)后,当启动web容器时,web.xml里面就会有几个标签被web容易所加载读取。并且这里有很多标签,加载也是有顺序的,会一个一个扫描,你刚学,什么顺序自己以后研究。
说第一个问题,首先我要说现在很少用Struts1,也就是教学用用,毕竟教学更新慢,至少现在都用struts2(以后简称S1,S2)。那个目录之所以一定要在那,是因为s1源码默认去那个路径找配置文件,如果你以后会s2,并且集成spring,你就知道配置文件路径可更改。
说第二个问题,这里WebRoot文件夹名字不是必须的,但是从它开始往下就是未来要发布出去的东西,就是所谓的前台展示,在代码中只要有关路径的地方以/开头,都是说从它往下开始,这样配置有一点好,就是未来其他路径变了,请求也不用变,因为是从所谓的相对中的绝对路径请求。
第三个问题我想不用过多解释,web.xml是属于web项目,并不属于某个技术,struts1的那个配置文件就属于s1框架的,s2的就叫struts.xml,记得框架源码都有一个默认加载的文件名和路径,你刚学就那么写就行,以后懂了就随意更改。
最后说下为什么有的把JSP放到不让直接访问,必须先走C层呢(s1和s2框架就是MVC框架),因为有好多页面要判断用户是否登录,如果没登录是不能直接访问的,必须要先登录,这样从C走,我就可以判断代码,要是直接访问页面,还得在页面里写小脚本判断。 通常先走C是对的,域名直接映射成C的请求。再有不懂追问,呵呵
D. java问题:什么是web容器列举几个常见的web容器
Web Container也是一个组件,是J2EE本身提供的。它封装了一般Web组件与Web Server打交道的一些底层的细节。就是说,你自己开发的组件并不是直接调用WebServer的功能,而是通过Web Container间接与WebServer对话,这样你就不许要知道许多关于WebServer的底层技术。
E. java里面的web容器是指什么
例如apache、nginx等都是此类。不过现实中很多web服务器出于种种考虑回内置针对特定语言或架构的处理体系,例如iis内置了asp.net的处理架构,apache也可以通过扩展提供php、rails等处理架构(这些特别内置的模块,你也可以简单理解为web容器了)。如果web服务器自己不处理特别请求,那么可以通过cgi等方式转发给后端处理,例如apache、nginx都可以通过fastcgi将请求转发给后端端口,例如php-fpm服务,或python的什么服务等等。 其实在java之前一直不太有web容器这种说法,到目前似乎也只有java是这么提的。这主要是因为整个java的web开发是基于javaEE的servlet技术体系,该体系规范规定了web请求的整个生命周期的方方面面。但是规范只是规定了实现的标准,或者说是接口(interface),具体实现都是各厂商自己搞定,所以这就出现了各种不同的web容器,例如tomcat、jetty、jboss等等。 又说回来,这些容器为了方便开发者,大多都提供了web服务器的功能,不过和专业的web服务器相比总有些缺失不足,所以一般只用来做开发用,生产环境主要还是作为后端服务。
F. java web 容器有什么作用
就是一种所谓的中间件,用来运行java程序的。
你想,如果让你凭空写一个能通过web访问的程序,是不是很难?
有了web容器,只要按照它的规范写出功能逻辑就可以了,比如servlet,大大简化了开发
G. java做web开发都需要java的哪些知识
开发JSP项目所需要的技能包括: Java 在使用JSP的时候,任何程序员都不可能不和Java打交道。JSP本身就是用一套Java对象编写的。更重要的是,JSP的缺省脚本语言就是Java。所以,一个JSP程序员必须理解Java的基础概念。我建议程序员在开发JSP之前至少得有一个月开发Java的经验。 HTML/XHTML 不管你怎么看JSP,反正你最后要产生的结果中超过95%的比例将是HTML文件。因此,JSP程序员还得全面理解HTML技术。我建议程序员在考虑学习JSP之前应该有至少一个月的HTML/XHTML编程经验。 了解Web服务器 因为JSP是一种用以建立网络站点的编程技术,所以在某种程度上你应该了解一点你的站点所采用的Web服务器的相关知识。Web服务器处理HTML页面,所以,它通常要与其它软件联合起来共同运行才可以处理JSP页。这也是我们所遇到JSP难题之一。 了解运行JSP的容器 所谓容器(container)其实就是JSP服务器。这是一种解释软件,负责解释向JSP页提出的请求,同时,把输出结果送回向JSP页提出请求的用户。容器很象Web服务器,只不过后者处理HTML网页而容器则为JSP页提供服务。要学习JSP容器的细节所消耗的时间取决于你最后选择的容器。某些容器很简单,学习起来也很容易。而另一些容器则功能强大但学习和维护的时间很长。要了解更多的相关内容请参看有关JSP工具的FAQ。 JavaScript JSP产生的数据会被发送给客户机,通常就是某种浏览器,也就是我们所说的“客户端”。当前的大多数JSP输出结果都建立在HTML基础之上。JavaScript则是针对HTML的脚本语言。JavaScript允许程序员在客户端执行条件逻辑。这就意味着客户机和服务器之间的联系会少一些,客户机的性能也就大大增强了。还有,JavaScript允许程序员修改HTML被显示的方式以增加HTML的功能。JavaScript可不是Java。实际上,JavaScript仅仅在能看到HTML输出的浏览器上运行。 有一点要特别注意:尽管JavaScript还是这种脚本语言所普遍接受的名字,但是JavaScript实际上拥有好多种具有不同名称的不同版本(微软推出的JavaScript就叫Jscript)。比如,现在欧洲推出的新型JavaScript标准就叫ECMAScript。所以如果有人把JavaScript称作Jscript或者ECMAScript你可别犯糊涂啊! 学习JSP JSP并不是一种真正的编程语言而是: ¨—用Java编写的一组对象的集合。 ¨—采用简单的脚本语法用来在对象和JSP容器之间通信。 学习JSP技术需要你掌握一些简单地脚本规范和组成JSP标准的对象。在程序员熟悉和了解Java之后,学习JSP的基础知识就相当简单了。 按JSP的思想进行思考 JSP是一种分布式的、基于Web的应用程序。这就是说,其逻辑处理被划分在许多机器上进行。大多数处理过程发生在装有JSP应用程序的服务器上。还有一些时间则花在处理客户机上的HTML页面上,而这些客户机就是察看Web应用程序的客户机。还有许多项目会和数据库服务器一道协同工作来处理数据。更大的项目可能采用组件服务器运行集中的EnterpriseJavaBean对象。如果一个Web应用程序足够大,核心的JSP部分还可能实际上分布在若干JSP服务器运行。所有这一切都意味着,你必须了解JSP应用程序的逻辑处理在许多机器上被恰当分布运行的原理。更重要的是,理解混合客户端和服务器端逻辑的Web应用程序这种双重性是很关键的。所以,按JSP的思想进行思考在我看来绝对算得上是一门真正的艺术。 学习JSP语法和对象是最基础的第一步。同时我们还采取其他一些重要的工作来完成掌握JSP这一过程,这些工作有: —了解这些不同技术之间是如何相互交流、协同运行的。 —了解这些逻辑处理过程在什么时候、在什么场合下发生。 分布式应用程序的平衡是最难掌握的技术之一。把这问题搞清楚了可以大大提高学习过程的速度。否则你可能在这一主题上花费大量的时间和精力。 开发JSP项目所需要的其他一些技能还包括: DHTML和层叠样式表 我现在建立的的每个Web应用程序都使用了DHTML(动态HTML)和层叠样式表CSS(CascadingStyleSheet)。这些工具对HTML页面的功能而言是个极大的扩展。它们可以让用户建立模仿客户机—服务器结构的Web应用程序。我个人认为这些工具完全是我们必须掌握的技能,不过,很多简单的项目或许并不需要这些工具。 Servlet 你不需要学习过多的servlet知识。当Sun开发了JSP的时候JSP曾被认为“servlet的简化版”。
H. java中web容器的作用
比方说:tomcat是一个web应用服务器,它其中包含了servlet容器和jsp容器,而servlet容器就是负责管理servlet的生命周期的,如果没有这个容器,那你的请求就无法实例化为servlet,你需要自己去写代码解析http请求。如果你想解析http请求,你就必须了解http协议,这是一个比较复杂的过程,现在有servlet容器,容器就会帮你去解析。
常见的web容器有tomcat,JBOSS或webloigc。
I. 简述一下Java中的web容器,举几个例子也行
目前市场上常用的开源Java Web容器有Tomcat、Resin和Jetty。其中Resin从V3.0后需要购买才能用于商业目的,而其他两种则是纯开源的。可以分别从他们的网站上下载最新的二进制包和源代码。
作为Web容器,需要承受较高的访问量,能够同时响应不同用户的请求,能够在恶劣环境下保持较高的稳定性和健壮性。在HTTP服务器领域,Apache HTTPD的效率是最高的,也是最为稳定的,但它只能处理静态页面的请求,如果需要支持动态页面请求,则必须安装相应的插件,比如mod_perl可以处理Perl脚本,mod_python可以处理Python脚本。
上面介绍的三中Web容器,都是使用Java编写的HTTP服务器,当然他们都可以嵌到Apache中使用,也可以独立使用。分析它们处理客户请求的方法有助于了解Java多线程和线程池的实现方法,为设计强大的多线程服务器打好基础。
Tomcat是使用最广的Java Web容器,功能强大,可扩展性强。最新版本的Tomcat(5.5.17)为了提高响应速度和效率,使用了Apache Portable Runtime(APR)作为最底层,使用了APR中包含Socket、缓冲池等多种技术,性能也提高了。APR也是Apache HTTPD的最底层。可想而知,同属于ASF(Apache Software Foundation)中的成员,互补互用的情况还是很多的,虽然使用了不同的开发语言。
Tomcat 的线程池位于tomcat-util.jar文件中,包含了两种线程池方案。方案一:使用APR的Pool技术,使用了JNI;方案二:使用Java实现的ThreadPool。这里介绍的是第二种。如果想了解APR的Pool技术,可以查看APR的源代码。
ThreadPool默认创建了5个线程,保存在一个200维的线程数组中,创建时就启动了这些线程,当然在没有请求时,它们都处理“等待”状态(其实就是一个while循环,不停的等待notify)。如果有请求时,空闲线程会被唤醒执行用户的请求。
具体的请求过程是: 服务启动时,创建一个一维线程数组(maxThread=200个),并创建空闲线程(minSpareThreads=5个)随时等待用户请求。 当有用户请求时,调用 threadpool.runIt(ThreadPoolRunnable)方法,将一个需要执行的实例传给ThreadPool中。其中用户需要执行的实例必须实现ThreadPoolRunnable接口。 ThreadPool首先查找空闲的线程,如果有则用它运行要执行ThreadPoolRunnable;如果没有空闲线程并且没有超过maxThreads,就一次性创建minSpareThreads个空闲线程;如果已经超过了maxThreads了,就等待空闲线程了。总之,要找到空闲的线程,以便用它执行实例。找到后,将该线程从线程数组中移走。 接着唤醒已经找到的空闲线程,用它运行执行实例(ThreadPoolRunnable)。 运行完ThreadPoolRunnable后,就将该线程重新放到线程数组中,作为空闲线程供后续使用。
由此可以看出,Tomcat的线程池实现是比较简单的,ThreadPool.java也只有840行代码。用一个一维数组保存空闲的线程,每次以一个较小步伐(5个)创建空闲线程并放到线程池中。使用时从数组中移走空闲的线程,用完后,再“归还”给线程池。
J. j2ee开发中的“java容器”和“web容器”有什么区别
web容器是一个Java 所编写的程序,原先必须自行编写程序以管理对象关系,现在容器都会自动帮您作好
容器(Container) 容器是一个Java 所编写的程序,原先必须自行编写程序以管理对象关系,现在容器都会自动帮您作好。 常用容器 jBoss, WebSphere,WebLogic,Resin,Tomcat。
JAVA内部的容器类
Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap 。
ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程安全的,而 ArrayList和HashMap并不是线程安全的。因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于 ArrayList和HashMap。、
Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。