美文网首页
一、Servlet概述

一、Servlet概述

作者: lifeline张 | 来源:发表于2018-07-16 15:26 被阅读0次

一、问题引入

在之前做的新闻管理系统中,jsp页面一方面显示数据,比如newsDetailVies页面;另一方面也接受请求,调用javaBean(后台的Service)去处理请求,比如doAdd界面。而JSP其实是一种负责显示的技术,那如何只专注于显示呢?相当于把接受请求、处理请求的功能模块给外包出去,外包给谁呢?就是今天要学的Servlet。把这一部分功能外包出去之后,显示与接受请求、处理请求的工作就分开了。显示JSP来做,接受请求、处理请求Servlet来做。

二、初识Servlet

image.png

2.1Servlet做了什么

Servlet本身不做任何业务处理,只是接受请求,并决定调用哪个Service去解决这个问题,然后决定用哪个界面来显示返回的数据。这会的问题是Servlet的载体是什么?

2.2Servlet是什么

Servlet是java程序,但是是运行在服务器端的java程序。(Servlet是由Server+Applet合成的。)服务器端的java程序太多了,后台src包里面的都是,但是只有当一个服务器端的程序使用了servlet API的时候,这个服务器端的程序才能称之为Servlet。

2.3Servlet小结

image.png

2.4ServletAPI

image.png

2.5Servlet创建方式

1、创建一个类,实现Servlet接口。
示例代码:

package cn.kgc.web.Servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyServlet1 implements Servlet {

    public void destroy() {
        // TODO Auto-generated method stub

    }

    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }

    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }

    public void init(ServletConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub

    }

}

2、继承GenericServlet类
示例代码:

package cn.kgc.web.Servlet;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyServlet2 extends GenericServlet {

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub

    }

}

GenericServlet类对Servlet接口中的除了service方法的其他四个方法进行了默认实现,所以继承GenericServlet类之后不需要管其他的方法了,只需要在service方法中写代码就行了。

3、在包里面new一个Servlet(最简单也最常用)
此时会默认继承javax.servlet.http.HttpServlet父类,并实现一些方法,同时会在web.xml中保存初始设置。


image.png

在上面这个图中,有两个数据:Servlet Name和Servlet Mapping URL,这两个数据的作用是在web.xml中保存数据。
web.xml数据:


image.png
示例代码:
package cn.kgc.web.Servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet3 extends HttpServlet {
    
    public MyServlet3() {
        super();
    }

    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print("    This is ");
        out.print(this.getClass());
        out.println(", using the GET method");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print("    This is ");
        out.print(this.getClass());
        out.println(", using the POST method");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

    public void init() throws ServletException {
        // Put your code here
    }

}

一般在开发的时候会把构造方法,destroy方法和init方法都去掉,只留下doGet和doPost。这两种方式分别对应表单的get和post方法。

注:要使用一个Servlet,只创建是不行的,还需要在web.xml中写配置文件,前两种方式需要用手写,但是容易出错。最后一种方式直接会生成配置文件,配置文件主要如下:

<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>MyServlet3</servlet-name>
    <servlet-class>cn.kgc.web.Servlet.MyServlet3</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>MyServlet3</servlet-name>
    <url-pattern>/servlet/MyServlet3</url-pattern>
  </servlet-mapping>

配置文件分析:
1、servlet标签和servlet-mapping标签成对出现。
2、servlet标签标签中的description标签和display-name标签没什么用,可以删除掉。
3、servlet-name标签里面的数据两个都一样,只要这个标签里面数据一样的,都是一对。
4、在servlet标签中,servlet-name的意思是内部映射名,servlet-class是内部映射类:cn.kgc.web.Servlet.MyServlet3
5、在servlet-mapping标签中,servlet-name的也是名字,其作用是根据servlet标签中的名字来找servlet-mapping标签中相对应的名字;url-pattern是servlet映射,用户通过里面的数据就可以访问MyServlet3了。
6、也就是说在servlet标签中存放的是servlet名和这个名对应的servlet类;在servlet-mapping标签中存放的是servlet名和这个名所对应的类所在的url地址。

三、运行Servlet

观察通过第三种方式创建的Servlet里面的各个方法的实现时机。

3.1示例代码

package cn.kgc.web.Servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet3 extends HttpServlet {
    
    public MyServlet3() {
        super();
    }

    public void destroy() {
        System.out.println("销毁Servlet");
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("进入doGet()");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("进入doPost()");
    }

    public void init() throws ServletException {
        System.out.println("初始化Servlet");
    }

}

3.2开启方式

因为Servlet需要web容器的支持,所以部署在Tomcat上。
将创建的Servlet项目部署到Tomcat上,然后访问该项目下面的MyServlet3 。
访问网址如下:http://localhost:8080/ServletDemo1/servlet/MyServlet3

3.3运行结果

image.png

最开始访问的时候会出现初始化和进入doGet(),之后每刷新一次就出现一次doGet()。

3.4销毁

image.png

停止服务器,不要通过console界面的红按钮去停止,通过开启的那个按钮去停止服务器,就会看到servlet的销毁。原因是Servlet的运行需要依赖外部容器,所以外部容器消失的时候Servlet就销毁了。从初始化到销毁就是servlet的一个生命周期。

相关文章

  • Servlet一——概述

      Servlet是Java所提供的一门用于开发动态WEB资源的技术,也是JavaEE的规范之一 一、Servle...

  • 一、Servlet概述

    一、问题引入 在之前做的新闻管理系统中,jsp页面一方面显示数据,比如newsDetailVies页面;另一方面也...

  • Java Servlet API

    Servlet 支持的版本 Servlet 3.0 新特性详解 Servlet 3.0 新特性概述Servlet ...

  • 4/14day33_Servlet

    回顾 Servlet入门 今日目标 一 Servlet概述 servlet= server+applet 运行在服...

  • Java - Part 8

    一、Servlet 1、Servlet概述 Servlet是Java Server Applet的简称,称为小服务...

  • Servlet概述

    # 一、Servlet概述 ## 1.1 什么是Servlet Servlet是基于Java技术的web组件,容器...

  • Servlet概述

    Servlet Java Servlet,用Java编写的服务器端程序其主要功能在于交互式地浏览和修改数据,生成动...

  • Servlet概述

    Servlet是JavaWeb三大组件之一,其他两个组件为Fileter(过滤器),Listener(监听器)Se...

  • Servlet概述

    Java Servlet API 是Servlet容器(如tomcat)和Servlet之间的一系列接口,它们定义...

  • java基础-day39-Servlet

    Servlet基础 1. Servlet概述 1.1 什么是Servlet 1.2第一个Servlet程序 1.3...

网友评论

      本文标题:一、Servlet概述

      本文链接:https://www.haomeiwen.com/subject/rsdbpftx.html