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()方法呢?答案是否定 ...
随机推荐
- 【转载】lvs为何不能完全替代DNS轮询
上一篇文章"一分钟了解负载均衡的一切"引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点: 1)nginx前端加入lvs和keepa ...
- TagCanvas - HTML5 Canvas Tag Cloud
http://www.goat1000.com/tagcanvas.php watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbmlja3JvcHJhaw==/ ...
- VirtualBox 虚拟Ubuntu系统与主机互ping
互ping的前提是主机和虚拟机的ip地址在同一波段[eg:主机为:192.168.1.10虚拟Linux:192.168.1.11] 1.设置主机ip: ...
- DTD笔记
DTD(Document Type Definition)文档类型定义: DTD被用于定义XML文档的结构,作为规范XML文档的一种内容模型,DTD在各领域已形成统一规范的文档. 在XML文档中使用D ...
- error C2065: 'CArchiveStream' : undeclared identifier
release:模式下 问题: 在导入JPEG文件时要使用到 CArchiveStream类 但是编译的时候会出现 'CArchiveStream' : undeclared ide ...
- (最新)各大公司Java后端开发面试题总结
ThreadLocal(线程变量副本) Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一 ...
- 正则工具类以及FinalClass
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jadyer/article/details/27811103 完整版见https://jadyer. ...
- JS是否确认提示 +页面跳转
JS友好提示 +页面跳转 function logout()...{if (confirm("你确定要注销身份吗?是-选择确定,否-选择取消"))...{window.locati ...
- SVN命令使用详解【转】
本文转载自:http://blog.sina.com.cn/s/blog_963453200101eiuq.html 1.检出svn co http://路径(目录或文件的全路径) [本地目录全路 ...
- bzoj4105: [Thu Summer Camp 2015]平方运算
填坑 我不知道怎么算的,但是所有环的LCM数不会超过60 然后用线段树维护这个东西,每个节点记录子树内的循环节 没到循环节的暴力枚举 复杂度是nlogn再乘以循环节长度 #include<cst ...