参考文章:一个简单的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. echarts之series,markLine、markPoint

    一.标记线和标志点 markLine 标记线 标记线的添加,如最大值.最小值.平均值的标记线 symbol 标记的图形. data->type 特殊的标注类型,用于标注最大值最小值等. 可选: ...

  2. Mybatis+MySql 一个标签中执行多条sql语句 这个坑 ,我心中有一句MMP

    解决办法 转自网友: 亲测 解决了问题@ MySql默认是不支持这种骚操作的,但是并不代表不能实现,只需要在jdbc的配置文件中稍做配置: driver=com.mysql.jdbc.Driverur ...

  3. 洛谷 P2721 小Q的赚钱计划

    洛谷 这大概是我见过最水的紫题吧- 洛谷标签赞一个! 题意:你有一年时间,把10w元存银行变成更多钱,在特定时间区间内,你会有一些利息,不过不可中途退出. 直接dp:st[i]表示区间左端点,ed[i ...

  4. centos部署jenkins服务

    1 添加jenkins repo源 [root@WebVirtMgrWeb ~]# wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.or ...

  5. python函数回顾:dir()

    描述 dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表: 带参数时,返回参数的属性.方法列表.如果参数包含方法__dir__(),该方法将被调用. 如果参数不包含__dir__( ...

  6. 用户(user)和用户组(group)相关的配置文件、命令或目录;

    1.与用户(user)和用户组(group)相关的配置文件: 1)与用户(user)相关的配置文件:/etc/passwd 注:用户(user)的配置文件:/etc/shadow 注:用户(user) ...

  7. IDA 调试 Android 方法及简单的脱壳实现

    IDA 调试 Android 方法及简单的脱壳实现 标签: android原创逆向调试dalvik 2016-05-24 14:24 9286人阅读 评论(3) 收藏 举报 分类: 原创(25) An ...

  8. 小程序学习第二天 认识框架WXML

    一.初级小程序HelloWorld 心得: (1)progect.config.json :app的个性化设置 (2)一个小程序至少包括两个文件 (2.1)app.json 小程序全局配置       ...

  9. VC引用动态库

    1. 程序所在目录 2. 进程当前目录 3. 系统目录(C:\WINDOWS\System32) 4. Windows目录(C:\WINDOWS) 5. PATH环境变量指向的目录

  10. Android开发之旅-获取地理位置的经度和纬度

    在Android应用程序中,可以使用LocationManager来获取移动设备所在的地理位置信息.看如下实例:新建android应用程序TestLocation. 1.activity_main.x ...