Servlet的基本使用与生命周期

一、Servlet实现 打印到浏览器 例子

1.1 Servlet的概述:

  1. 创建一个HelloServlet类,继承于HttpServlet
  2. 重写doGet方法,并且向浏览器输出一些文本(例如:HelloWorld)
  3. 配置web/WEB-INF/web.xml文件
    1.2 Servlet与普通的Java程序的区别
  4. 普通的Java程序由main函数调用,而Servlet由Web容器,Tomcat来调用。
  5. Servlet是运行在Web容器中
    
  6. 对浏览器发送过来的请求做出响应
    创建好web结构如下图
    在这里插入图片描述
    ****1.编写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_3_1.xsd"
         version="3.1">
      <!--配置servlet-->
   <servlet>
   <!--servlet的名字-->
       <servlet-name>lizi1</servlet-name>
   <!--serlvet的类全名-->   <servletclass>com.dahaizi.servlet.Demo01</servlet-class>
   </servlet>
   <!--配置访问地址-->
    <servlet-mapping>
    <!--这个名字与上面的名字相同-->
        <servlet-name>lizi1</servlet-name>
         <!--访问地址,必须以/开头-->
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
</web-app>

2.编写Demo1文件

package com.dahaizi.servlet;



import javax.servlet.ServletException;
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.sql.Timestamp;

 //创建1个Servlet,继承于HttpServlet抽象类,它已经实现了Servlet接口
public class Demo01 extends HttpServlet{
    @Override
//重写doGet或doPost
//request一个请求对象, response是一个响应对象。这两个对象由tomcat创建
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置内容的类型和编码,告诉浏览器这是一个网页,编码是utf-8
        resp.setContentType("text/html;charset=utf-8");
        //得到打印流,将数据输出给浏览器
        PrintWriter out = resp.getWriter();
        //把网页打印给浏览器  打印的时间 new Timestamp(System.currentTimeMillis())
        out.print("<h2>大家好才是真的好"+new Timestamp(System.currentTimeMillis())+"</h2>");
    }
}

浏览器显示结果
在这里插入图片描述
使用Servlet3.0新增的方法

  1. 新增了一些注解,简化的javaweb代码开发,可以省略web.xml配置文件.
  2. 支持异步处理:多线程技术.
  3. 支持可插性特性:书写的代码编译后生成的class文件可以直接部署到其他项目自动加载执行.
    使用注解@WebServlet,指定name和urlPatterns属性
@WebServlet注解属性	      说明
name = "HelloServlet"	Servlet名字,类似于<servlet-name>one</servlet-name>
urlPatterns = "/hello"	访问地址,可以指定多个地址<url-pattern>/hello</url-pattern>

注解开发servlet代码,继承于HttpServlet,重写doGet方法:

package com.dahaizi.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;
import java.io.PrintWriter;
@WebServlet (name="demo2",urlPatterns = "/demo2")
public class Demo02 extends HttpServlet {
    @Override
    //重写doGet方法
    //request一个请求对象, response是一个响应对象。这两个对象由tomcat创建
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     //设置内容的类型和编码,告诉浏览器这是一个网页,编码是utf-8
        resp.setContentType("text/html; charset=utf-8");
      //得到打印流,将数据输出给浏览器
        PrintWriter out = resp.getWriter();
        out.print("<h2 style='color:blue'>老鼠爱大米</h2>");
    }
}

浏览器显示结果
在这里插入图片描述
Servlet生命周期

方法                     	                作用	               运行次数
构造方法	                              在对象实例化的时候执行	       1次
void init(ServletConfig config)	        在初始化的时候执行	       1次
void service(ServletRequest req,
 ServletResponse res)                   每次请求都会执行             n次
void destroy()	                       在服务器关闭的时候            1次

package com.dahaizi.servlet;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.sql.Timestamp;

@WebServlet("/demo3")
public class Demo03 implements Servlet {

//初始化方法
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println(new Timestamp(System.currentTimeMillis())+"第一次");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
//服务方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println(new Timestamp(System.currentTimeMillis())+"第二次开始到死");

    }

    @Override
    public String getServletInfo() {
        return null;
    }
    //销毁方法
    @Override
    public void destroy() {
        System.out.println(new Timestamp(System.currentTimeMillis()) + ",死了");

    }
}

浏览器请求后显示的结果
浏览器请求
只有当有用户第一次访问时才会初始化一次
往后不会继续初始化
图中所示的第一次只运行了一遍

在这里插入图片描述
服务端显示的结果,关闭服务器就显示死了

在这里插入图片描述
GenericServlet类
默认实现了Servlet和ServletConfig这两个接口,并且有默认的实现,它的子类是HttpServlet,为了简化HttpServlet编写。如果我们写的Servlet使用的是Http协议,建议继承于HttpServlet。现在所有的浏览器都是使用http协议,所以我们以后都是继承于HttpServelt类就可以了。
案例:继承于GenericServlet实现一个Servlet

package com.dahaizi.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;
import java.io.PrintWriter;
@WebServlet("/demo4")
//继承GenericServlet类
public class Demo04  extends GenericServlet{
    @Override
    //重写service方法
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
    //设置内容的类型和编码,告诉浏览器这是一个网页,编码是utf-8
        response.setContentType("text/html;charset=utf-8");
        //拿到打印流
        PrintWriter out = response.getWriter();
        //打印到服务端
        System.out.println("请求:"+request);
        System.out.println("响应:"+response);
        //打印到浏览器
        out.print("<span>小姐姐</span> ");
    }
}

浏览器显示的结果
在这里插入图片描述
服务端显示的结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值