tomcat server local 和remote的区别

tomcat server local 和remote的区别,第1张

local是本地接口,remote是远程接口。web层调用app层使用remote接口。session bean和entity bean之间调用使用的是local接口。不用说你也明白,remote接口对性能的影响很大。所以在程序设计的时候我们尽量用loacal接口,也就是 facade模式。具体就是,web层调用app层的session bean,session bean在调用各个entity bean。就好比是打长途电话找5个人,你是准备给5个人分别通话(长途-remote)还是准备先和一人通话(长途-remote)然后在由这个人对另 外4个(短途-local)分别通知?我想你会选择第二种情况(facade模式)。 local接口可以在与ejb同一个JVM环境中调用,但是不能对它进行远程调用,假设你的web容器与所需调用的ejb不在一台服务器上,或者不 在同一个welogic server中时就不能调用local接口,在jndi查找的时候不能查找local home,而要查找remote home,也就是说需要实际进行RMI调用,而且必须提供Provider URL(例如t3://myserver:7001),而且他们返回给客户的对象也不一样,local home创建的是javaxejbEJBLocalObject类型,它没有继承Remote interface;而Remote home创建的是javaxejbEJBObject类型的,它扩展了Remote实际上javaxejbEJBLocalObject型接口 没有抛出RemoteException,因为对local类型接口的调用不是RMI,所以的对local接口的调用效率要高于对remote对象的调 用,针对这点对EJB的设计提出以下建议:

1、如果你的ejb客户只可能存在于与ejb相同app server,或者说同一个JVM环境中时,你可以只生成local类型接口(包括EJBHome 与EJBObject),如果你需要在与EJB容器不同的JVM环境中调用你的EJB的话,你必须生成Remote类型的接口(包括EJBHome 与EJBObject);

2、在一般情况下建议两种类型的接口(包括EJBHome 与EJBObject)都生成,尤其是Session Bean,Entity Bean,可以只生成local类型的接口,如果想远程调用你的Entity Bean一般用Session Bean做代理。

3、如果你不是远程调用EJB的话,使用EJB时建议调用local接口,这样效率高,因为远程调用就意味着建立网络连接,效率必然不如local调用。

4、在jb7中设计EJB时,默认情况下只给你生成local类型接口,所以你需要在设计EJB时把interfaces设成:local/remote,这样的话你的EJB至少会有5个Java文件

目前对JavaWeb的理解是:用一次提交过程来表示,当点击一个提交的标签<input>。会将url传到tomcat服务器,在tomcat的配置文件中找到管理javaweb项目的配置文件serverxml,在serverxml中配置管理web项目的路径。从当前web项目的路径中找到webxml文件(webxml文件是配置servlet的内容,把网络请求和响应的信息都是放在servlet中的service方法里处理)。在servlet中创建ServletRequest对象和ServletResponse对象,并调用service方法,在service方法中对浏览器做出响应操作。

1:浏览器发出请求: http://localhost:80/day11/hello

2:解析请求信息:

http:协议

localhost:找互联网上的哪一台主机

80: 从主机中找到对应80端口的程序--->Tomcat服务器

/day11: 当期项目的上下文路径

/hello: 当期请求的资源名

3:找到Tomcat根/config/serverxml文件

解析serverxml文件:

判断获取哪一个<Context/>元素的path属性为day11

若找不到:404错误

若 找到:解析该<Context/>元素,得到docBase属性,获取当期访问Web项目的根的绝对路径:

H:\javaPros\Servlet\webapp

4:从H:\javaPros\Servlet\webapp下的WEB-INF下找到webxml文件

判断webxml中是否有<url-pattern>的文本内容为/hello

若找不到:404错误

若 找到:继而可以获取该资源对应Servlet类的全限定名称:com_520it_01_helloHelloServlet

5:判断Servlet实例缓存池中是否有

com_520it_01_helloHelloServlet的对象

Map<String,Servlet> cache = (Tomcat提供的);

key:存Servlet类的全限定名称

value:该Servlet类的对象

Servlet obj = cacheget("com_520it_01_helloHelloServlet");

if(obj==null){

//Servlet实例缓存中没有该类的对象,第一次

GOTO 6:

}else{

//有对象,非第一次

GOTO 8:

}

6:使用反射调用构造器,创建对象

obj = ClassforName("com_520it_01_helloHelloServlet")newInstance();

把当前创建的Servlet对象,存放在缓存之中,供下次使用

cacheput("com_520it_01_helloHelloServlet",obj);

7:创建ServletConfig对象,并调用init方法

objinit(config);

8:创建ServletRequest对象和ServletResponse对象,并调用service方法

objservice(req,resp);

9:在service方法中对浏览器做出响应操作

可以通过域名访问阿里云服务器上的tomcat,具体步骤如下:

首先需要具备:域名(已备案)、服务器(以安装好系统)

1、安装jdk,配置好环境变量。在控制台Java和javac都正常。

2、安装apache tomcat 

3、开发好的网站项目上传服务器,解压并复制到apache\webapps目录下。

4、修改Tomcat的serverxml(我的是在C:\apache\conf目录下)文件,原默认8080端口改为80

5、Engine节点中defaultHost原localhost改为申请到的域名。

6、Host节点中name原localhost改为目标域名,并且在Host节点中添加如下的Context节点。

7、打开域名管理,添加网站解析,IP填入你云服务器的弹性公网IP即可。 

8、稍等1分钟,即可通过你的域名访问了。

在一个java EE项目中,部署了Tomcat 10版本的服务器,在运行过程中发现webapp里面的项目都可以正常跑起来,但是写的servlet文件全都没反应

查了资料才知道原来在Tomcat 10中把包名从以往版本的javax改成了jakarta,而maven导包的时候依旧使用原来的javax,导致Tomcat 10服务器的Servlet接口和我写的servlet文件不匹配,从而无法正常运行。

此时的依赖包

解决方案

在maven中导入Tomcat 10对应的jakartaservlet-api

旧的

然后添加一个新的jakartaservlet-api

注意version选的是500,另附# Tomcat和JDK版本的对应关系

再点击Load Maven Changes更新maven

最后重新导入更新后的依赖包

webservice个tomcat有什么关系。tomcat是web容器,发布web项目的。webservice接口要在web工程中生成,然后再tomcat中发布。不需要在tomcat中配置,而是需要在你工程中配置

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » tomcat server local 和remote的区别

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情