Java Web之Servlet基础

↘锁芯ラ 提交于 2019-12-14 05:50:32

** 一、Servlet概述**

1、什么是Servlet
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:
(1)性能明显更好。
(2) Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
(3)Servlet 是独立于平台的,因为它们是用 Java 编写的。
(4)服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
(5)Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
2、Servlet有什么用
(1)读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
(2)读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
(3)处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
(4)发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
(5)发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。
3、Servlet生命周期
(1)客户端请求该 Servlet;
(2)加载 Servlet 类到内存;
(3) 实例化并调用init()方法初始化该 Servlet;
(4)service()(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。
(5)加载和实例化 Servlet。这项操作一般是动态执行的。然而,Server 通常会提供一个管理的选项,用于在 Server 启动时强制装载和初始化特定的 Servlet。

** 二、Servlet案例**

1、创建Web项目HelloServletWorld
在这里插入图片描述2、在web目录里创建首页文件index.html

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Servlet基础</title>
</head>
<body>
使用Servlet,您可以手机来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
</body>
</html>

3、在src目录里创建net.cw.servlet包,在里面创建HelloServletWorld类
(1)创建net.cw.servlet包
(2)基于Servlet模板创建HelloServletWorld类
在这里插入图片描述在这里插入图片描述(3)配置@WebServlet注解符
在这里插入图片描述上述注解符@WebServlet的配置,相当于在web.xml里做了如下配置:
在这里插入图片描述(4)添加init()方法,并编写测试代码
在这里插入图片描述(5)添加destroy(),并编写测试代码
在这里插入图片描述(6)编写doGet()和doPost()方法代码
在这里插入图片描述效果展示:
在这里插入图片描述

package net.cw.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet(name = "HelloServletWorld",
            value = "/hello",
            initParams = {
                @WebInitParam(name = "username",value = "howard2005")
            },
            loadOnStartup = 1)
public class HelloServletWorld extends HttpServlet {
    @Override
    public void init() throws ServletException{
        super.init();
        System.out.println("初始化Servlet");
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //设置响应对象字符编码格式
        response.setCharacterEncoding("utf-8");
        //获取初始化参数值
        String username = getInitParameter("username");
        //获取打印输出流
        PrintWriter out = response.getWriter();
        //创建简单日期格式对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
        //向客户端输出信息
        out.print("<html>" +
                        "<head>" +
                        "<meta charset='UTF-8'>" +
                            "<title>亲切的问候</title>" +
                        "</head>" +
                        "<body>" +
                            "<h3>亲爱的 " + username + "用户,欢迎访问Servlet世界~</h3>" +
                            "<h3>当前时间:" + sdf.format(new Date()) + "</h3>" +
                        "</body>" +
                "</html>"
        );
    }

    @Override
    public void destroy(){
        super.destroy();
        System.out.println("销毁Servlet");
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!