我以Tomcat6.0为例讲解Tomcat的结构,目地是理解和使用Tomcat。
当我们启动Tomcat后(手动启动是双击Tomcat 6.0/bin/startup.bat文件),在浏览器中输入http://localhost:8080/,我们会看到Tomcat的主页面,这个页面就是Tomcat 6.0/webapps/ROOT/index.jsp,这是由于我们没有输入项目名,所以服务器就运行默认的项目(ROOT项目)。在主页面中我们可以查看Tomcat下的Web应用的连接情况、管理Tomcat、查看Tomcat文档、Serlvet示例和JSP示例等等(下图)。
当然我们也能直接输入地址http://localhost:8080/manager/html访问管理页面,它实际运行的就是Tomcat 6.0/webapps/manager/项目。
假设我们点击上图的JSP Examples,它请求的URL是http://localhost:8080/examples/jsp/index.html,也就是Tomcat提供的JSP项目示例,Tomcat 6.0/webapps/examples/jsp/index.html。这些都是Tomcat为我们提供的项目。
下面让我们自己来创建一个项目:
在Tomcat 6.0/webapps/下创建一下名为myapp的项目(也称Web应用),在该项目下新建一个index.jsp文件,完整目录为Tomcat 6.0/webapps/myapp/index.jsp,输入代码内容如下
<html>
<head><title>Tomcat Study</title></head>
<body>
This is JSP Page.
</body>
</html>
然后在浏览器地址栏中输入http://localhost:8080/myapp/或者http://localhost:8080/myapp/index.jsp访问(注意:前提是Tomcat是启动状态),会看到如下页面
最后在Tomcat 6.0/webapps/myapp目录下新建名为jsp的目录,在新建的目录下新建link.jsp文件,完整目录为Tomcat 6.0/webapps/myapp/jsp/link.jsp。输入代码内容如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Link Page</title>
</head>
<body>
作者:谌冬华
</body>
</html>
在浏览器地址栏中输入http://localhost:8080/myapp/jsp/link.jsp,会看到如下页面
好了,JSP的用法就到这里,下面我们运行Servlet玩玩
在Tomcat 6.0/webapps/myapp/目录下新建名为WEB-INF的目录,再在WEB-INF的目录下新建classes目录和lib目录。编写一个HelloServlet.java文件并将其编译成HelloServlet.class文件放到Tomcat 6.0/webapps/myapp/WEB-INF/class/目录下,HelloServlet引用Tomcat 6.0/lib/servlet-api.jar包的HttpServlet类。HelloServlet.java文件代码如下
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
public void init() {
System.out.println("HelloServlet类中的init()方法被执行!");
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter pw = response.getWriter();
pw.append("<html>");
pw.append("<head><title>Servlet For Fun</title></head>");
pw.append("<body>");
pw.append("All from HttpServletRequest Object");
pw.append("<br/>Scheme:" + request.getScheme());
pw.append("<br/>ServerName:" + request.getServerName());
pw.append("<br/>ServerPort:" + request.getServerPort());
pw.append("<br/>ContextPath:" + request.getContextPath());
pw.append("<br/>ServletPath:" + request.getServletPath());
pw.append("<br/>Method:" + request.getMethod());
pw.append("<br/>Protocol:" + request.getProtocol());
pw.append("<br/>RequestURI:" + request.getRequestURI());
pw.append("<br/>PathInfo:" + request.getPathInfo());
pw.append("</body>");
pw.append("</html>");
pw.close();
}
}
在Tomcat 6.0/webapps/myapp/WEB-INF/目录下新建web.xml文件,内容如下
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>helloservlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloservlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
</web-app>
好了,现在看看myapp项目的整个目录结构,呵呵,它就是我们用IDE(如Eclipse)开发时的目录结构,这个目录结构也是发部项目的目录结构。
下面是访问该Servlet的输出页面
注意:Tomcat 6.0/lib/目录下的jar包可供所有项目引用,而某个项目myapp/WEB-INF/lib/下的jar包只供该项目引用。
发布项目
一般我们会把开发好的Web应用打成war包,然后发布。现在就让我们来把刚刚创建好的myapp应用打成war包。
打开命令提示符,进入到应用所在目录,我这里是C:\Tomcat 6.0\webapps\myapp,输入并执行jar cvf myapp.war *
在C:\Tomcat 6.0\webapps\myapp目录下会出现myapp.war包,把这个war包拷贝到C:\Tomcat 6.0\webapps\目录下。有了myapp.war包,我们可以把myapp目录删除掉或者移到其它地方。重新启动Tomcat,再次访问之前的jsp和servlet,就和上面访问的显示一样了。
查看转换后的JSP
Tomcat容器会把JSP转换成java文件并编译成class。现在我们去看看,进入Tomcat 6.0\work\Catalina\localhost\myapp\org\apache\jsp目录,可以看到有一个index_jsp.java文件和一个index_jsp.class文件,这就是index.jsp转换过来的。再进入下一级的jsp目录,还有link_jsp.java和link_jsp.class文件,这是link.jsp转换过来的。转换的命名规则我就不解释了,相信大家一看就知道。下图是link.jsp的转换图
下面贴出index_jsp.java代码,如此简单的JSP页面转换后居然有这么多的代码
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
private static java.util.List _jspx_dependants;
private javax.el.ExpressionFactory _el_expressionfactory;
private org.apache.AnnotationProcessor _jsp_annotationprocessor;
public Object getDependants() {
return _jspx_dependants;
}
public void _jspInit() {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
_jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
}
public void _jspDestroy() {
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
try {
response.setContentType("text/html");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<title>Tomcat Study</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("\tThis is JSP Page.\r\n");
out.write("</body>\r\n");
out.write("</html>");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try { out.clearBuffer(); } catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
查看日志
Tomcat 6.0/log目录下存放的是运行Tomcat服务器和所有Web应用的日志信息,如下图
如localhost.2010-09-19.log就是我2010年9月19日运行的日志,看看部分日志的内容
2010-9-19 22:02:46 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
2010-9-19 22:02:47 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextDestroyed()
警告: Error unregistering MBeanServerDelegate
java.lang.NullPointerException
at org.apache.catalina.connector.MapperListener.destroy(MapperListener.java:176)
at org.apache.catalina.connector.Connector.stop(Connector.java:1135)
at org.apache.catalina.core.StandardService.stop(StandardService.java:596)
at org.apache.catalina.core.StandardServer.stop(StandardServer.java:744)
at org.apache.catalina.startup.Catalina.stop(Catalina.java:648)
at org.apache.catalina.startup.Catalina$CatalinaShutdownHook.run(Catalina.java:692)
通过查看日志,可以知道Tomcat服务器和Web应用运行的状况,如某一天是否抛出过异常
- 大小: 19.7 KB
- 大小: 34.7 KB
- 大小: 18 KB
- 大小: 19.1 KB
- 大小: 36.2 KB
- 大小: 34.1 KB
- 大小: 15 KB
- 大小: 28.1 KB
分享到:
相关推荐
Tomcat 结构概述 Tomcat 服务器的整体架构是由一系列可配置的组件构成的,其核心组件是 Catalina Servlet 容器,它是所有其他 Tomcat 组件的顶层容器。Tomcat 的组件可以在(conf/server.xml 文件中进行配置,每个 ...
【Tomcat 结构分析】 Tomcat 作为一款广泛使用的开源Web应用服务器,其设计和架构是轻量级的,尤其适合中小型系统和并发用户数量不多的环境。它常常与Apache HTTP服务器结合使用,以提供更全面的功能。对于初学者而...
详细的介绍了tomcat的组成结构、生命周期管理以及管道机制。
- **Server**:这是Tomcat结构中的最外层容器,代表一个独立的Tomcat实例。它可以包含一个或多个Service组件。 - **GlobalNamingResources**:提供了一种方式来管理服务器范围内的命名资源(如数据源等)。 ##### 2...
1. **Tomcat结构**: - **bin**:包含启动和停止Tomcat的脚本,如`catalina.sh/bat`、`startup.sh/bat`、`shutdown.sh/bat`等。 - **conf**:存放Tomcat配置文件,如`server.xml`(服务器配置)、`web.xml`(全局...
压缩包内的文件列表提供了对Tomcat结构的初步理解: 1. **LICENSE**: 这个文件包含Apache Tomcat的许可协议,详细说明了如何合法地使用、分发和修改此软件。 2. **CONTRIBUTING.md**: 该文件通常包含贡献代码或参与...
2. **Tomcat结构**: - Tomcat的目录结构包括`bin`(包含启动和停止脚本)、`conf`(配置文件)、`lib`(存放Tomcat运行所需的JAR文件)、`webapps`(存放Web应用)、`logs`(日志文件)、`temp`(临时文件)和`...
3. **Tomcat结构**:Tomcat服务器主要包含以下几个目录: - `bin`:存放启动和停止Tomcat的脚本。 - `conf`:配置文件,如server.xml、web.xml等。 - `lib`:存放Tomcat运行所需的JAR文件。 - `logs`:日志文件...
1. **Tomcat结构**: Tomcat的目录结构包括`bin`、`conf`、`lib`、`logs`、`temp`、`webapps`和`work`等关键部分。`bin`目录包含可执行文件和脚本,用于启动、停止和管理Tomcat;`conf`存放配置文件,如`server.xml...
1. **Tomcat结构**:Tomcat主要由几个关键组件构成,包括Catalina(Servlet容器)、 Coyote(HTTP/1.1协议实现)、Jasper(JSP引擎)和Commons Daemon(用于Windows和Unix的服务管理)等。 2. **部署Web应用**:在...
1. **Tomcat结构**:Apache Tomcat的目录结构通常包括`bin`、`conf`、`lib`、`logs`、`temp`、`webapps`和`work`等关键部分。`bin`包含可执行文件,如`catalina.sh`或`catalina.bat`,用于启动和停止Tomcat。`conf`...
1. **Tomcat结构**:Tomcat主要由以下几个部分组成:Catalina(核心Servlet容器)、Jasper(JSP编译器)、 Coyote(HTTP/HTTPS连接器)和Juli(日志模块)。这些组件协同工作,为Java Web应用提供服务。 2. **部署...
1. **Tomcat结构**:Tomcat的目录结构包括bin、conf、lib、logs、webapps和work等目录,每个目录都有其特定的功能。例如,bin目录存放可执行文件,conf存储服务器配置文件,webapps用于部署Web应用,而work目录则...
Tomcat的体系结构,基本配置,server.xml
### Tomcat目录结构及其说明 #### 一、概述 Apache Tomcat是一款开源的Servlet容器,主要用来运行Java Web应用程序。其目录结构清晰有序,每个目录都有特定的功能与用途,为开发者提供了良好的部署环境。了解...
1. **Tomcat结构**:Tomcat6包含几个关键目录,如`bin`用于存放可执行文件,`conf`存储配置文件,`webapps`是部署应用程序的地方,`logs`记录日志信息,`temp`临时文件夹,以及`work`存储编译后的JSP页面和Servlet。...
1. **Tomcat结构与组件**: - **Catalina**:核心组件,负责Servlet容器的主要功能,处理HTTP请求和响应。 - ** Coyote**:处理网络连接器和协议处理器,如处理HTTP/1.1请求。 - ** Jasper**:JSP编译器,将JSP...
1. **Tomcat结构**:Tomcat主要由Catalina(Servlet容器)、 Coyote(连接器)和Jasper(JSP引擎)等组件组成。Catalina处理Servlet请求,Coyote处理网络通信,Jasper编译并执行JSP页面。 2. **配置**:Tomcat的配置...
1. **Tomcat结构**:Tomcat由几个关键组件构成,包括Catalina(Servlet容器)、Jasper(JSP编译器)、 Coyote(HTTP/1.1连接器)和Commons Daemon(用于Windows和Unix的后台服务)等。 2. **部署应用**:在解压后的...
1. **Tomcat结构**:解压后,你会看到几个关键目录和文件: - `bin`:包含启动和停止Tomcat的脚本,如`catalina.sh`(Unix/Linux)和`startup.bat`(Windows)。 - `conf`:存储配置文件,如`server.xml`(定义...