分享

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

 一本正经地胡闹 2019-08-30

在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按钮。

然后在%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,该文件的内容如下:

[html]view plaincopy
  1. <Contextpath="/XXX" reloadable="true" docBase="D:\workspace\WebApp\AppName" workDir="D:\workspace\WebApp\work"/>

注意:

(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,如下图示:

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

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

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文件并在其中增加以下元素:

[html]view plaincopy
  1. <ContextdocBase="D:\workspace\WebApp\AppName" path="/XXX" debug="0" reloadable="false" />

然后启动Tomcat即可。

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

转自 https://www.cnblogs.com/xiohao/p/3689832.html

eclipse里tomcat配置选项详解

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

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

默认的配置如下:

(1)serve modules without publishing:
让tomcat直接使用WebContent下的东西
不会publish到<workspace>\.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中的<Context>配置

(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的<Context>元素

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

(3)Automatically publish  when resources change

勾选上

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

注意:

hot reload只在debug模式下有效.

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

另见: https://www./eclipse/how-to-configure-hot-deploy-in-eclipse/

转自 https://my.oschina.net/uniquejava/blog/80945

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

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

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

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

可以使用dcevm

转自 https://www./blog/guoba6688-sina-com-856153

修改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

image

方法二:

先关闭服务器。

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

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

image

转自 https://blog.csdn.net/Mint6/article/details/77800119

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就是生产模式。

图片一 
这里写图片描述

图片二

这里写图片描述

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

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

转自 https://blog.csdn.net/woduoxiangfeiya/article/details/51181606

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时就退出登录,跳转到登录页面。

1. tomcat配置

<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context path="/app1" debug="0" reloadable="true" crossContext="true" /><Context path="/app2" debug="0" reloadable="true" crossContext="true" /></Host>

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端

doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)  IOException, ServletException {
    ...     (pageType == 1) {(req.getSession().getAttribute() == ) {
            String app1SesionId = request.getParameter("app1sid");
            req.getSession().setAttribute(, app1SesionId);
        }
    } {        ServletContext app1Context = req.getSession().getServletContext().getContext("/app1");
        String app1SessionId = req.getSession().getAttribute().toString();
        HttpSession app1Session = (HttpSession)app1Context.getAttribute(app1SessionId);         {
            app1Session.getAttribute("login_user");
        }  (IllegalStateException e) {
            e.printStackTrace();            req.getSession().invalidate();
            resp.sendRedirect("/app1/login.do");            ;
        }
    }
    ...    
}

关于context配置crossContext属性详见:http://tomcat./tomcat-7.0-doc/config/context.html
切记:该特性只适用于多个应用程序部署在同一个tomcat下的情形!

转自 https://www.cnblogs.com/nuccch/p/7156142.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多