参考文章:一个简单的Servlet程序  http://blog.csdn.net/a153375250/article/details/50916428

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的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的映射

语法格式如下:

 <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了。

如果写成:* ace这种形式,则所有与ace为结尾的请求都通过本Servlet来处理

如:127.0.0.1:8080/ace.servlet/lalaace

制作简单Servlet

新建一个Dynamic Web Project,取名为SimpleServlet

在WebContent下新建jsp文件

Index.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<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>

新建Servlet,package为niiam,ServletTest.java

 package niiam;

 import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class ServTest
*/
@WebServlet("/ServTest")
public class ServTest extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public ServTest() {
super();
// TODO Auto-generated constructor stub
} /**
* @see Servlet#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
response.setCharacterEncoding("gb2312"); PrintWriter out = response.getWriter();
String name = request.getParameter("USERNAME"); out.println("Your Name : " + name);
} }

保存,如果Eclipse设置了自动编译(Project->Build Automatically)

则在制定Build path(在本项目中为build/classes)中会出现.class文件

修改web.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>SimpleServlet</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>ServletHandle</servlet-name>
<servlet-class>niiam.ServTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletHandle</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
</web-app>

其中,第15行内容注意要体现对应package中的class

在服务器上运行Index.jsp即可

Eclipse下创建简单Servlet的更多相关文章

  1. IDEA创建简单servlet程序

    创建项目 创建完后的目录结构为: web项目配置 在WEB-INF目录下新建两个文件夹,分别命名未classes和lib(classes目录用于存放编译后的class文件,lib用于存放依赖的jar包 ...

  2. eclipse下创建maven项目并部署到tomcat服务器(转)

    maven项目部署到服务器有很多方法,可以利用jetty-maven-plugin或者tomcat-maven-plugin,这属于maven的知识点. 通常开发中,需要将项目放在服务器上借助开发工具 ...

  3. 5.Maven和Eclipse整合(两种方式进行插件的安装),Maven相关设置,Eclipse下创建Maven项目

     1  第一种方式是:在连网的情况下.通过在helpàInstall下安装. 新的地址是:http://download.eclipse.org/technology/m2e/releases 2 ...

  4. eclipse下开发简单的Web Service

    service部分 在eclipse下新建一个动态web项目 在项目中新建一个service类 编写SayHello类的代码 package org.sunny.service; //包不要引用错了 ...

  5. Eclipse下建立简单JNI程序实现返回double类型

    在Eclipse下生成时要注意,由于通常是在package里面添加类,而非像单独建立工程时独立添加,所以,在编译的时候,都需要进入包所在的文件夹, javac 包名.类名 这样的形式来编译,同理,ja ...

  6. Eclipse下创建Spring MVC web程序--非maven版

    首先, 安装eclipse和tomcat, 这里我下载的是tomcat9.0版本64位免安装的:地址https://tomcat.apache.org/download-90.cgi 免安装的如何启动 ...

  7. Eclipse下创建Spring MVC web程序--maven版

    1. 创建一个maven工程: File->New->Other... 2. 创建完成后的结构如下: 3. 配置pom.xml文件,添加spring-webmvc依赖项   <pro ...

  8. eclipse下创建maven项目

    1.创建一个Java项目 1)File--->New--->Other--->Maven--->Maven Projet 2)选择maven-archetype-quickst ...

  9. premake在Ubuntu和GCC环境下创建简单的C++工程

    由于premake基于lua脚本,为了方便编辑lua脚本,我在emacs24中利用package system安装了lua-mode. 然后创建config.lua文件,填入下面这段,主要来自:htt ...

随机推荐

  1. The C Programming Language Second Edition

    %12d  at least #include <stdio.h> main() { ,sum=,w=; ; ; w<=end; w++ ) { sum+=w; // for(wb= ...

  2. 一、Nuxt简介

    1.Nuxt是什么    Nuxt.js是基于vue的服务器端渲染框架,常用来做SSR(服务器端渲染)   2.为什么用Nuxt    Vue开发的SPA(单页应用)不利于搜索引擎的SEO优化   3 ...

  3. android自定义控件(四)坐标系

    1.局部坐标系(Local Coordinate) 所谓本地坐标系,就是坐标系以物体的中心为坐标原点,物体旋转.平移等操作都是围绕局部坐标系进行的.这时当物体模型进行旋转.平移等操作时, 局部坐标系也 ...

  4. 什么是 XML Schema(转)

    什么是 XML Schema? XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD. XML Schema 的作用: 定义可出现在文档中的元素 定义可出现在文档中的属性 定义 ...

  5. Vimium~让您的Chrome起飞

    工欲善其事,必先利其器!撸起Vimium,我的Chrome就这么起飞了. 学起(了解几个快捷键即可)And撸起Vimium,想黑客一般在Chrome上飞起.Vimium常用快捷键(注:区分大小写)j, ...

  6. Loadrunder之脚本篇——检查点

    VuGen判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的是HTTP状态为200 OK,那么VuGen就认为脚本正确地运行了,并且是运行通过的.而大多数系统出错时是不会返回错误页面 ...

  7. SpringBoot整合集成redis

    Redis安装:https://www.cnblogs.com/zwcry/p/9505949.html 1.pom.xml <project xmlns="http://maven. ...

  8. jpa,jdbc,hibernate/mybatis,数据库驱动

    JPA是规范,hibernate/mybatis是对规范的实现,hibernate/mybatis是对jdbc的封装,也就是说hibernate/mybatis还是会调用jdbc.    我们平时使用 ...

  9. MySQL密码的恢复方法

    MySQL密码的恢复方法之一 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态 ...

  10. 【Topcoder】SRM158 DIV2总结

    250分题:给定一个4位字符串initial和rotate这个字符串的方式,然后再给另一个字符串current,问current能否由initial通过rotate得到,需要几次rotate? 简单的 ...