tomcat ajax 配置文件,tomcat部署web应用的4种方法 配置详解【重点】【总结】

在Tomcat中有四种部署Web应用的方式,简要的概括分别是:

(1)利用Tomcat自动部署

(2)利用控制台进行部署

(3)增加自定义的Web部署文件(%Tomcat_Home%\conf\Catalina\localhost\AppName.xml)

(4)手动修改%Tomcat_Home%\conf\server.xml文件来部署web应用

第一种方式:利用Tomcat自动部署

利用Tomcat自动部署方式是最简单的、最常用的方式。若一个web应用结构为D:\workspace\WebApp\AppName\WEB-INF\*,只要将一个Web应用的WebContent级的AppName直接扔进%Tomcat_Home%\webapps文件夹下,系统会把该web应用直接部署到Tomcat中。所以这里不再赘述。

第二种方式:利用控制台进行部署

若一个web应用结构为D:\workspace\WebApp\AppName\WEB-INF\*,利用控制台进行部署的方式如下:进入tomcat的manager控制台的deploy区域——在Context path中键入"XXX"(可任意取名)——在WAR or Directory URL:键入D:\workspace\WebApp\AppName (表示去寻找此路径下的web应用)——点击deploy按钮。

169678380_1_20190830093011676.gif

然后在%Tomcat_Home%\webapps路径下将会自动出现一个名为XXX的文件夹,其内容即是D:\workspace\WebApp\AppName的内容,只是名字是XXX而已(这就是前面在Context path键入XXX的结果)。

以上说明利用控制台进行部署的实质仍然是利用Tomcat的自动部署。

第三种方式:增加自定义的Web部署文件

若一个web应用结构为D:\workspace\WebApp\AppName\WEB-INF\*,这种部署方式稍微复杂一点,我们需要在%Tomcat_Home%\conf路径下新建一个文件夹catalina——再在其中新建一个localhost文件夹——最后再新建一个XML文件,即增加两层目录并新增XML文件:%Tomcat_Home%\conf\Catalina\localhost\web应用配置文件.xml ,该文件就是部署Web应用的配置文件。例如,我们新建一个%Tomcat_Home%\conf\Catalina\localhost\XXX.xml,  该文件的内容如下:

注意:

(1)以上代码中的workDir表示将该Web应用部署后置于的工作目录(Web应用中JSP编译成的Servlet都可在其中找到),如果使用的Eclipse作为IDE,一般可人为设置在WebApp的work目录下。

如果自定义web部署文件XXX.xml中未指明workdir,则web应用将默认部署在%Tomcat_Home%\work\Catalina\localhost\路径下新建的以XXX命名的文件夹下。(Web应用中JSP编译成的Servlet都可在其中找到)

(2)Context path即指定web应用的虚拟路径名。docBase指定要部署的Web应用的源路径。

其实开发者可以使用安装有Tomcat插件eclipse自动创建部署文件来部署Web应用而不必再手动建立该文件,方法如下:

1. 打开Eclipse——打开菜单栏window选择preference(首选项)——左侧选择Tomcat,如下图示:

169678380_2_20190830093012363.gif

2. 可以看到上图中高亮画出的Context declaration mode(Context 声明模式)中选择以Context files增加自定义部署文件的形式部署web应用——然后Contexts directory中指定上述文件的上级目录(即%Tomcat_Home%\conf\Catalina\localhost )——点击Apply或OK。

3. 完上述步骤,再选中Web项目右键点击properties(属性)——选择右侧的Tomcat ,如下图所示:

169678380_3_20190830093012707.gif

4. 勾上"Is a Tomcat project"前的checkbox,将项目关联至Tomcat。

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

在Subdirectory to set as web application root (optional)中填入要部署的Web应用的实际路径(即WEB-INF上级目录)。

注意:Eclipse会自动地将workdir设置在Workspace\WebApp\work下。

如此便自动创建了%Tomcat_Home%\conf\Catalina\localhost\XXX.xml文件。启动Tomcat 即可自动部署Web应用。

第四种方式:手动修改%Tomcat_Home%\conf\server.xml文件来部署web应用

此方法即打开%Tomcat_Home%\conf\server.xml文件并在其中增加以下元素:

然后启动Tomcat即可。

当然如果使用Eclipse,在Eclipse中的设置也有改变:打开菜单栏window选择preference(首选项)——左侧选择Tomcat——可以看到上图中高亮画出的Context declaration mode(Context 声明模式)中选择以Server.xml文件来部署web应用。

169678380_4_2019083009301319.gif

eclipse里tomcat配置选项详解

今天用Mercurial将\Servers\Tomcat v6.0 Server at localhost-config以及

\.metadata\.plugins\org.eclipse.wst.server.core纳入版本控制,监控了Eclipse JEE在修改Server Options的时候到底干了些啥。。

默认的配置如下:

169214259_2_20190824112525504.jpg

(1)serve modules without publishing:

让tomcat直接使用WebContent下的东西

不会publish到\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps

勾上它会将tmp0\wtpwebapps下相关的resources删除,

同时会修改Servers/Tomcat v6.0 Server at localhost-config/servers.xml中的serveModulesWithoutPublish=true

以及tmp0/conf/server.xml中的配置

(2)publish module contexts to separate XML files

勾选 上后会修改Servers/Tomcat v6.0 Server at localhost-config/servers.xml中的saveSeparateContextFiles=true

同时将tmp0/conf/server.xml中关于该app的元素

移动到tmp0/conf/Catalina/localhost/appName.xml中..

(3)Automatically publish  when resources change

勾选上

这样修改JSP后tomcat能热加载。。(这个选项对java文件无效,关了以后每次也能热加载class)

注意:

hot reload只在debug模式下有效.

参考:http://stackoverflow.com/questions/921684/how-to-tell-eclipse-3-4-wtp-to-not-restart-tomcat-on-jsp-save

reloadable="true" 方式,虽可加载变化过或新增的类但存在以下问题

1、内存清空,整体web app会重新加载,web.xml中配置的监听器会全部再执行。

2、其他没变的类也会重新加载。

3、当系统很大时,非常耗时。

可以使用dcevm

修改server.xml和content.xml后自动还原问题

修改完tomcat目录下的配置文件,重启服务器后,发现xml会重新恢复默认设置

原因:在eclipse里集成添加tomcat时,eclipse会自动储存tomcat的配置文件。Tomcat服务器在Eclipse中启动时,会自动发布Eclipse中部署的项目,但是我的项目是自己手动在外面部署的,Eclipse只认得在它里面部署的项目,因此它会创建一个新的server.xml文件覆盖原来的文件.

方法一:

设置Ecplise,取消掉自动发布功能。

依次选择 Window-Preferences-Server-Launching,取消Automatically publish when starting servers

168447269_1_20190814115738347

方法二:

先关闭服务器。

Ecplise项目中有一个Server项目,有一个Tomcat v8.5 Server at localhost-config,

里面也有server.xml和content.xml,替换成你修改后的文件。Tomcat重新发布时会用这里的配置文件覆盖Tomcat下的conf下的文件。

168447269_2_20190814115738629

tomcat 配置 development true jsp

tomcat这两种模式对大家的影响主要是在jsp的开发当中。大家都知道jsp需要先编译成servlet源文件并编译为字节码,即生成.class文件才可以执行,所以在jsp文件首次运行时先要进行编译导致运行较慢,之后的访问都会直接进入执行阶段。

在开发模式下容器会经常检查jsp文件的时间戳来决定是否进行编译,如果jsp文件的时间戳比对应的.class文件的时间戳晚就证明jsp又进行了修改,需要再次编译,但是不断地进行时间戳的比对开销很大,会影响系统性能,而在生产模式下系统不会经常想的检查时间戳。所以一般在开发过程中使用开发模式,这样可以在jsp修改后再次访问就可以见到修改后的效果非常方便,而系统上线之后就要改为生产模式,虽然生产模式下会导致jsp的修改需要重启服务器才可以生效,但是上线后的改动较少而且性能很重要。

在tomcat的安装目录下conf文件夹下面的web.xml文件中配置tomcat的模式。如图一所示,在web.xml中配置参数development为true就是开发模式,如图二所示为false就是生产模式。

图片一

169214100_1_20190824112227457

图片二

169214100_2_201908241122284

在生产模式下也可以通过配置checkInterval参数让tomcat每过一段时间就去检查一下时间戳,这种跟开发模式还是有区别的,可以称为后台编译。checkInterval参数值默认为0,单位为秒,配置位置同上。

在开发模式下,可用通过配置modificationTestInterval参数的值调节容器检查时间戳的频率,默认值为4,单位为秒。也就是容器说在检查完某个jsp的时间戳之后4秒才会再次检查,期间有对这个jsp的请求也不会检查时间戳,当然也不会重新编译,如果设置为0,则在每次有访问都会检查时间戳,可以保证编译为最新的版本。

综合以上所说,大家可以根据对不同情况下的需求选择最佳的配置方案。

tomcat配置context的crossContext属性

在tomcat下,context元素有一个crossContext属性,如果配置为true,则可以实现在同一个tomcat下的多个web应用之间实现ServletContext对象访问。该属性主要用于跨应用访问数据。

在实际项目中遇到一个奇葩需求:在同一个页面框架下嵌套了2套应用!!!

app1和app2部署在同一个tomcat,且session超时时间使用tomcat全局配置。

app2存在定时ajax刷新,导致app2不会存在session超时的问题;因此,如果用户长期停留在app2某个定时刷新的页面,就会出现如下情况;

app2不会出现session超时,但是app1在指定时间之后就会session超时,这时访问app2页面不会跳转到登录页面,而点击app1页面元素就会退出登录,重新跳转到登录页面。

给用于一种很不自然的体验!

为了解决这个问题,做如下调整:

1. 首先,必须明确一个现实:app1和app2是2个独立的应用,所以对于浏览器访问都会在服务器端各自生成独立的session。

2. tomcat支持配置context元素的crossContext属性为true,使得在app2中可以访问到app1应用的ServletContext对象。

利用这个特性,可以在app2中知道app1应用下对应的session是否已经超时。如果已经超时,则在访问app2时就退出登录,跳转到登录页面。

169286643_1_20190825105114285.png

1. tomcat配置

2. app1端public void login(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{

...

HttpSession session = req.getSession();

req.getSession().getServletContext().setAttribute(session.getId(), session);

resp.sendRedirect("app2?app1sid=" + session.getId()); //将app1对应的sessonid传递给app2...

}

3. app2端public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

... if (pageType == 1) {//从app1跳转到app2//获取在app1应用中对应的session id并保存到app2会话中if(req.getSession().getAttribute(req.getSession().getId()) == null) {

String app1SesionId = request.getParameter("app1sid");

req.getSession().setAttribute(req.getSession().getId(), app1SesionId);

}

}else { //获取app1应用上下文ServletContext app1Context = req.getSession().getServletContext().getContext("/app1");

String app1SessionId = req.getSession().getAttribute(req.getSession().getId()).toString();

HttpSession app1Session = (HttpSession)app1Context.getAttribute(app1SessionId); try {

app1Session.getAttribute("login_user");

} catch (IllegalStateException e) {

e.printStackTrace(); //app1会话已经超时, 直接在访问app2时就退出登录//另外,还应该在app2定时刷新的地方检测app1会话是否已经超时,如果已经超时,则不再返回数据req.getSession().invalidate();

resp.sendRedirect("/app1/login.do"); return;

}

}

...

}

关于context配置crossContext属性详见:http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

切记:该特性只适用于多个应用程序部署在同一个tomcat下的情形!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值