Servlet

4 篇文章 0 订阅

一、概述

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成 动态Web内容。这个过程为:

  1. 客户端发送请求至服务器端
  2. 服务器将请求信息发送至 Servlet
  3. Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求
  4. 服务器将响应返回给客户端

Servlet 看起来像是通常的 Java 程序。Servlet 需要导入特定的属于 Java Servlet API 的包。

Servlet有三种实现方式:实现Servlet接口, 继承抽象类GenericServlet, 继承HttpServlet

Servlet代表了一个服务器端,主要作用是用来和浏览器动态的交换
1.接收浏览器发来的请求
2.服务器给浏览器做出响应

二、准备工作

1.在IDEA里面创建一个web工程

在这里插入图片描述

在这里插入图片描述

2.整理web工程目录结构

在WEB-INF文件夹中创建两个文件夹,分别为classes、lib
在这里插入图片描述

3.修改资源输出的位置

在这里插入图片描述

4.修改jar包存放位置

在这里插入图片描述

在这里插入图片描述

三、Servlet的入门案例

1.创建Servlet文件

在这里插入图片描述

2.编写Servlet代码

package cn.tedu.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;
//Servlet核心功能:接收请求+给出响应
@WebServlet("/ServletDemo01")
public class ServletDemo01 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //打印一句话---在idea里看
        System.out.println("欢迎来到Servlet的世界~");
        //给浏览器做出响应---在浏览器里看
        response.getWriter().write("hello servlet");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //你要写的代码和doPost()一样,直接调用上面方法就行
        doPost(request,response);
    }
}

3.效果

在IDEA中

在这里插入图片描述

在浏览器中

在这里插入图片描述

四、配置Servlet程序

1.用注解的方式配置Servlet类

package cn.tedu.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;
//1.这是新版本的Servlet提供的注解开发方式,更好更简单(否则自己写配置文件)
//参数是,规定了浏览器的地址栏到底怎么写才能访问到我这个Servlet类
@WebServlet("/ServletDemo02")
//2.ServletDemo02是子类,可以使用父类的所有资源(除了私有的,构造方法)
//3.Servlet规定了自定义Servlet的规则:
//方式1:extends HttpServlet--推荐!!!
//方式2:extends GenericServlet--了解
//方式3:implements Servlet--了解
public class ServletDemo02 extends HttpServlet {
    //4.继承了父类,但是 想改父类原有的功能时 就重写!!
    //@Override
    //5.不论调用doPost()或者doGet(),都是有Servlet来调用的
    //6.当用户用post方式提交请求时(form表单提交),Servlet来调用doPost()
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("您访问了doPost()");
    }

    //7.当用户用get方式提交请求时,Servlet来调用doGet()
    //(在地址栏?拼接数据+form没改method的值)
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("您访问了doGet()");
    }
}

2.用注解的方式配置Servlet类

在ServletDemo03 中
package cn.tedu.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;

//使用配置方式开发Servlet程序
public class ServletDemo03 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doPost()成功的被Servlet调用了!");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doGet()成功的被Servlet调用了!");
    }
}

在web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置Servlet类的访问信息-->
    <servlet>
    <!--给Servlet设置一个名字(一般和类名相同)
    细则:名字可以自定义,但是必须唯一,不能和别的<servlet>中的servlet-name相同-->
        <servlet-name>ServletDemo03</servlet-name>
    <!--指定Servlet类的全路径(包名.类名)-->
        <servlet-class>cn.tedu.servlet.ServletDemo03</servlet-class>
    </servlet>
	<!--指定浏览器的访问规则-->
    <servlet-mapping>
	<!--即将根据指定的名字,去找到一个要被访问的Servlet类-->
        <servlet-name>ServletDemo03</servlet-name>
	<!--指定了浏览器的访问方式
    细则:值可以自定义,但是浏览器必须是一样的写法才能访问Servlet
    否则404:找不到你要访问的资源-->
        <url-pattern>/ServletDemo03</url-pattern>
    </servlet-mapping>
</web-app>

3.总结

在这里插入图片描述

五、前后端整合

1.创建前端HTML网页

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>前后端 整起来</title>
</head>
<!-- 点击超链接跳转到Servlet -->
<a href="http://localhost:8080/javaweb_war_exploded/ServletDemo03">点我</a>

<body>

</body>

</html>

2.创建后端Servlet程序并配置

package cn.tedu.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;

//使用配置方式开发Servlet程序
public class ServletDemo03 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doPost()成功的被Servlet调用了!");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doGet()成功的被Servlet调用了!");
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置Servlet类的访问信息-->
    <servlet>
    <!--给Servlet设置一个名字(一般和类名相同)
    细则:名字可以自定义,但是必须唯一,不能和别的<servlet>中的servlet-name相同-->
        <servlet-name>ServletDemo03</servlet-name>
    <!--指定Servlet类的全路径(包名.类名)-->
        <servlet-class>cn.tedu.servlet.ServletDemo03</servlet-class>
    </servlet>
    <!--指定浏览器的访问规则-->
    <servlet-mapping>
    <!--即将根据指定的名字,去找到一个要被访问的Servlet类-->
        <servlet-name>ServletDemo03</servlet-name>
    <!--指定了浏览器的访问方式
    细则:值可以自定义,但是浏览器必须是一样的写法才能访问Servlet
    否则404:找不到你要访问的资源-->
        <url-pattern>/ServletDemo03</url-pattern>
    </servlet-mapping>
</web-app>

3.测试

在这里插入图片描述

六、Servlet的继承结构

在这里插入图片描述

七、Servlet的生命周期

1.概述

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 重要阶段遵循的过程:
1,初始化阶段 调用init()方法
2,响应客户请求阶段 调用service()方法
3,终止阶段 调用destroy()方法
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
在这里插入图片描述

2.测试

创建Servlet程序
package cn.tedu.lifecycle;

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;

//1.Servlet程序的注解开发方式,代替web.xml文件中的8行配置代码
@WebServlet("/ServletDemo04")//注解的参数是指浏览器的访问方式
public class ServletDemo04 extends HttpServlet {
    //2.Servlet的生命周期中会被调用的方法有:
    //init() service()/doGet/doPost destroy()
    //3.因为GenericServlet提供的以上方法都是空实现,
    // 重写以上方法并添加方法体来感受初始化的不同阶段
    //4.重写的要求:有足够的权限 + 方法声明必须和父类一样
    @Override
    //当第一次访问Servlet程序时,Servlet自己调用调用init(),只会调用一次
    public void init() throws ServletException {
        System.out.println("init()被调用了,Servlet已被初始化!");
    }

    @Override
    //每次访问Servlet程序时,Servlet自己调用service(),会调用多次
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet开始为您服务啦!");
    }

    @Override
    //正常的关闭服务器时,Servlet自己调用destroy(),只会调用一次
    public void destroy() {
        System.out.println("destroy()被调用了,Servlet即将被销毁");
    }


}

创建前端网页
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>前后端 整起来</title>
</head>
<body>
<!-- 点击超链接跳转到Servlet -->
<!-- 点击超链接跳转到Servlet -->
<a href="http://localhost:8080/javaweb_war_exploded/ServletDemo03">点我跳转到ServletDemo03</a>
<a href="http://localhost:8080/javaweb_war_exploded/ServletDemo04">点我跳转到ServletDemo04</a>
</body>

</html>
效果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值