关于Tomcat和JVM的一些理解:
JVM(虚拟机),相当于电脑安装系统一样,可以运行应用程序。让tomcat【相当于电脑】跑起来,就得有jdk,而jdk自带了JVM【操作系统】
Idea中可以讲java文件编译为clasess字节码文件,从而在Tomcat的JVM中运行。
本身Tomcat无法进行编译操作,编译是在idea中进行的,Tomcat只能加载classes字节码文件在JVM中运行,所以当把WEB-INF下的classes/com下的经过idea编译好的classes字节码文件删除后,重新启动Tomcat不会重新生成classes文件【1.编译只在idea中进行2.也因为本身源代码不在Tomcat中】,所以如果删除了WEB-INF/classes/com的字节码classes文件,那么当Tomcat启动时去加载spring相关xml中类对象时会找不到,服务无法正常使用。
可以通过将源代码的jar直接放在WEB-INF/lib下 这样也可以将源代码的字节码文件加载到spring容器中,项目就可以正常使用了,即不用每次升级替换classes而替换jar就可以了。
一.Tomcat 启动首页配置:
web.xml中
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
index.jsp中可以写java代码
<% String urlUserLogin=SpringContextUtil.getSysParam("SYS_URL_USERLOGIN"); response.sendRedirect(urlUserLogin); %>
二.Tomcat启动类加载的顺序:Tomcat类装载器先装载classes目录下的类,再装载lib目录下的类。因为类同名时,classes优先。
所以要注意部署单体项目时:
如果是将的项目的源代码jar部署在lib下,那么要删除classes下的com目录,否则代码运行时不会走jar中的类。
如果没有将项目的源代码jar放在lib下,只是在classes下的com下运行,那么每次升级替换对应的类classes文件或者整个com目录都可以。
三.Tomcat启动主要依托于web.xml文件,是Tomcat容器启动的入口文件,一般用于:
(1)配置JSP。
(2)配置和管理Servlet。
(3)配置和管理Listener。
(4)配置和管理Filter。
(5)配置标签库。
(6)配置JSP属性。
(7)配置和管理JAAS授权认证。
(8)配置和管理资源引用。
(9)配置Web应用首页。
比较关键的有:
1.加载xml中配置好的对象到spring容器中
<!-- 设置Spring容器加载配置文件路径 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/config/spring/application-context.xml</param-value> </context-param>
2.设置多个过滤器:
2.1前端访问后端请求时的struts过滤拦截器
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-plugin.xml,config/struts/struts.xml</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/user/*</url-pattern> </filter-mapping>
2.2.公共安全校验过滤器
<filter> <filter-name>commonFilter</filter-name> <filter-class>com.bgd.platform.util.security.CommonFilter</filter-class> </filter> <filter-mapping> <filter-name>commonFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>commonFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>commonFilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping>
3.接受所有帆软请求服务的servlet接口
<servlet> <servlet-name>ReportServer</servlet-name> <servlet-class>com.fr.web.ReportServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ReportServer</servlet-name> <url-pattern>/ReportServer</url-pattern> </servlet-mapping>