Servlet

JavaWeb

概念

Java Web应用由一组Servlet、HTML页面、类、以及其他能够被绑定的资源构成。

他能够在各种供应商提供的实现Servlet规范的Servlet容器中执行。

包括内容

  • Servlet
  • JSP
  • 有用类
  • 静态文档如HTML、图片等
  • 描写叙述Web应用的信息(web.xml)

Servlet与Servlet容器

Servlet

简单介绍

Java Servlet是和平台无关的server端组件。它执行在Servlet容器中。

Servlet容器负责Servlet和客户的通信以及调用Servlet的方法。Servlet和客户的通信採用“请求/响应”的模式。

功能

  • 创建并返回基于客户请求的动态HTML页面。
  • 创建可嵌入到现有HTML页面中的部分HTML页面(HTML片段)。
  • 与其他server资源进行通信。

生命周期相关的方法

下面方法都是由 Serlvet 容器负责调用:

  1. 构造器:仅仅被调用一次. 仅仅有第一次请求 Servlet 时, 创建 Servlet 的实例. 调用构造器。 这说明 Serlvet 的单实例的!
  2. init 方法:仅仅被调用一次。 在创建好实例后马上被调用. 用于初始化当前 Servlet。

  3. service:被多次调用。 每次请求都会调用 service 方法. 实际用于响应请求的。
  4. destroy:仅仅被调用一次。 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前 Servlet 所占用的资源。

Servlet容器

概念

Servlet容器也称为JavaWeb应用容器,或者Servlet/JSP容器,比方Tomcat。

感性认识:执行 Servlet、JSP、Filter 等的软件环境。

Servlet容器为JavaWeb应用提供执行时环境,它负责创建 Servlet、管理Servlet和JSP的生命周期,以及管理它们的共享数据。

訪问流程

第一种是訪问静态页面。另外一种情况是訪问动态页面。事实上也就是通过Servlet来和后台数据库进行交互。

  • Web浏览器–>Webserver–>静态页面
  • Web浏览器–>Webserver–>Servlet容器(JSP、Servlet)<–>数据库

Servlet容器响应客户请求的过程

客户<-->Servlet容器<-->Servlet

Servlet配置參数

load-on-startup

配置

    <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 容器载入时创建实例, 且数组越小越早被创建。

serlvet-mapping

说明

同一个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測试程序

通过一个程序,观測Servlet的方法功能。

创建一个 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");
} }

配置web.xml文件

在文件里加入例如以下内容:

<!-- 配置和映射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>

执行測试

启动Tomcatserver,打开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://localhost:8989/JavaWebTest/hello时,执行顺序是HelloServlet()–>init()–>service()
  • 每次刷新页面,会仅仅调用service(),也就是仅仅输出“service….”
  • 关闭server的时候会输出“destory…..”,即调用了destory()

最新文章

  1. [SDK2.2]Windows Azure Cloud Service (35) 使用VS2013发布Azure Cloud Service
  2. hdu2222 Keywords Search ac自动机
  3. Android学习系列(36)--App调试内存泄露之Context篇(上)
  4. BZOJ4033 [HAOI2015]T1
  5. [Unity菜鸟] Time
  6. DataTable经典报错{列/行已属于其他表}
  7. abap四舍五入的函数
  8. 原声JS瀑布流加延迟载入
  9. Javascript和BHO的相互调用简介
  10. js基础面试篇
  11. appium运行报错java.net.SocketException: socket write error
  12. SOCKS5 协议解析
  13. android studio 的基本使用和建立一个小项目
  14. Codeforces 1025 D - Recovering BST
  15. python-flask-配置文件的源码分析
  16. 配置B类内网 和 配置A类内网
  17. 关于微信小程序更新内容后手机上不能及时显示的办法
  18. jq 获取当前屏幕高度
  19. 使用java发送QQ邮件
  20. 获取多达 16GB 的 Dropbox 免费空间!

热门文章

  1. Intellij热部署插件JRebel
  2. 【CF1029B】Creating the Contest(贪心)
  3. H5 &lt;audio&gt; 音频标签自定义样式修改以及添加播放控制事件
  4. iOS 判断来电状态CTCallCenter代码块不执行问题的解决
  5. python日期时间相关
  6. 浅谈前端性能优化(PC版)
  7. Android自定义Dialog多选对话框(Dialog+Listview+CheckBox)
  8. cocoapods集成三方库遇到的坑
  9. TP5 多条件whereOr查询
  10. Codeforces 323C Two permutations