IT兄弟连 JavaWeb教程 Servlet
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的更多相关文章
- IT兄弟连 JavaWeb教程 Servlet表单数据
很多情况下,需要传递一些信息,从浏览器到Web服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到Web服务器,分别为GET方法和POST方法. 1.GET方法 GET 方法向页面请求发送已编 ...
- IT兄弟连 JavaWeb教程 Servlet API
Java Servlet是运行在带有支持Java Servlet规范的解释器的web服务器上的Java类. Servlet可以使用javax.servlet和javax.servlet.http包创建 ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 经典案例
案例需求:编写一个servlet,可以向session中存放一个消息,再编写一个servlet可以从session取得session中存放的这个消息. 案例实现: package com.xdl.se ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session常用方法
● public Object getAttribute(String name) 该方法返回在该session会话中具有指定名称的对象,如果没有指定名称的对象,则返回null. ● public ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session技术
Servlet提供了HttpSession接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式. Servlet容器使用这个接口来创建一个HTTP客户端和HTTP服务器之 ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie常用方法
以下是在Servlet中操作Cookie时可使用的有用的方法列表 ● public void setDomain(String pattern) 该方法设置cookie适用的域,例如 itxdl.c ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie路径问题
操作Cookie时,需要注意路径问题: 设置操作:任何路径都可以设置Cookie,但是有时我们也是用设置进行替换Cookie和删除Cookie(maxAge=0)! 替换:只能由完全相同的路径来操作! ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 创建Cookie
Tomcat作为Web服务器,对Cookie提供了良好的支持.那么,运行在Tomcat的Servlet该如何访问Cookie呢?幸运的是,Servlet无需直接和HTTP请求或响应中的原始Cookie ...
- IT兄弟连 JavaWeb教程 Servlet线程安全问题
在Internet中,一个Web应用可能被来自西面八方的客户并发访问(即同时访问),而且有可能这些客户并发访问的是Web应用中的同一个Servlet,Servlet容器为了保证能同时相应多个客户端要求 ...
- IT兄弟连 JavaWeb教程 Servlet转发
Servlet对象由Servlet容器创建,并且Servlet对象的service()方法也由容器调用,一个Servlet对象可否直接调用另一个Servlet对象的service()方法呢?答案是否定 ...
随机推荐
- bootstrap之ScrollTo
ScrollTo package io.appium.android.bootstrap.handler; import com.android.uiautomator.core.UiObject; ...
- SQL获取事件探查器保存的跟踪文件
fn_trace_gettable (Transact-SQL) 以表格格式返回一或多个跟踪文件的内容. Transact-SQL 语法约定 语法 fn_trace_gettable ( filena ...
- Effective C++ 43,44
43.明智地使用多继承. 多继承带来了极大的复杂性.最主要的一条就是二义性. 当派生类为多继承时,其多个基类有同名的成员时,就会出现二义性.通常要明白其使用哪个成员的.显式地限制修饰成员不仅非常笨拙, ...
- Photoshop 更改图片颜色
程序猿兼职美术的常常没有时间搞太多图片.我们能够一张图片更改主要颜色来到达目的.我知道的主要有2种方法,1是更改色相,2是替换颜色.直接用油漆桶仅仅能在异常简单的图片才干用. 1. 更改色相 ...
- Intel graphics processing units
http://en.wikipedia.org/wiki/Comparison_of_Intel_graphics_processing_units Comparison of Intel graph ...
- Mysql 数据库中间件
读写分离:简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力.主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作.当主数据库 ...
- [Android]Android5.0实现静默接听电话功能
原因: android曾经能够通过AIDL进行静默接听.可是5.0以后就被谷歌给屏蔽了.这时候我们仅仅能通过其它方式实现了. 解决方式: try { Runtime.getRuntime().exec ...
- Android 打造随意层级树形控件 考验你的数据结构和设计
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40212367,本文出自:[张鸿洋的博客] 1.概述 大家在项目中或多或少的可能会 ...
- hihocode #1388 : Periodic Signal NTT
#1388 : Periodic Signal 描述 Profess X is an expert in signal processing. He has a device which can ...
- aop中获取方法的注解
@Around(value="@annotation(apiLog)") public Object around(ProceedingJoinPoint pjp, ApiLog ...