在学习这节以前你须要在你本身的电脑进行以下配置:css
在使用Eclipse建立Dynamic Web Projcet时,有一个选项是Dynamic web module version:html
首先须要说的是:java
Servlet 3.0 做为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一块儿发布。该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署。web
Servlet2.5和Servlet3.0的最大区别在于,Servlet3.0引入了几项特性:浏览器
本篇博客主要介绍Servlet3.0新增的注解支持特性。Servlet3.0提供了注解(annotation),使得再也不须要在web.xml文件中进行Servlet的部署描述,简化开发流程。缓存
首先建立一个名为Servlet2.5的Dynamic Web Projct项目,Dynamic web module version选择2.5,项目结构以下图:tomcat
Web项目的根目录/有两个:服务器
咱们能够查看项目在磁盘上的文件结构:并发
注:app
<%@ 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。
并实现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请求流程:
<a href='WelcomeServlet'>WelcomeServlet</a>
<url-pattern>/WelcomeServlet</url-pattern>
<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类:
输出以下:
当运行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设置的(默认设置便可)。
注意:这里的/路径,指的是wtpwebapps/Servlet2.5/路径下。
若是想将Servlet2.5升级为Servlet3.0,须要进行以下设置,右键项目Properties——>Project Facets——>Dynamic Web Dodule更改成3.0。
此时不要去更改XML文件关于WelcomeServlet的配置。若是想删掉XML中关于WelcomeServlet的配置,咱们须要在WelcomeServlet类声明以前新增注解@WebServlet("/WelcomeServlet")。
下面咱们将会详细介绍Servlet3.0版本。
开发Servlet3.0的程序须要必定的环境支持。Eclipse10和Tomcat7都提供了对Java EE6规范的支持。Tomcat须要Tomcat7才支持Java EE6,Tomcat7须要使用JDK1.6以上的版本。
因此开发Servlet3.0的程序须要如下的开发环境支持:
首先建立一个名为Servlet3.0的Dynamic Web Projct项目,Dynamic web module version选择3.0,而且勾选上Generate web.xml deployment descriptor:
项目结构以下图:
<%@ 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>
并实现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定义:
如@WebServlet(name="Servlet3Demo",urlPatterns={"/WelcomeServlet","/WelcomeServlet2"})
或者@WebServlet(name="AnnotationServlet",value={"/WelcomeServlet","/WelcomeServlet2"})
点击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