zoukankan      html  css  js  c++  java
  • Servlet2.5版本和Servlet3.0版本

    在学习这节之前你需要在你自己的电脑进行如下配置:

    在使用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: omcatwtpwebapps路径下,这是通过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版本

  • 相关阅读:
    基数排序学习
    桶排序学习
    计数排序-不基于比较O(n)
    基尼系数
    拉普拉斯进行特征选择
    int ,long long等范围
    Codeforces780C
    51 Nod 1119
    字典树入门
    POJ 2531 暴力深搜
  • 原文地址:https://www.cnblogs.com/zyly/p/10795643.html
Copyright © 2011-2022 走看看