一个简单的Servlet程序

原创 2016年03月17日 19:40:06

Servlet简介

Servlet是什么?简单地说,它就是一个java程序,是一个运行在web服务器上的程序。它可以对Web浏览器或其他HTTP客服端程序发出的请求进行处理。但是使Servlet能够处理以上请求的前提条件是Servlet对象要被布置在Servlet容器当中,我们这里用的Servlet容器就是我们前面用到的Tomcat服务器。

Servlet的使用和JSP不同,它需要web.xml文件的配置。当一个客户端发出HTTP请求时,服务器会根据配置文件中的配置信息将该请求的信息发送给相对应的Servlet进行处理。

Servlet的基本结构

Servlet就是一段由java编写的程序,由服务器来维护。为了方便服务器的处理,Servlet需要遵循一定的结构规范。通常我们所说的Servlet就是一个实现了HttpServlet抽象类的类的实例。代码结构如下:

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 ServTest extends HttpServlet {
    //init method
    public void init() throws ServletException {}
    //handle get request
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    //handle post request
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    //handle put request
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
    //handle delete request
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
    //destroy
    public void destroy() {}
}

7行,Servlet继承HttpServlet类。

9行,init()方法,服务器在创建Servlet实例后会调用该方法进行初始化的工作。

11~20行,Servlet就是通过这些do方法来处理对应的Http请求的。事实上,这些do方法都是从HttpServlet中继承来的,我们这里需要对这些方法进行重写以处理具体的请求。

23行,当服务器关闭时,该destroy()方法会被调用,销毁该实例。

Servlet生命周期

我们知道,Servlet是由服务器维护的。那么服务器是如何管理Servlet的呢?通常有以下几个阶段,这些阶段也就是Servlet从生到死的生命周期:

  • 当某个Servlet第一次被请求的时候,服务器会加载对应的Servlet类,将其放在Servlet实例池中。
  • 创建Servlet实例后,将调用该实例的init()方法进行一些初始化操作。(即Servlet的代码结构中的init())
  • 服务器通过调用Servlet的service()方法来处理客户端发送的请求。实际上,上面的Servlet的代码结构中的do方法都是通过service()来调用的。代码结构中我们没有显式地看到service()方法是因为我们没有对继承的该方法进行重写。
  • Servlet实例创建后会一直存在于内存中,直到服务器关闭,Servlet的destroy()方法被调用,该实例被销毁。

关于Servlet的生命周期,我们有一个实验来看,见以下文章:

实验说明Servlet的生命周期

Servlet的xml配置

Servlet在使用之前需要进行一定的配置,来告诉服务器被请求的Servlet应该发到哪里。这其实就是一个Servlet在服务器的注册过程,这样服务器就会知道哪个Servlet请求对应哪个Servlet对象。配置过程通常分为Servlet的声明和Servlet的映射两部分。

Servlet的声明

语法格式如下:

<servlet>
  <servlet-name>name</servlet-name>
  <servlet-class>path</servler-class>
</servlet>

第一条语句中的name是声明的Servlet对象的名字,名字你可以自取,就像声明一个String abc一样,abc名字可以自取。

第二条语句中的path是用于指定你的Servlet的class文件的路径的。通常你把你的Servlet编译好的class文件放在Tomacat安装目录下的/webapp/ProjectName/WEB-INF/classes文件夹下,此时只需要写你的Servlet的class文件的名字就行了:

<servlet-class>ServTest</servler-class>

ProjectName是你的webapp文件夹,里面的WEB-INF及classes文件夹需要手动创建。

如果你的Servlet在某个package中,比如说:

package servPack

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 ServTest extends HttpServlet {
}

该servTest在servPack包中,此时你要在/WEB-INF/classes文件中创建servPack文件夹,将你的servTest编译的class文件放到servPack中,路径写为:

<servlet-class>servPack.ServTest</servler-class>

Servlet的映射

语法格式如下:

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

这里是对我们上面声明的Servlet的一个映射,所以这里的name要和上面声明中的name一样才行。

url-pattern用于映射你的访问URL,例如将你的访问URL映射为:

<url-pattern>/ServletTest<url-pattern>

你就可以通过

localhost:8080/ServletTest

来请求该Servlet了。

一个简单的Servlet程序:

在Servlet的简单介绍后,做一个简单的Servlet程序。

首先在Tomcat安装目录下的webapps文件夹下创建一个SimpleServlet文件夹。依次创建目录:

/webapps/SimpleServlet/WEB-INF/classes

接下来我们在/SimpleServlet目录下创建一个jsp文件来调用Servlet:index.jsp

index.jsp

<%@ page contentType="text/html;charset=gb2312" language="java" %>
<html>
  <head>
    <title>Servlet</title>
  </head>
  <body>
    <center>
      <form action="MyServlet" name="form" method="post">
      Your Name:<input type="text" name="USERNAME"><br>
      <input type="submit" value="SUBMIT"></form>
    </center>
  </body>
</html>

上面的JSP中表单指定了请求为post,我们套用上面介绍的代码结构:

ServTest.java

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;

public class ServTest extends HttpServlet {
    //handle post request
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("gb2312");

        PrintWriter out = response.getWriter();
        String name = request.getParameter("USERNAME");

        out.println("Your Name : " + name);

    }
    //destroy
    public void destroy() {}
}

由于表单指定的请求为post类型,我们这里只简单重写了doPost()方法。service()方法会识别并调用这里的doPost方法进行处理。把这个java文件进行编译,编译后的class文件放入/WEB-INF/classes/文件夹下。

如果你使用javac编译该java文件,你需要把下载的javax.servlet的jar文件包含在calsspath环境变量中。如果你使用的集成开发环境,你需要在工程中添加该jar包。

接下来就是写配置文件了,也就是对该Servlet对象在服务器进行注册,进入到/SimpleServlet/WEB-INF/文件夹下,新建web.xml文件:

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-name>ServletHandle</servlet-name>
            <servlet-class>ServTest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletHandle</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>
</web-app>

照样复制过来就可以了。我特意取了三个不同的名字:ServTest(类文件名),ServletHandle以及映射URL的/MyServlet。看明白这三个不同的名字有利于区分这些概念。注意表单中的

action="MyServlet"

接下来,运行Tomcat服务器,在浏览器中输入:

localhost:8080/SimpleServlet/index.jsp

然后在文本框内输入你的名字,最好是英文,中文可能出现乱码。如下图:

然后点击submit,会得到以下输出:

http://localhost:8080/SimpleServlet/MyServlet
Your Name : easy

第一行是地址栏。

推荐阅读:

实验说明Servlet的生命周期

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a153375250/article/details/50916428

组合查询

用PB进行数据库应用系统开发时,我们经常要对大量的数据进行筛选、查询,得到符合要求的记录,这就需要用到组合条件查询功能。我在作应用系统开发时,就自己编写了一个简单而又实用的组合条件查询模板窗口,只要用...
  • xingjiaren
  • xingjiaren
  • 2001-04-10 14:22:00
  • 730

Servlet一个最简单的例子(一)

今天开始看Head First Servlet&JSP这本书,这本书文字和图片混合,看着比较轻松。然后刚开始学习,先写一个最简单的Servlet例子。   1:首先在Eclipse里面创建一个项目,然...
  • thesnowball
  • thesnowball
  • 2015-07-22 20:33:33
  • 326

Servlet介绍以及简单实例

Servlet介绍以及简单实例目录Servlet介绍以及简单实例 HTTP Web响应模式 Servlet工作流程 Servlet接口访问方式介绍:GET/POST Servlet配置部署 在web....
  • u013891695
  • u013891695
  • 2016-11-04 17:13:33
  • 2291

javaweb—servlet的简单入门使用

Servlet(Server Applet),全称JavaServlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是...
  • u013468915
  • u013468915
  • 2016-07-22 11:00:50
  • 19534

运行第一个简单servlet

1.servlet是什么 2.servlet的方法 3.新建一个类并实现servlet接口 4.简单定义servlet接口的方法,使servlet能工作 5.配置web.xml文件 6.启动tomca...
  • u014453898
  • u014453898
  • 2018-01-13 21:00:41
  • 57

简单写一个Servlet

1.创建一个动态服务器 dynamic web project,动态就是设计的到servlet,jsp等,还需要web运行的容器,如tomcat、jboss等,静态工程(static web proj...
  • qq_30212671
  • qq_30212671
  • 2018-01-12 17:05:38
  • 55

Tomcat中动手写一个servlet

1、编写HelloWorld.java并编译出.class: import java.io.*; import javax.servlet.*; import javax.servlet.http.*...
  • xiaomingjieao
  • xiaomingjieao
  • 2013-10-18 16:10:40
  • 529

【java项目实战】Servlet详解以及Servlet编写登陆页面(二)

Servlet是Sun公司提供的一门用于开发动态web网页的技术。Sun公司在API中提供了一个servlet接口,我们如果想使用java程序开发一个动态的web网页,只需要实现servelet接口,...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014-07-11 09:27:03
  • 77467

如何用eclipse创建你的第一个servlet小程序

在文章开始,先写一下get与post提交方式的区别: 例如,一张表单 ... 表单的提交方式一般有两种,分别是get方法和post方法。 get:get是通过URL来提交数据的,信息会显示在地址栏上...
  • Shiwy_ab
  • Shiwy_ab
  • 2017-08-10 10:34:33
  • 4113

Servlet入门----创建第一个自己的Servlet小程序

Servlet入门----创建第一个自己的Servlet小程序 使用开发工具创建第一步: 打开Myeclipse或者Eclipse,新建一个Web project,然后新建一个类Demo01.java...
  • Hangele
  • Hangele
  • 2016-10-25 09:31:59
  • 2598
收藏助手
不良信息举报
您举报文章:一个简单的Servlet程序
举报原因:
原因补充:

(最多只允许输入30个字)