Servlet2.5版本和Servlet3.0版本
在学习这节之前你需要在你自己的电脑进行如下配置:
- 配置Java运行环境:JDK+JRE的安装配置,参考博客Windows下配置Java开发环境;
- 安装Eclipse:参考博客Windows下配置Java开发环境,在下载Eclipse版本时要选择JavaEE企业级开发版本;
- 在Eclipse中配置Tomcat服务器:参考博客如何在Eclipse配置Tomcat服务器;
在使用Eclipse创建Dynamic Web Projcet时,有一个选项是Dynamic web module version:
首先需要说的是:
- 这里的版本指的是Servlet的版本;
- 如果你的jdk版本≥ 1.6才会有3.0的选项,并且默认是当前最高版本;
Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布。该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署。
Servlet2.5和Servlet3.0的最大区别在于,Servlet3.0引入了几项特性:
- 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度;
- 新增的注解支持:该版本新增了若干注解,用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml 部署描述文件从该版本开始不再是必选的了;
- 可插性支持:熟悉 Struts2 的开发者一定会对其通过插件的方式与包括 Spring 在内的各种常用框架的整合特性记忆犹新。将相应的插件封装成 JAR 包并放在类路径下,Struts2 运行时便能自动加载这些插件。现在 Servlet 3.0 提供了类似的特性,开发者可以通过插件的方式很方便的扩充已有 Web 应用的功能,而不需要修改原有的应用;
本篇博客主要介绍Servlet3.0新增的注解支持特性。Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述,简化开发流程。
一 Servlet2.5 XML配置文件
首先创建一个名为Servlet2.5的Dynamic Web Projct项目,Dynamic web module version选择2.5,项目结构如下图:
Web项目的根目录/有两个:
- 一个是WebContent :一般用来存放html、js、css等文件;
- 另一个是src:用来存放java源代码;
我们可以查看项目在磁盘上的文件结构:
注:
- web.xml 中的/:代表Web项目根路径,对应的URL请求为http://localhost:8008/Servlet2.5/;
- jsp中的/:服务器根路径,对应的URL请求为http://localhost:8008/;
1、创建index.jsp文件,位于WebContent目录下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method='post' action='WelcomeServlet'>
<input type='submit' value='登录'>
</form>
<a href='WelcomeServlet' >WelcomeServlet</a> </body>
</html>
jsp代码位于WebContent目录下, 此时超链接将会请求项目根路径下/的WelcomeServlet文件(这里使用的相对路径,相对的是项目根路径/),此时实际请求的是http://localhost:8008/Servlet2.5/WelcomeServlet。
<a href='WelcomeServlet'>WelcomeServlet</a>
注意:如果将上面jsp代码中WelcomeServlet更改为/WelcomeServlet,这个/则指的是服务器的根路径,也就是http://localhost:8008/,此时点击超链接请求的路径实际是http://localhost:8008/WelcomeServlet。
2、使用Eclipse创建一个Servlet类,位于包com.servlet.test下,名称为WelcomeServlet
并实现doPost()、doGet()方法如下:
package com.servlet.test; import java.io.IOException; import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class WelcomeServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//super.doGet(req, resp); //HTTP Status 405 – Method Not Allowed错误需要屏蔽掉该语句,并清空缓存,重启tomcat
System.out.println("doGet....");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//super.doPost(req, resp); //HTTP Status 405 – Method Not Allowed错误需要屏蔽掉该语句,并清空缓存,重启tomcaw3c
System.out.println("doPost....");
}
}
通过Eclipse创建的Servlet,会自动配置web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Servlet2.5</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>
<description></description>
<display-name>WelcomeServlet</display-name>
<servlet-name>WelcomeServlet</servlet-name>
<servlet-class>com.servlet.test.WelcomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WelcomeServlet</servlet-name>
<url-pattern>/WelcomeServlet</url-pattern>
</servlet-mapping>
</web-app>
web-app元素指明了Servlet的版本为2.5,通过web.xml配置可以知道Servlet请求流程:
- 当点击超链接,会请求项目根路径下/的WelcomeServlet,即http://localhost:8008/Servlet2.5/WelcomeServlet;
<a href='WelcomeServlet'>WelcomeServlet</a>
- 首先会在web.xml配置文件查找请求的页面,在<url-pattern>中可以找到请求的页面/WelcomeServlet(前面已经介绍到web.xml 中的/:代表项目根路径,也就是http://localhost:8008/Servlet2.5/);
<url-pattern>/WelcomeServlet</url-pattern>
- 根据 <servlet-mapping>中的<servlet-name> 去匹配<servlet>中的<servlet-name>,最终将该请求交给<servlet-class>中的com.servlet.test.WelcomeServlet执行;
<servlet-class>com.servlet.test.WelcomeServlet</servlet-class>
注意:当从浏览器发送一个URL请求时,首先是在web.xml配置查找请求的页面,如果在配置文件查找不到,则会到项目根路径下/查找对应的请求文件,如果还是找不到,则会返回HTTP Status 404 – Not Found!
运行index.jsp,即浏览器请求项目根路径下/的index,jsp文件,输出如下:
点击超链接,请求http://localhost:8008/Servlet2.5/WelcomeServlet,执行com.servlet.test.WelcomeServlet类:
输出如下:
3、部署项目到tomcat服务器
当运行index.jsp时,会将项目部署到E:\tomcat\wtpwebapps路径下,这是通过Servers设定的:
Server Path为服务器路径,Deploy path为项目的部署路径,可以看到项目Servlet2.5被部署到wtpwebapps路径下:
打开文件夹Servlet2.5可以看到:
上图中文件正是Servlet2.5项目WebContent下的文件,此外,WEB-INF文件下还存放了项目src目录下java代码的编译文件(即.class文件):
在部署项目时具体会将哪些文件复制到tomcat目录下,是通过项目Properties——>Deployment Assembly设置的(默认设置即可)。
- /src路径下的文件被部署到WEB-INF/classes下;
- /WebContent下的文件被部署到根路径/下;
注意:这里的/路径,指的是wtpwebapps/Servlet2.5/路径下。
4、升级到3.0版本
如果想将Servlet2.5升级为Servlet3.0,需要进行如下设置,右键项目Properties——>Project Facets——>Dynamic Web Dodule更改为3.0。
此时不要去更改XML文件关于WelcomeServlet的配置。如果想删掉XML中关于WelcomeServlet的配置,我们需要在WelcomeServlet类声明之前新增注解@WebServlet("/WelcomeServlet")。
下面我们将会详细介绍Servlet3.0版本。
二 Servlet3.0版本
1、开发Servlet3.0程序的所需要的环境
开发Servlet3.0的程序需要一定的环境支持。Eclipse10和Tomcat7都提供了对Java EE6规范的支持。Tomcat需要Tomcat7才支持Java EE6,Tomcat7需要使用JDK1.6以上的版本。
所以开发Servlet3.0的程序需要以下的开发环境支持:
- IDE:Eclipse 10+
- JDK:JDK 1.6+
- tomcat:tomcat 7+
2、创建Dynamic Web Projct项目
首先创建一个名为Servlet3.0的Dynamic Web Projct项目,Dynamic web module version选择3.0,并且勾选上Generate web.xml deployment descriptor:
项目结构如下图:
3、创建index.jsp文件,位于WebContent目录下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method='post' action='WelcomeServlet'>
<input type='submit' value='登录'>
</form>
<a href='WelcomeServlet' >WelcomeServlet</a> </body>
</html>
4、使用Eclipse创建一个Servlet类,位于包com.servlet.test下,名称为WelcomeServlet
并实现doPost()、doGet()方法如下:
package com.servlet.test; 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; /**
* Servlet implementation class WelcomeServlet
*/@WebServlet(name="WelcomeServlet",value="/WelcomeServlet")
public class WelcomeServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public WelcomeServlet() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Servlet3.0...doGet");
response.getWriter().print("Servlet3.0...doGet");
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Servlet3.0...doPost");
response.getWriter().print("Servlet3.0...doPost");
}
}
在Servlet3.0中,可以使用@WebServlet注解将一个继承于javax.servlet.http.HttpServlet的类标注为可以处理用户请求的Servlet。
@WebServlet注解的相关属性 | ||
NO. | 属性名 | 描述 |
1 | asyncSupported | 声明Servlet是否支持异步操作模式 |
2 | description | Servlet的描述信息 |
3 | displayName | Servlet的显示名称 |
3 | initParams | Servlet的初始化参数 |
5 | name | Servlet的名称 |
6 | urlPatterns | Servlet的访问URL |
7 | value | Servlet的访问URL |
Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义:
- 像上面的WelcomeServlet 可以描述成@WebServlet(name="WelcomeServlet",value="/WelcomeServlet");
- 也定义多个URL访问:
如@WebServlet(name="Servlet3Demo",urlPatterns={"/WelcomeServlet","/WelcomeServlet2"})
或者@WebServlet(name="AnnotationServlet",value={"/WelcomeServlet","/WelcomeServlet2"})
5、部署Web项目到Tomcat
点击Servers右键——>Add and Remove——>将项目Servlet3.0部署到Tomcat服务器上,然后Servers右键Start服务器:
并自动打开浏览器访问:http://localhost:8008/Servlet2.5/WelcomeServlet:
可以看到,使用Eclipse10开发一个Servlet3.0的程序是非常方便和快捷的。Servlet3.0提供了注解之后对于Servlet的开发就方便多了,省去了在web.xml文件中配置。
参考文献
[1]Servlet3.0(一)--使用注解标注Servlet @WebServlet
[2]Servlet2.5和 3.0区别(Servlet 3.0 新特性详解)
[3]将Servlet3.0版本的JavaWeb项目 回退到Servlet2.5版本
Servlet2.5版本和Servlet3.0版本的更多相关文章
- MongoDB3.2版本与3.0版本写场景压力测试对比
我们主要是为了测试journal对写操作性能的影响.分别测试了3.2版本,3.0版本在ramdisk,hdd上有journal,和没journal的情况. 发现一个很怪异的现象,3.2版本时候,随着y ...
- vue的生命周期(又称钩子函数)----以及vue1.0版本与vue2.0版本生命周期的不同
vue生命周期 1. vue1.0版本与vue2.0版本生命周期的不同 vue1.0版本生命周期图示 图1 vue1.0版本生命周期 vue1.0版本的生命周期: init 实例创建之前 creat ...
- 百度echarts 3.0版本和2.0版本的兼容问题
前一段时间,项目中要用到统计图表,之前也用过jqplot的图表插件,这次开发的内容中基于地图的展示还很多,所以后来选择了百度的echarts插件(echarts.baidu.com).刚开始用的时候, ...
- hibernate4.0+版本和3.0+版本的区别总结
自己总结下hibernate4.1版本中的新特性和hibernate3.3做区别 1.数据库方言设置 <property name=”dialect”>org.hibernate.dial ...
- 纪念BLives 1.0版本发布
历时两个多月的时间,BLives程序1.0发布,在开发程序期间自己经历了很多,考试,恋爱,学业,自己很纠结 很伤心,有时候很无助,为了让自己有事干,我在考试备考期间去设计程序- -#,虽然程序设计的一 ...
- AFNetworking 3.0 版本使用
原创:http://www.zhimengzhe.com/IOSkaifa/38653.html AFNetworking 3.0 版本使用 在Xcode7.0之后,苹果废弃了NSURLConnect ...
- 从 Bootstrap 2.x 版本升级到 3.0 版本
摘自http://v3.bootcss.com/migration/ Bootstrap 3 版本并不向后兼容 v2.x 版本.下面的章节是一份从 v2.x 版本升级到 v3.0 版本的通用指南.如需 ...
- CentOS 6下gcc升级的操作记录(由默认的4.4.7升级到6.4.0版本)
机房一台centos6.9机器部署了jenkins发布系统,开发人员在用node编译js,发现依赖的gcc版本低了,故需要将gcc升级到高版本(至少5.0版本以上),这里选择升级到6.4.0版本,下面 ...
- Servlet3.0中Servlet的使用
目录 1.注解配置 2.异步调用 3.文件上传 相对于之前的版本,Servlet3.0中的Servlet有以下改进: l 支持注解配置. l 支持异步调用. l 直接有对文件上传的支持. 在这篇 ...
随机推荐
- 卓越Code第一次作业
第一次团队作业 序言 所属课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign 作业要求 https://w ...
- 洛谷 P1816 忠诚题解
题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...
- c++的boost库
c++ 的boost库的理解? 参考:http://zh.highscore.de/cpp/boost/introduction.html https://www.cnblogs.com/lidabo ...
- Git的工作流程
git的工作流程为: 克隆Git资源作为工作目录 在克隆的资源上添加或者修改文件 如果别人修改了,你可以更新资源 在提交前查看修改 提交修改 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交 ...
- 爬虫 - 请求库之selenium
介绍 官方文档 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的 ...
- tf.logging.set_verbosity
tf.logging.set_verbosity (tf.logging.INFO) 作用:将 TensorFlow 日志信息输出到屏幕
- NOI2018游记【一年后的回忆】
今天是2019年9月6日,我坐在大学的宿舍里,同样敲着键盘,在一年前充满回忆与汗水的博客上,又一次地回忆往事. 那是2018年的7月,我停了三个月的课,攥着一张thusc的安慰约,放手在OI的生涯最后 ...
- 【游记】CSP2019 垫底记
考试时候的我: Day 1 做完 \(T1\) 和 \(T2\),还有 \(2.5 h\),我想阿克 \(Day1\).(\(T3\):不,你不想) 不过一会就想出来给每个点 dfs 贪心选一个点,然 ...
- fitnesse的安装
最近项目组有个单独的功能模块需要写自动化,由于是测试接口,我本来是想用之前那个项目组使用的robot framework+python,但是呢,项目组领导觉得,目前项目开发语言是java,相应的自动化 ...
- 2019.12.10 定义数组及java内存划分
//数据类型[ ] 数组名 = new 数据类型[元素个数或数组长度]; int[] x = new int[100]; //类型[] 数组名 = new 类型[]{元素,元素,……}; String ...