Servlet基础笔记

Servlet基础笔记

主要是怕哪天电脑挂了 这些笔记翻不到了 所以在这个网站上挂着 是为了自己留着 不需要评论 不需要转发
概念
Servlet就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议. Servlet就是SUN公司提供的一个动态网页开发技术.

当客户端请求静态资源时,Web服务器会自己处理并返回,当客户端请求动态资源时,Web服务器会把请求转交给扩展程序来处理,并将扩展程序的处理结果返回给客户端。

Servlet的作用
用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
src目录是放置代码的地方 在项目发布到服务器以后就不存在了
Tomcat是一个web容器 它可以放很多Servlet

快速入门:
1 创建JavaEE项目
2 定义一个类,实现Servlet接口
3 实现接口中的抽象方法
4 配置Servlet (WEB-INF–>web.xml)

快速入门:
1. 创建JavaEE项目
2. 定义一个类,实现Servlet接口
public class ServletDemo1 implements Servlet
3. 实现接口中的抽象方法
4. 配置Servlet

	 在web.xml中配置:
    <!--配置Servlet -->
    <servlet>
        <!-- Servlet的名称 -->
        <servlet-name>demo1</servlet-name>
        <!-- SErvlet的全路径 -->
        <servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
    </servlet>
<!-- Servlet的映射 -->
    <servlet-mapping>
        <!-- Servlet的名称 -->
        <servlet-name>demo1</servlet-name>
        <!-- Servlet的访问路径 -->
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>

执行原理
当用户发送了一个请求到Tomcat服务器
如果这个请求是静态资源就根据请求路径去找对应的资源文件
如果找到就返回 如果找不到就返回404
如果这个请求是一个动态资源(Servlet)
从内存中找到url-pattern对应的路径
如果没有就返回404
如果有根据 解析对应的
解析完再去解析servlet标签下面的
解析到之后使用反射创建Servlet对象
再然后调用Servlet的service()方法

Servlet的生命周期:Servlet从创建到销毁的过程.

1 被创建:执行init方法 只执行一次。
2 提供服务: 执行Service方法 执行多次
3 被销毁: 执行destroy方法 只执行一次

  1. Servlet在默认情况下第一次访问就会被创建。如果想修改 可以通过修改配置文件来选择Servlet的创建时机。在web.xml下执行下面代码
在Servlet标签下配置以下内容:
		<!--指定Servlet创建时机-->
        <!--第一次被访问时创建 写-1就行(负数)-->
        <load-on-startup>-1</load-on-startup>
        <!--在服务器启动时呗创建 写0就行(正数)-->
        <load-on-startup>1</load-on-startup>

Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象(Servlet是单例的)所以多个用户同时访问时,可能存在线程安全问题。
解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值

  1. 提供服务:执行service方法,执行多次
    每次访问Servlet时,Service方法都会被调用一次。

  2. 被销毁:执行destroy方法,只执行一次
    Servlet被销毁时执行。服务器关闭时,Servlet被销毁
    只有服务器正常关闭时,才会执行destroy方法。
    (可以理解为交代遗言,先交代再被销毁)
    destroy方法在Servlet被销毁之前执行,一般用于释放资源

package com.itheima.web.servlet;
import javax.servlet.*;
import java.io.IOException;

public class ServletDemo1 implements Servlet {
    /**
     * 初始化方法  重要方法
     * 在Servlet被创建的时候执行,只会执行一次
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    }
    
    /**
     * 获取ServletConfig对象的
     * ServletConfig是Servlet的配置对象
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    
    /**
     *提供服务的方法  重要方法
     * 每一次Servlet被访问都会执行,执行多次
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    /**
     * 获取Servlet的信息 比如版本、作者 我们一般不会用这个方法
     */
    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 销毁方法  重要方法
     * 在服务器被正常关闭时执行,只执行一次
     */
    @Override
    public void destroy() {
    }
}

Servlet3.0:

  • Servlet3.0 注解配置
    @webservlet("/demo")
  • 好处:
    • 支持注解配置。可以不需要web.xml了。
  • 步骤:
    1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
    2. 定义一个类,实现Servlet接口
    3. 复写方法
    4. 在类上使用@WebServlet注解,进行配置
    • @WebServlet(“servlet的资源路径”)
@WebServlet("/demo2")
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet 执行");
    }

IDEA与tomcat的相关配置

1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件
	* 查看控制台的log:Using CATALINA_BASE:   		       "C:\Users\fqy\.IntelliJIdea2018.1\system\tomcat\_itcast"

2. 工作空间项目    和     tomcat部署的web项目
	* tomcat真正访问的是“tomcat部署的web项目”,"tomcat部署的web项目"对应着"工作空间项目" 的web目录下的所有资源
	* WEB-INF目录下的资源不能被浏览器直接访问。
3. 断点调试:使用"小虫子"启动 dubug 启动

Servlet的体系结构

Servlet – 接口(方法比较多 不推荐)
|
GenericServlet – 抽象类()
|
HttpServlet – 抽象类

GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象,将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

HttpServlet:对http协议的一种封装,简化操作

不管是哪一种方式实现的Servlet 如果有请求必然执行service()方法
如果是继承自HttpServlet 重写doGet() doPost()

Servlet相关配置(urlpartten:Servlet访问路径)

  1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})

  2. 路径定义规则:

    1. /xxx:完全路径匹配(最常用) ("/demo1" “/user/demo1”) http://localhost:8080/day14/demo1
    2. /xxx/*: 目录匹配 /目录/*代表着通配符,所以也就是说在/目录后 输入什么都能进去
    3. *.do:扩展名匹配
  3. 优先级
    完全路径匹配 > 目录匹配 > 扩展名匹配
    /user/demo1
    /user/*
    *.do (千万别写成/*.do)
    http://localhost:8080/day14/user/demo1
    错误的写法 :/*.do

*这种东西的优先级很低 只有其他都找不到了才会用这种东西

猜你喜欢

转载自blog.csdn.net/weixin_43544112/article/details/86589331
今日推荐