Servlet的定义

Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。

使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其它源的记录,还可以动态创建网页。

Java Servlet通常情况下与使用CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于CGI,Servlet有以下几点优势:

●  性能明显更好。

●  Servlet在Web服务器的内存空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。

●  Servlet是独立于平台的,因为Servlet是用Java编写的。

●  服务器上的Java安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet是可信的。

●  Java类库的全部功能对Servlet来说都是可用的。它还可以通过socket和RMI机制与数据库或其他软件进行交互。

图1.23显示了Servlet在Web应用程序中的位置。

Servlet在Web应用程序中的位置

Servlet的任务

Servlet 执行以下主要任务:

●  读取客户端(浏览器)发送的显式的数据。这包括网页上的HTML表单,或者也可以是来自自定义的HTTP客户端程序的表单。

●  读取客户端(浏览器)发送的隐式的HTTP请求数据。这包括cookies、媒体类型和浏览器能理解的压缩格式等等。

●  处理数据并生成结果。这个过程可能需要访问数据库,执行RMI或CORBA调用,调用其它Web服务,或者直接计算得出相应的响应。

●  发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML或XML)、二进制文件(GIF图像)、Excel等。

●  发送隐式的HTTP响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如HTML),设置cookies和缓存参数,以及其他类似的任务。

使用Eclipse创建Servlet

创建Servlet非常的简单,只需要使自定义类继承javax.servet.http.HttpServlet类并重写其中的service方法即可。Eclipse开发工具为了方便我们开发Servlet,提供了创建Servlet的功能,现在为大家介绍如何使用Eclipse创建一个Servlet并在浏览器中访问。

1)打开Eclipse,选择JavaEE视图。在菜单栏中点击File,选择New-other,在Web目录下找到并选择Dynamic Web Project,弹出如图1.24所示的对话框。

2)在Project name中填入项目名称:xdl_servlet_demo,Target runtime选择已经配置好的Tomcat服务器Tomcat8.5,其他选项保持默认,然后点击Finish。Eclipse会自动创建如图1.25所示的目录结构。

3)鼠标右键src目录,在弹出的菜单中选择New-Servlet,将弹出如图1.26所示的对话框。在该对话框中,填入Java Package为com.xdl.servlet,Class name填写为MyServlet,其它选项保持默认,然后点击Finish。

Eclipse创建动态Web工程的目录结构

Create Servet对话框

此时在src目录下,Eclipse就会为我们自动创建com.xdl.servlet包,并创建一个继承javax.servlet.http.HttpServlet类的Servlet。我们打开MyServlet类的源代码并做一些修改,在其中的doGet方法中添加了一行代码,使我们打开浏览器访问这个Servlet时能在浏览器的页面中显示Hello World!。修改后的MyServlet类的完整代码如下:

package com.xdl.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/MyServlet")

public class MyServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public MyServlet() {

super();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.getWriter().write("Hello World!");

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

注意,在这段代码中,使用了Servlet3.0后新增的注解@WebServlet("/MyServlet"),该注解的作用是用于配置Servlet。但是在Servlet3.0之前是需要使用配置文件web.xml来配置Servlet的。关于Servlet的注解将在下一节进行讲解,现在我们来运行一下刚刚创建的Servlet。

4)在项目名上单击鼠标右键,在弹出的菜单中选择Run as-Run on Server,然后在弹出的对话框中选择在Eclipse中配置的Tomcat服务器,然后点击Finish即可将项目部署到Tomcat服务器中并启动Tomcat服务器。Tomcat服务器启动完成后,打开浏览器输入localhost:8080/xdl_servlet_demo/MyServlet,如果没有错误将显示如图1.27所示的内容。

网页版Hello World!

配置Servlet

要使Servlet对象正常地运行,需要进行适当的配置,以告知Web容器(Web服务器)哪一个请求调用哪一个Servlet对象进行处理,对Servlet起到一个注册的作用。在Servlet3.0后,推荐使用注解的方式对Servlet进行配置,所以使用Eclipse创建Servlet会默认使用注解的方式配置Servlet。但是对于一些第三方的类或接口,是无法使用注解的方式进行配置的,这时就需要使用配置文件进行配置了。当然,在Servlet3.0后使用注解和配置文件都是可行的,接下来我们首先介绍配置文件的使用方式,然后再为大家介绍注解的使用方式。

●  使用配置文件web.xml配置Servlet

使用配置文件的方式是Servlet经典的配置方式,方法如下:

打开项目中WEB-INF目录下的web.xml文件(如果没有该文件,请使用鼠标右键点击工程目录中的Deployment Descriptor,在弹出的菜单中选择Generate Deployment Descriptor Stub选项,即可在WEB-INF目录下生成web.xml文件),在其中的web-aap标签中添加子标签<servlet>和<servlet-mapping>。例如:

<servlet>

<servlet-name>MyServlet</servlet-name>

<servlet-class>com.xdl.servlet.MyServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>MyServlet</servlet-name>

<url-pattern>/myservlet.do</url-pattern>

</servlet-mapping>

其中servlet-name指定的是Servlet的名字,作用域是整个web.xml中,所以在同一个web.xml文件中不能出现两组servlet-name名字相同的servlet标签,servlet-class指定的是Servlet类的包名加类名,在servlet-mapping中设置的servlet-name指定的是要映射的Servlet的名字,需要正确的配置为已经在servlet标签中配置的servlet-name,而url-pattern指定的是请求路径,表示客户端使用该路径即可访问配置的Servlet。

●  使用注解annotation配置Servlet

使用注解的方式配置Servlet是Servlet3.0后新增加的功能,所以在Servlet3.0版本之前是不能使用注解的方式来配置servlet的,使用注解的方式来配置Servlet非常简单,只需要在类前加入@WebServlet注解即可。例如:

@WebServlet("/myservlet.do")

public class MyServlet extends HttpServlet{

...

}

只需要使用@WebServet注解即可给当前的类注册为Servlet,然后传入一个URL即可配置请求地址。

IT兄弟连 JavaWeb教程 Servlet的更多相关文章

  1. IT兄弟连 JavaWeb教程 Servlet表单数据

    很多情况下,需要传递一些信息,从浏览器到Web服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到Web服务器,分别为GET方法和POST方法. 1.GET方法 GET 方法向页面请求发送已编 ...

  2. IT兄弟连 JavaWeb教程 Servlet API

    Java Servlet是运行在带有支持Java Servlet规范的解释器的web服务器上的Java类. Servlet可以使用javax.servlet和javax.servlet.http包创建 ...

  3. IT兄弟连 JavaWeb教程 Servlet会话跟踪 经典案例

    案例需求:编写一个servlet,可以向session中存放一个消息,再编写一个servlet可以从session取得session中存放的这个消息. 案例实现: package com.xdl.se ...

  4. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session常用方法

    ●  public Object getAttribute(String name) 该方法返回在该session会话中具有指定名称的对象,如果没有指定名称的对象,则返回null. ●  public ...

  5. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session技术

    Servlet提供了HttpSession接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式. Servlet容器使用这个接口来创建一个HTTP客户端和HTTP服务器之 ...

  6. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie常用方法

    以下是在Servlet中操作Cookie时可使用的有用的方法列表 ●  public void setDomain(String pattern) 该方法设置cookie适用的域,例如 itxdl.c ...

  7. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie路径问题

    操作Cookie时,需要注意路径问题: 设置操作:任何路径都可以设置Cookie,但是有时我们也是用设置进行替换Cookie和删除Cookie(maxAge=0)! 替换:只能由完全相同的路径来操作! ...

  8. IT兄弟连 JavaWeb教程 Servlet会话跟踪 创建Cookie

    Tomcat作为Web服务器,对Cookie提供了良好的支持.那么,运行在Tomcat的Servlet该如何访问Cookie呢?幸运的是,Servlet无需直接和HTTP请求或响应中的原始Cookie ...

  9. IT兄弟连 JavaWeb教程 Servlet线程安全问题

    在Internet中,一个Web应用可能被来自西面八方的客户并发访问(即同时访问),而且有可能这些客户并发访问的是Web应用中的同一个Servlet,Servlet容器为了保证能同时相应多个客户端要求 ...

  10. IT兄弟连 JavaWeb教程 Servlet转发

    Servlet对象由Servlet容器创建,并且Servlet对象的service()方法也由容器调用,一个Servlet对象可否直接调用另一个Servlet对象的service()方法呢?答案是否定 ...

随机推荐

  1. mysql中游标在存储过程中的具体使用方法

    昨天写的一个东东,分享下给大家. drop PROCEDURE  if exists sp_cleanUserData; CREATE  PROCEDURE `sp_cleanUserData`()  ...

  2. spring 事件模式 源代码导读

    一,jdk 事件对象基类 package java.util; import java.io.Serializable; public class EventObject implements Ser ...

  3. android自己定义开关控件

    近日在android项目要使用开关控件.可是android中自带的开关控件不太惬意,所以就打算通过自己定义View写一个开关控件 ios的开关控件当然就是我要仿照的目标. 先上图:   waterma ...

  4. 创建Vue项目的步骤

    第一步: 对于要创建项目的工作目录,要先进性管理,命令:npm init -y 第二步: 初始化webpack 包,命令:vue init webpack 自定义名称 第三步: 在components ...

  5. java随记2

    1.Arrays java8里新添加了parallelSort等parallel开头的方法,表示利用cpu并行的能力 2.面向对象 如果继承树里的某个类要被初始化时,系统将会同时初始化该类的所有父类 ...

  6. JavaScript重点记忆

    String的常用方法 indexOf() 返回字符串中检索指定字符第一次出现的位置 lastIndexOf() 返回字符串中检索指定字符最后一次出现的位置 match() 找到一个或多个正则表达式的 ...

  7. mvn_action

    validate(验证): 验证项目正确,并且所有必要信息可用. compile(编译): 编译项目源码 test(测试): 使用合适的单元测试框架测试编译后的源码. package(打包): 源码编 ...

  8. finally{} 代码块

    package Exception; /* * finally{}代码块 * * finally{]代码块是必须要被执行的,不管异常是否处理成功,该代码块里面的代码体都会被执行, */ public ...

  9. js 中整理(一)

    一. 冒泡与冒泡阻止   var arr={5,0,-56,900,12,9000,-123}; var flag=false; //大的排序次数(arr.length-1) for(var i=0; ...

  10. hihocoder #1068 : RMQ-ST算法 ( RMQ算法 O(nlogn)处理 O(1)查询 *【模板】 1)初始化d数组直接读入+计算k值用数学函数log2()==*节约时间 )

    #1068 : RMQ-ST算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在美国旅行了相当长的一段时间之后,终于准备要回国啦!而在回国之前,他们准备 ...