Servlet入门 (一)

作者:叁念


一、创建第一个JAVAEE项目

1.修改相关的编码格式(如下图)

window -> Preference -> 搜索框输入 encoding -> 设置 encoding 均为UTF-8 ->Update

2.关闭相关校验(主要是jsp会报错)

window -> Preference ->Validation-> Suspend all Validation 打上勾 ->Apply

3.工作空间中添加server服务器(前提已经正确安装了Tomcat)

window -> Show View -> Other…-> Server -> open

Server 面板-> 右键 new -> Server -> Apache -> Tomcat v7.0 Server -> next -> Browse… -> 选择你以及安装好的的Tomcat v7.0 Server安装目录 -> finish (完成后如图所示,配置以下两处,即项目发布路径)

4.创建工程

File -> other -> Web -> Dynamic Web Project -> Finish

Project name 输入项目名如: SN1_Servlet ,下图是该项目结构的简单解释

绘制结构图如图所示:

如果你使用tomcat运行之后,在对应的wtpwebapps部署目录下可以查看到相关项目如下:

SN1_Servlet
        -- META-INF
                -- MANIFEST.MF
        -- WEB-INF
                -- classes
                -- lib
                web.xml
            index.jsp (注:WebContent目录下存放的jsp)

二、Servlet使用

2.1 Servlet简介

  • Servlet是sun公司提供的一门用于开发动态web资源的技术。
  • 收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录
  • servlet 是运行在 Web 服务器中的小型 Java 程序。
  • servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
  • 通常我们也把实现了servlet接口的java程序,称之为Servlet

2.2 如何编写Servlet?

1.HttpServlet简介

我所了解的一般有三种方法,其中第三种最常用,也是本文要讲的方法:

  • 实现Servlet接口
  • 继承GenericServlet类(无协议)
  • 继承HttpServlet类(重点使用)

如下图是HttpServlet类的结构:

Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。

  • HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
  • HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去重写service方法。

2.编写servlet的步骤

1.编写一个类,该类继承HttpServlet,重写service方法(另外还可直接借助Eclipse创建和编写Servlet,后文会提到)

public class SN_01_servlet extends HttpServlet {
//这里为了演示就重写service方法
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
        System.out.println("http servlet");
    }
}

2.编写web.xml配置文件,把servlet程序映射到一个URL地址上(如果你找不到web.xml,请右键项目,选择Java EE Tools >Generate Deployment Descriptor Stub,再去查看就自动生成了)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <display-name>SN1_Servlet</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <!-- 以上代码为自动生成 -->
    <!-- 
    Servlet访问URL映射配置 
    1.把servlet程序映射到一个URL地址上,实现方式是在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。
    2.<servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。
    3.一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径

    -->
    <servlet>
        <servlet-name>servletDemo</servlet-name>
        <servlet-class>com.sn.SN_01_servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servletDemo</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

3.测试:访问路径:localhost:8080/项目名/url-pattern
即:http://localhost:8080/SN1_Servlet/hello
在控制台Console中会执行对应的代码,如下:

3.利用eclipse编写servlet的步骤

src右键-> Other…-> Web-> Servlet->填写如下

next -> next ->选择如下信息(这里就直接重写doGet与doPost方法,上文有提到原因)

Finish ->删除相关注释后如下

package com.sn;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//有该注解就不需要配置web.xml里的url了
@WebServlet("/SN_02_servlet")
public class SN_02_servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public SN_02_servlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.getWriter().append("Served at: ").append(request.getContextPath());
        System.out.println("Hello");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

测试:访问路径:localhost:8080/项目名/url-pattern
即:http://localhost:8080/SN1_Servlet/SN_02_servlet


二、Servlet 相关知识

2.1 Servlet中的关于生命周期的一些API

  • init 方法 :何时执行?———— Servlet对象创建的时候调用
  • service 方法: 何时执行?———— 每次访问的时候调用
  • destroy 方法: 何时执行?———— servlet对象销毁的时候调用

    Servlet的生命周期

  • 何时创建? ———— 默认第一次访问Servlet时创建
  • 何时销毁?———— 默认服务器关闭的时候销毁
  • 每次访问必然会调用的方法?———— service 方法

2.2 Servlet配置文件Web.xml

1.基本配置

url-pattern的配置方式

1)完全匹配 :访问的资源与配置的资源完全相同才能访问到

    <servlet-mapping>
        <servlet-name>servletDemo</servlet-name>
        <url-pattern>/name</url-pattern>
    </servlet-mapping>
    //访问方式:localhost:8080/项目名/name

2)目录匹配(实际该目录不存在): /虚拟的目录/…/*

    <url-pattern>/a/b/c/*</url-pattern>
    //访问方式:localhost:8080/项目名/a/b/c
    //或者localhost:8080/项目名/a/b/c/任意目录或文件

3)拓展名匹配: *.拓展名

    <url-pattern>*.sn</url-pattern>
    //访问方式:localhost:8080/项目名/name.sn
    //访问方式:localhost:8080/项目名/任意目录/name.sn

注意:2和3不能混用,如 /a/b/c/*.abc

2. 服务器启动时实例化Servlet配置

标记容器是否在启动的时候就加载这个servlet,可以重写init方法进行测试。
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
正数的值越小,启动该servlet的优先级越高

 /** 
  在Servlet配置时配置
  <load-on-startup>1</load-on-startup  >
 */

    <servlet>
        <servlet-name>servletDemo</servlet-name>
        <servlet-class>com.sn.SN_01_servlet</servlet-class>
         <load-on-startup>1</load-on-startup>
    </servlet>

3. 缺省Servlet

可以将url-pattern配置成 / ,代表该Servlet是一个缺省Servlet当访问的地址 所有的Servlet都不匹配时,就访问缺省Servlet

<url-pattern>/</url-pattern>

4. 指定欢迎页面,如:访问方式:localhost:8080/项目名/

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

三、Servlet的运行过程

Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:

  • ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
  • ②装载并创建该Servlet的一个实例对象。
  • ③调用Servlet实例对象的init()方法。
  • ④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
  • ⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

源码:链接: https://pan.baidu.com/s/1__9SE2fe9TeN6rE21BrxVg 密码: xtew

阅读更多

扫码向博主提问

叁念

非学,无以致疑;非问,无以广识
去开通我的Chat快问
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36868342/article/details/80333815
个人分类: Servlet
上一篇Maven学习
下一篇Servlet之ServletConfig与ServletContext的相关使用(二)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭