JavaWeb:Servlet学习笔记

Servlet

JavaWeb

概念

Java Web应用由一组Servlet、HTML页面、类、以及其它可以被绑定的资源构成。他可以在各种供应商提供的实现Servlet规范的Servlet容器中运行。

包含内容

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

Servlet与Servlet容器

Servlet

简介

Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。

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

功能

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

生命周期相关的方法

以下方法都是由 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浏览器–>Web服务器–>静态页面
  • Web浏览器–>Web服务器–>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>

运行测试

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 03:13:36

JavaWeb:Servlet学习笔记的相关文章

JavaWeb 后端 &lt;二&gt; 之 Servlet 学习笔记

JavaWeb 后端 <二> 之 Servlet 学习笔记 一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException ServletRequest req:代表着请

测试servlet学习笔记

操作方法: 1.新建工程: File-->new-->Java Project-->TestServlet(工程名称)-->Finish. 2.加载servlet-api.jar类包: TestServlet(右键)-->Build Path-->Configure Build Path-->Library -->Add External JAR Selection-->(浏览在tomcat的lib目录下找到servlet-api.jar选中后点击打开

SERVLET 学习笔记

SERVLET 学习笔记 一.Servlet基本定义 Servlet是服务器端上面运行的一段小的java程序,一个servlet就是一个简答的java类.通常servlet都是通过请求和返回的模式来被访问的,客户端通过resuest请求,servlet则通过response来返回需要的内容. 二.Tomcat容器等级 Tomcat容器等级分为四个等级,由内向外分别是:context容器àSERVLET容器àHOST(主机)容器àENGINE(引擎)容器.其中,CONTEXT容器,一个CONTEX

Servlet学习笔记(八)—— 自定义过滤器的编写改进:自定义实现FilterChain

笔记六中实现了三种过滤器:字符编码过滤.登录权限过滤.敏感词过滤,但是有个缺陷就是,限定了过滤顺序,而不能实现先进行request过滤,最后response过滤,并且中间几项过滤的顺序不能动态改变.所以这里做个改进,实现一个过滤顺序的FilterChain. 多个Filter的执行顺序在这篇博文中得到很仔细的讲解,总结一点,多个过滤器的执行顺序是根据web.xml中不同<filter-mapping>的顺序来先后执行的,比如: <?xml version="1.0"

Servlet学习笔记(七)—— JSP概述

1.Servlet两个缺陷: ①所有HTML标签必须包在Java字符串中,使得发送HTTP响应十分繁琐: ②所有文本和HTML标签都必须进行硬编码,即使对表示层做极其微小的修改,也需要重新编译. 2.注释: (1)JSP备注:<% %>,不会发送到浏览器,不能嵌套 (2)HTML备注:<!-- -->,不被容器处理,直接发送到浏览器,用途之一是标识JSP页面.在处理带有许多JSP片段的应用程序时,开发者通过查看HTML源代码,可以轻松查出某个HTML代码部分生成了那个JSP页面.

Servlet学习笔记(六)—— 自定义过滤器的编写

Boss今天让我写一个类似BBS留言板的过滤器,要求对字符编码.登录权限.敏感词进行过滤操作. 总体分两模块: 一.过滤器 //Filter.java package lewa; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public interface Filter { public void init(); public void doFilter(ServletRequest reu

基于CentOS7上的搭建javaweb环境 - 学习笔记

一, 概述 上一篇记录了安装CentOS7的基本步骤及配置,现在要讲如何搭建基于CentOS7环境的javaweb环境了,我以 mysql + jdk1.8.0_91 + apache tomcat7.0.69 为例进行讲述. 二, 安装步骤 1, 首先在CentOS7下在线安装mysql数据库服务 (1)先查看是否已安装了mysql rpm -qa | grep mysql (2)若安装了,可以卸载,再重新安装 yum -y remove mysqlxxxxx (3)安装 yum -y ins

CentOS7的安装及部署javaweb项目 - 学习笔记

一, 概述: 这两天在捣鼓linux的东西,安装及配置网络环境,共享设置,以及安装jdk , tomcat环境,并将自己开发的javaweb系统部署到上述环境中.经过周末熬到深夜,终于搞掂,现在整理一下笔记,分享出来,以后也可以回顾. 二, 安装CentOS7: 我这里是基于VirtualBox的安装,安装的是无桌面版本CentOS 1, 下载virtualbox并安装 此处省略100字.... 2, 下载CentOS最小安装版本 官网: https://www.centos.org/downl

基于Tomcat的Servlet学习笔记

看的<深入分析Java技术内幕> -------------Servlet------------- 1.大体介绍:JavaWeb如何基于Servlet工作,Servlet容器工作原理(Tomcat为例),Web工程在Servlet容器中如何启动,Servlet容器如何解析web.xml定义的Servlet,用户请求如何分配给指定的Servlet,Servlet容器如何管理Servlet生命周期.2.Servlet与Servlet容器的关系:类似枪和子弹.为了解耦,通过标准化接口相互协作.3.