Servlet技术

创建Servler

  • 继承HttpServler对象
  • 重写doPost()或者doGet()方法

部署Servlet

  • 编译Servlet到/WEB-INF/classes目录中
  • 编辑部署描述文件web.xml
 <servlet>
        <servlet-name>servletTest</servlet-name>
        <servlet-class>servlet.ServletTest</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>servletTest</servlet-name>
        <url-pattern>/servletTest.html</url-pattern>
    </servlet-mapping>	
  • 常见错误1:url-pattern中的配置路径没有以斜杠开头

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vzGzZG5c-1637739628007)(C:\Users\24386\AppData\Roaming\Typora\typora-user-images\image-20211121150616483.png)]

  • 常见错误2:servlet-name配置的值不存在

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ZxmpsIJ-1637739628009)(C:\Users\24386\AppData\Roaming\Typora\typora-user-images\image-20211121150752863.png)]

  • 常见错误3:servlet-class标签的全类名错误

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFE5A3tH-1637739628010)(C:\Users\24386\AppData\Roaming\Typora\typora-user-images\image-20211121150919345.png)]

Servlet-url定位到Servlet程序访问流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTMQSa0h-1637739628011)(C:\Users\24386\AppData\Roaming\Typora\typora-user-images\image-20211121152122691.png)]

Servlet的生命周期

  1. 执行Servlet构造方法
  2. 执行init初始化方法
    第一,二步 是第一次访问的时候创建Servlet程序会调用
  3. 执行service方法
    每次调用都会访问
  4. 执行destroy销毁方法
    停止的时候才会执行

get 和post请求的分发处理

public class HelloServlet implements Servlet {
 @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        ystem.out.println("3.service方法");
        //类型转换(因为HttpServletRequest对象有getMethod()方法)
        HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;
        //获得请求的方式
        String method=httpServletRequest.getMethod();
        if ("GET".equals(method))
            System.out.println("执行get请求");
        else
            System.out.println("执行post请求");
        System.out.println(method);
    }
}

Servlet继承体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sHIDjcQ7-1637739628012)(C:\Users\24386\AppData\Roaming\Typora\typora-user-images\image-20211122072445831.png)]

通过继承HttpServlet实现Servlet程序

一般使用继承HttpServlet类的方式实现Servlet程序

  1. 缩写一个类去继承HttpServlet类
  2. 根据业务重写doGet或者doPost方法
  3. 到web.xml中的配置Servlet程序的访问地址

Httpservlet类实现

package servlet;

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

public class HelloSrevlet2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloSrevlet2 的doPost请求");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloSrevlet2 的doGet请求");
    }
}

Srevlet API

Servlet接口
方法名称功能描述
void init(ServletConfig)由Servlet容器所调用,用于在处理客户请求前完成Servlet对象的初始化工作
void service(ServletRequest req,ServletResonse res)由Servlet容器所调用,用于处理客户端的请求
void destroy()由Srevlet容器所调用,用于释放Servlet对象所使用的资源
ServletConfig getServletConfig()返回传递给init()方法的ServletConfig对象,该对象包含此Servlet的初始化的启动参数
String getServletInfo()返回有关Servlet的信息,如作者,版本和版权。返回字符串是纯文本,而不是任何类的标记语言
GenericServlet 抽象类
方法名称功能描述
public void init(ServletConfig config)是对Servlet接口中的init(ServletConfig)a方法的实现,将ServletConfig实例保存已备用
public void init()用于在子类中重写,以实现用户指定的初始化工作
public String getInitParamete(String name)通过调用ServletConfig接口的getInitParameter(String name)方法获取设置的初始化参数值,是为简化从ServletConfig对象中获取初始化参数而定义的方法
public ServletConfig getServletContext()通过调用ServletConfig接口的getServletContext()方法返回,ServletContext对象的引用,是为简化从ServletConfig对象中获得ServletContext对象而定义的方法

ServletConfig类(servlet程序的配置信息类)

Servlet程序和ServletConfig对象都是由Tomcat负责创建的,我们只负责使用,Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象

作用:
  1. 可以获取Servlet程序的别名Servlet-name的值
  2. 获取初始化参数init-param
  3. 获取ServletContext对象

web.xml的配置

<servlet>
        <!--servlet-name 标签给Servlet程序起别名(一般是类名) -->
        <servlet-name>HelloServlet</servlet-name>
        <!-- servlet-class 是servlet程序的全类名-->
        <servlet-class>servlet.HelloServlet</servlet-class>

        <!--init-param初始化参数-->
        <init-param>
            <!--参数名-->
            <param-name>username</param-name>
            <!--参数值-->
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <!--参数名-->
            <param-name>url</param-name>
            <!--参数值-->
            <param-value>jdbc:mysql://localhost:3306/1</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <!--servlet-name 标签的作用是告诉服务器,当前配置的地址给那个servlet程序使用 -->
        <servlet-name>HelloServlet</servlet-name>
        <!-- url-pattern 标签配置访问地址
            /表示服务器解析的时候,表示地址为http://ip:port/工程路径       <br/>
            /hello      表示地址为http://ip:port/工程路径/hello
        -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

Java类中

public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.init初始化方法");

        //1. 可以获取Servlet程序的别名Servlet-name的值
        System.out.println("HelloServlet程序的别名是:"+servletConfig.getServletName());
        //  2. 获取初始化参数init-param
        System.out.println("初始化参数username的值是:"+servletConfig.getInitParameter("username"));
        System.out.println("初始化参数url的值是:"+servletConfig.getInitParameter("url"));
      //  3. 获取ServletContext对象
        System.out.println(servletConfig.getServletContext());
    }

注意点:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ki9PWe4D-1637739628013)(C:\Users\24386\AppData\Roaming\Typora\typora-user-images\image-20211122080202003.png)]

ServletContextt类

  1. ServletContext是一个接口,他表示Servlet上下文对象
  2. 一个web工程,只有一个ServletContext对象实例
  3. ServletContext对象是一个域对象

域对象:是一种像Map一样存取数据的对象,叫域对象

ServletContextt类的四个作用域
  1. 获取web.xml中的配置上下文参数context-param
  2. 获取当前的工程路径,格式:/工程路径
  3. 获取工程部署后在服务器硬盘上的绝对路径
  4. 像Map一样存取数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值