Java Web应用由一组Servlet、HTML页面、类、以及其它可以被绑定的资源构成。他可以在各种供应商提供的实现Servlet规范的Servlet容器中运行。
Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。
Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
以下方法都是由 Serlvet 容器负责调用:
Servlet容器也称为JavaWeb应用容器,或者Servlet/JSP容器,比如Tomcat。
感性认识:运行 Servlet、JSP、Filter 等的软件环境。
Servlet容器为JavaWeb应用提供运行时环境,它负责创建 Servlet、管理Servlet和JSP的生命周期,以及管理它们的共享数据。
第一种是访问静态页面,第二种情况是访问动态页面,其实也就是通过Servlet来和后台数据库进行交互。
客户<-->Servlet容器<-->Servlet
<servlet>
<!-- Servlet 注册的名字 -->
<servlet-name>secondServlet</servlet-name>
<!-- Servlet 的全类名 -->
<servlet-class>com.buaa.zhao.SecondServlet</servlet-class>
<!-- 可以指定 Servlet 被创建的时机 -->
<load-on-startup>2</load-on-startup>
</servlet>
load-on-startup可以指定 Serlvet 被创建的时机。若为负数, 则在第一次请求时被创建(也就是说不请求访问它,不会被创建)。若为 0 或正数, 则在当前 WEB 应用被Serlvet 容器加载时创建实例, 且数组越小越早被创建。
同一个Servlet可以被映射到多个URL上,即多个 <servlet-mapping>
元素的<servlet-name>
子元素的设置值可以是同一个Servlet的注册名。
在Servlet映射到的URL中也可以使用 * 通配符,但是只能有两种固定的格式:一种格式是“.扩展名”,另一种格式是以正斜杠(/)开头并以“/”结尾。
两种方式只能选其一,也就是说带/的不能带扩展名
<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
OR
<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
通过一个程序,观测Servlet的方法功能。
package com.buaa.zhao;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HelloServlet implements Servlet{
@Override
public void destroy() {
System.out.println("destory.....");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig....");
return null;
}
@Override
public String getServletInfo() {
System.out.println("getServletInfo....");
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("init....");
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("service....");
}
public HelloServlet() {
System.out.println("HelloServlet‘s constructor");
}
}
在文件中添加如下内容:
<!-- 配置和映射Servlet -->
<servlet>
<!-- Servlet 注册的名字 -->
<servlet-name>helloServlet</servlet-name>
<!-- Servlet 的全类名 -->
<servlet-class>com.buaa.zhao.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 需要和某一个 servlet 节点的 serlvet-name 子节点的文本节点一致 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射具体的访问路径: / 代表当前 WEB 应用的根目录. -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
启动Tomcat服务器,打开http://localhost:8989/JavaWebTest/hello
。
控制端部分输出信息:
信息: Server startup in 375 ms
HelloServlet‘s constructor
init....
service....
service....
service....
service....
service....
service....
service....
service....
七月 26, 2015 11:46:49 上午 org.apache.catalina.core.StandardServer await
信息: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
七月 26, 2015 11:46:49 上午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["http-apr-8989"]
七月 26, 2015 11:46:49 上午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["ajp-apr-8009"]
七月 26, 2015 11:46:50 上午 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service Catalina
destory.....
七月 26, 2015 11:46:50 上午 org.apache.coyote.AbstractProtocol stop
信息: Stopping ProtocolHandler ["http-apr-8989"]
通过输出信息可以观测到:
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zhaodedong/article/details/47067845