首页 > 其他分享 >E011Web学习笔记-Servlet

E011Web学习笔记-Servlet

时间:2023-02-22 15:33:17浏览次数:47  
标签:Servlet 笔记 javax E011Web Override import servlet public

一、Servlet入门

1、概述

概念:

运行在服务器上的小程序;

实际上Servlet是一个接口,定义了Java类被浏览器访问到(或者说被Tomcat识别的)规则;

使用:

自定义一个类实现Servlet接口,复写其中方法;

 

2、快速入门

步骤:

第一步:创建一个JavaEE项目;

在学习Tomca的时候创建了web项目;

第二步:定义一个类,实现Servlet接口;

public class MyServlet implements Servlet{
    //...
}

第三步:实现接口中的抽象方法;

可根据IDEA的提示实现;
例如:
package com.zibo.servlet;

import javax.servlet.*;
import java.io.IOException;

public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    //提供服务的方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello Servlet!");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

第四步:配置Servlet

-- 在web.xml中配置:
<!--配置Servlet-->
    <servlet>
        <servlet-name>my</servlet-name>
        <servlet-class>com.zibo.servlet.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>my</servlet-name>
        <url-pattern>/my</url-pattern>
    </servlet-mapping>

访问http://localhost:8080/web_war_exploded/my的结果是:

E011Web学习笔记-Servlet_System

 

3、执行原理

第一步:当服务器接收到浏览器客户端发出的请求后,会解析请求的URL路径,获取访问的Servlet的资源路径;

第二步:查找web.xml文件,是否存在对应的<url-pattern>标签体内容;

第三步:如果有则查找到对应的<servlet-class>全类名;.

第四步:Tomcat会将字节码文件加载到内存,并创建其对象;

第五步:调用对象的方法;

 

二、Servlet生命周期方法

1、被创建

执行init方法,执行一次;

一般用于加载资源;

Servlet被创建的时间:

Servlet被创建的时间:
默认情况下,第一次被访问时,Servlet被创建;

可以指定Servlet被创建的时间;
指定Servlet被创建的时间:
<!--配置Servlet-->
    <servlet>
        <servlet-name>my</servlet-name>
        <servlet-class>com.zibo.servlet.MyServlet</servlet-class>
        <!--指定servlet被创建时间
        值为负整数(默认):第一次访问时创建;
        值为正整数:在服务器启动时创建;
        -->
        <load-on-startup>1</load-on-startup>
    </servlet>

Servlet是单例的

问题:
Servlet只执行一次,说明只有一个Servlet对象,Servlet是单例的,当多个用户同时访问时,可能存在安全问题;

解决:
尽量不要在Servlet中定义成员变量。即使定义了成员变量也不要对其值进行修改操作;

 

2、提供服务

执行service方法,执行多次;

每次访问Servlet时,service方法都会被调用一次;

 

3、被销毁

执行destroy方法,执行一次;

Servlet被销毁之前(服务器正常关闭时)执行,但是服务器若没有正常关闭,destroy方法是不会执行的;

一般用于释放资源;

 

4、方法介绍:

package com.zibo.servlet;

import javax.servlet.*;
import java.io.IOException;

public class MyServlet implements Servlet {
    //初始化方法-在Servlet被创建时执行,只会执行一次;
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }
    //(了解)获取ServletConfig对象——Servlet的配置对象
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    //提供服务的方法,每次Servlet被访问时执行,会执行多次
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello Servlet!");
    }
    //(了解)获取Servlet的一些信息:版本、作者...
    @Override
    public String getServletInfo() {
        return null;
    }
    //销毁方法,在Servlet被杀死时(之前)(服务器被正常关闭时)执行,只执行一次
    @Override
    public void destroy() {
        System.out.println("destroy...");
    }
}

 

三、Servlet3.0注解配置

1、好处

支持注解配置,可以不需要web.xml了;

 

2、步骤

第一步:创建JavaEE项目,选择Servlet3.0以上的版本,可以不勾选 web.xml;

第二步:定义一个类,实现Servlet接口,并复写其方法;

第三步:在类上使用@WebServlet注解进行配置;

注解如:只需要配置虚拟目录(资源路径)名字
@WebServlet(urlPatterns = "/my3")
或者
@WebServlet("/my3")

 

四、IDEA与Tomcat的相关配置

1、IDEA会为每一个Tomcat部署的项目单独建立一份配置文件;

查看控制台的log:Using CATALINA_BASE:   "C:\Users\Administrator\.IntelliJIdea2019.2\system\tomcat\Tomcat_9_0_24_web_servlet3"

 

2、工作空间项目和Tomcat部署的项目,不是同一个,但后者会自动同步前者的所有内容(资源);

WEB-INF目录下的资源不能被浏览器直接访问;

断点调试:使用“小虫子”启动——debug启动;

 

五、Servlet的体系结构

1、Servlet接口的实现类

GenericServlet -- 抽象类,Servlet的实现类;

HttpServlet -- 抽象类,GenericServlet的子类;

 

2、GenericServlet

可以通过继承GenericServlet来实现自定义的Servlet类;

继承GenericServlet只需要复写server方法即可,如下:

package com.zibo.servlet;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/my")
public class MyServlet extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("成功通过继承GenericServlet实现……");
    }
}

但是,实际开发中并不用这种方式!

 

3、HttpServlet

是对http协议的封装,可以简化操作;

使用步骤:

第一步:自定义Servlet类继承HttpServlet;

第二步:复写doGet/doPost方法;

代码示例:

package com.zibo.servlet;

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

@WebServlet("/my")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
        System.out.println("doGet……");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
        System.out.println("doPost……");
    }
}

 

4、Servlet相关配置

①urlpartten:Servlet访问路径:

单个访问路径示例:@WebServlet("/my")

多个访问路径示例:@WebServlet({"/my","/my1","/my2"})

②路径定义规则

三种方式:
1、/xxx
2、/xxx/xxx
/*,*表示随意写都可以访问,如/1、/sfd、/423fsf;
/*的优先级最低;
3、*.do
*.do表示随意写都可以访问,任意字符加上.do,而且do也不是固定的,可以.其他;

 

六、知识补充

1、将请求从一个servlet转发到另一个资源(servlet,jsp或HTML文件)

示例:
req.getRequestDispatcher("/index.jsp").forward(req,resp);

 

 

 

 

 

 

标签:Servlet,笔记,javax,E011Web,Override,import,servlet,public
From: https://blog.51cto.com/u_13272819/6079070

相关文章

  • E012Web学习笔记-HTTP请求协议
    第一次复习时间:2022年3月27日11点05分一、概述1、概念HyperTextTransferProtocol超文本传输协议;2、传输协议定义了客户端和服务器端发送数据的格式;3、特......
  • E005Web学习笔记-JavaScript(三):BOM
    一、简单学习DOM1、控制(增删改查)HTML文档的内容; 2、代码:获取页面的标签(元素)对象Element;document.getElementById();//通过元素的ID获取元素......
  • E006Web学习笔记-JavaScript(四):DOM
    一、概述1、简介DocumentObjectModel文档对象模型;将标记语言文档的各个部分,封装为对象,可以使用这些对象,对标记语言文档进行CRUD(增删改查)的动......
  • E007Web学习笔记-JavaScript(五):JS事件
    一、概述1、事件概念某些组件被执行了某些操作后,触发某些代码的执行;事件:某些操作,如点击,双击,鼠标移动,键盘按下……; 2、事件源组件,如按钮、文......
  • E004Web学习笔记-JavaScript(二):JS对象
    一、Function1、概述是一个函数对象; 2、Function:函数(方法)对象①创建//1、方法1(不建议使用)varfun=newFunction(形参列表,方法体);示......
  • 读书笔记:价值投资.十二.公司的定性分析
     如果封仓十年封仓十年的思路是给企业定性,确定这是一家好公司."时间是优秀企业的朋友,平庸企业的敌人.你可能认为这个结论平淡无奇,但我是通过深刻的教训才......
  • uni-app学习笔记之----目录认识
    新建了一个项目之后,先简单认识目录结构1、pages 存放项目的所有页面2、static 存放静态资源3、unpackage 存放项目打包之后生成的文件4、App.vue  项目的根组......
  • 2023-2-22随笔记录
    最近很浮躁,总是一会儿想学会儿这个一会儿学会那个,输入倒是不少,但最后记住的却没有多少,有些技术知识点学完可能隔几天就记不清或者想用的时候却想不起来怎么去操作了,在这边......
  • 回溯笔记
    回溯笔记包括本人学习数据结构期间的所有的回溯题目回溯结构比较统一,建议抽时间集中突破题目清单(简单题的意思是允许暴力搜索,往往有进阶解)......
  • Pytest学习笔记
    参考链接1、pytest执行用例规则目录下执行所有的用例pytest//orpy.test执行单独一个pytest模块pytestfileName.py运行某个模块里面的某个类pytestfile......