精华内容
下载资源
问答
  • Tomcat新特性:支持Servlet3.0注解定义,无需配置web.xml 前言 tomcat从7.0版本开始就支持Servlet3.0,在Eclipse中不再需要web.xml配置servlet,而通过注解的方式找寻servlet。 电脑环境: Windows10教育版 ...

    Tomcat新特性:支持Servlet3.0注解定义,无需配置web.xml

    前言

    tomcat从7.0版本开始就支持Servlet3.0,在Eclipse中不再需要web.xml配置servlet,而通过注解的方式找寻servlet。

    电脑环境:

    Windows10教育版 64位 (OS内部版本:16299.125)
    jdk版本:jdk1.8_111
    Eclipse版本:eclipse-jee-oxygen-2-win32-x86_64
    tomcat版本:tomcat8.0
    MySQL的JDBC驱动程序版本:mysql-connector-java-5.1.46.zip

    步骤

    1、首先打开Eclipse软件,打开后在工具栏依次点击【File】——>【New】——>【Dynamic Web Project】,这个就代表新建的项目是WEB项目。
    2、填写项目的基本信息,包括项目名、项目运行时服务器版本。可以选择tomcat或者其他都可以,看项目需要。在这里我们输入一个【TestTomcat8】来测试项目的建立,输入完毕后我们点击【Next】按钮。
    这里写图片描述
    3、这个窗口显示的WEB项目中需要编译的JAVA文件的目录,默认是SRC目录,这个我们不需要改,直接点击【Next】。
    这里写图片描述
    4、接着弹出窗口,显示的是我们的WEB项目,WEB文件相关的目录,就是html或者jsp还有js那些web相关的文件存放的目录,默认是【WebContent】,你也可以修改成你想要的文件名,不用勾选创建web.xml复选框。然后点击finish。
    这里写图片描述
    5、右键点击项目,然后New——>Servlet。
    这里写图片描述
    6、在对话框中输入包名cn.nicktcl.test.hello和类名HelloWorld2,点击finish。
    这里写图片描述
    7、将以下代码粘贴到文件HelloWorld2.java如下位置。
    这里写图片描述

                PrintWriter out = response.getWriter();  
                out.write("<html>\r\n");  
                out.write("<head>\r\n");  
                // 设定解码方式  
                out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");  
                out.write("</head>\r\n");  
                out.write("\r\n");  
                out.write("<body>\r\n");  
                out.write("<H1>\r\n");  
                out.write("helloworld2");  
                out.write("\r\n");  
                out.write("</H1>\r\n");  
                out.write("</body>\r\n");  
                out.write("</html>");  
        }

    8、点击运行按扭旁边的小箭头——>Run As——>Run on Sever。
    这里写图片描述
    9、点击finish。
    这里写图片描述
    10、控制如出现如下界面则说明tomcat已经在后台运行。
    这里写图片描述
    11、我们打开自己的浏览器,在地址栏输入以下路径验证是否可以访问到刚写的页面:http://localhost:8080/TestTomcat8/HelloWorld2,其中Hello是项目的名称,HelloWorld是类名称。可看到正常输出HelloWorld2。
    这里写图片描述

    参考资料

    1、Tomcat7.0新特性:支持Servlet3.0注解定义,无需配置web.xml
    2、Servlet2.5和 3.0区别(Servlet 3.0 新特性详解)

    展开全文
  • Tomcat 下4个xml配置文件详细介绍

    万次阅读 2016-11-27 12:21:54
    Tomcat配置文件并不多,由4个 xml 文件组成,分别是 context.xml、web.xml、server.xmltomcat-users.xml 这几个文件。每个文件都有自己的功能与配置方法,本文将逐一的详细介绍这几个配置文件。 一、...

    Tomcat 的配置文件并不多,由4个 xml 文件组成,分别是 context.xml、web.xml、server.xml、tomcat-users.xml 这几个文件。每个文件都有自己的功能与配置方法,本文将逐一的详细介绍这几个配置文件。

    tomcat.png

    一、context.xml 文件

    Context.xml 是 Tomcat 公用的环境配置,tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。推荐在 $CATALINA_BASEconf/context.xml 中进行独立的配置。因为 server.xml
    是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载,而context.xml 文件则不然。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    < Context  path = "/eml"  docBase = "eml"  debug = "0"  reloadbale = "true"  privileged = "true" >  
           
         < WatchedResource >WEB-INF/web.xml</ WatchedResource >  
           
         < WatchedResource >WEB-INF/eml.xml</ WatchedResource > 监控资源文件,如果web.xml || eml.xml改变了,则自动重新加载改应用。  
           
         < Resource  name = "jdbc/testSiteds"  表示指定的jndi名称  
         auth = "Container"  表示认证方式,一般为Container  
         type = "javax.sql.DataSource"  
         maxActive = "100"  连接池支持的最大连接数  
         maxIdle = "40"  连接池中最多可空闲maxIdle个连接  
         maxWait = "30000"  连接池中连接用完时,新的请求等待时间,毫秒  
         username = "txl"  表示数据库用户名  
         password = "123456"  表示数据库用户的密码  
         driverClassName = "com.mysql.jdbc.Driver"  表示JDBC DRIVER  
         url = "jdbc:mysql://localhost:3306/testSite"  /> 表示数据库URL地址  
           
    </ Context >

    context.xml 的三个作用范围:

    1. tomcat server 级别:

    在$CATALINA_BASE/conf/context.xml 里配置,如果你在这个地方配置、那么这个配置文件将会被所有的webApp共享 。

    2. Host 级别:

    在 $CATALINA_BASE/conf/Catalina/${hostName} 里添加 context.xml,继而进行配置,这个配置将会被这个主机上的所有webapp共享。

    3. web app 级别:

    在 $CATALINA_BASE/conf/Catalina/${hostName} 里添加 ${webAppName}.xml,继而进行配置。

    此时,path="", webAppName 即为 path属性的值,也就是访问的虚拟目录。

    另:tomcat 服务器文件中的 $CATALINA_BASE/webapps 目录下的所有文件夹都是一个应用。这个时候不需要自己动手配置,服务器默认将文件夹名映射成虚拟目录名称。还可以通过 $CATALINA_BASE/webapps/{App}/META-INF/context.xml 来配置,这个是在web应用中自己添加的,配置和其它一样。

    <context> 标签是使用,见:

    二、web.xml文件

     Web应用程序描述文件,都是关于是Web应用程序的配置文件。所有Web应用的 web.xml 文件的父文件。
     <web-app >
     <filter></filter> 
     <filter-mapping></filter-mapping> 
     <servlet></servlet> 
     <servlet-mapping></servlet-mapping> 
     <session-config></session-config>
     <mime-mapping></mime-mapping>
     <welcome-file-list></welcome-file-list> 
     </web-app >

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <!-- 
    filter 配置Servlet过滤器 
    filter-name 定义过滤器的名字。当有多个过滤器时,不能同名 
    filter-class 指定实现这一过滤的类,这个类负责具体的过滤事务 
    --> 
    < filter
    < filter-name >SampleFilter</ filter-name
    < filter-class >mypack.SampleFilter</ filter-class
    </ filter
     
    <!-- 
    filter-mapping 设定过滤器负责过滤的URL 
    filter-name 过滤器名。这里的名字一定要和filter中的过滤器名匹配 
    url-pattern 指定过滤器负责过滤的URL 
    --> 
    < filter-mapping
    < filter-name >SampleFilter</ filter-name
    < url-pattern >*.jsp</ url-pattern
    </ filter-mapping
     
    <!-- 
    servlet 配置Servlet. 
    servlet-name 定义Servlet的名字 
    servlet-class 指定实现这个servlet的类 
    init-param 定义Servlet的初始化参数和参数值,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数 
    load-on-startup 指定当Web应用启动时,装载Servlet的次序。 
    当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet. 
    当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它 
    --> 
    < servlet
    < servlet-name >SampleServlet</ servlet-name
    < servlet-class >mypack.SampleServlet</ servlet-class
    < init-param
    < param-name >initParam1</ param-name
    < param-value >2</ param-value
    </ init-param
    < load-on-startup >1</ load-on-startup
    </ servlet
     
    <!-- 
    配置servlet映射(下面代码为SampleServlet指定的相对URL为"/sample": 
    servlet-name 指定servlet的名字,这里的名字应该和<Servlet>元素中定义的名字匹配。 
    url-pattern 指定访问这个servlet的URL。只需给出相对路径。 
    --> 
    < servlet-mapping
    < servlet-name >SampleServlet</ servlet-name
    < url-pattern >/sample</ url-pattern
    </ servlet-mapping
     
    <!--配置session session用来设定HttpSession的生命周期。单位(秒)--> 
    < session-config
    < session-timeout >30</ session-timeout
    </ session-config
     
    <!--配置Wel0come0文件清单--> 
    < welcome-file-list
    < welcome-file >login.jsp</ welcome-file
    < welcome-file >index.htm</ welcome-file
    </ welcome-file-list >

    该文件基本不用配置,Tomcat7 支持 Servlet3.0 注解定义,无需配置 web.xml。为了使 Tomcat 能够运行 CGI,必须把关于<servlet-name> CGI 的那段的注释去掉。

    更多细节请参考:http://blog.163.com/ny_lonely/blog/static/18892427320136925044357

    三、server.xml文件

    server.xml是对tomcat的设置,可以设置端口号,添加虚拟机这些的,是对服务器的设置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    < Server  port = "8005"  shutdown = "SHUTDOWN" >
       < Listener  className = "org.apache.catalina.startup.VersionLoggerListener"  />
       < Listener  className = "org.apache.catalina.security.SecurityListener"  />
       < Listener  className = "org.apache.catalina.core.AprLifecycleListener"  SSLEngine = "on"  /> 
       < Listener  className = "org.apache.catalina.core.JasperListener"  /> 
       < Listener  className = "org.apache.catalina.core.JreMemoryLeakPreventionListener"  /> 
       < Listener  className = "org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"  /> 
       < Listener  className = "org.apache.catalina.core.ThreadLocalLeakPreventionListener"  /> 
       < GlobalNamingResources
       <!-- 全局命名资源,来定义一些外部访问资源,其作用是为所有引擎应用程序所引用的外部资源的定义 --!> 
         <Resource name="UserDatabase" auth="Container" 
                   type="org.apache.catalina.UserDatabase" 
                   description="User database that can be updated and saved" 
                   factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
                   pathname="conf/tomcat-users.xml" /> 
       </GlobalNamingResources> 
       <!-- 定义的一个名叫“UserDatabase”的认证资源,将conf/tomcat-users.xml加载至内存中,在需要认证的时候到内存中进行认证 --> 
       < Service  name = "Catalina"
       <!-- # 定义Service组件,同来关联Connector和Engine,一个Engine可以对应多个Connector,每个Service中只能一个Engine --!> 
         <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
         <!-- 修改HTTP/1.1的Connector监听端口为80.客户端通过浏览器访问的请求,只能通过HTTP传递给tomcat。还可以设置server与URIEncoding参数 --> 
         < Connector  port = "8009"  protocol = "AJP/1.3"  redirectPort = "8443"  /> 
         < Engine  name = "Catalina"  defaultHost = "test.com"
         <!-- 修改当前Engine,默认主机是,www.test.com  --> 
         < Realm  className = "org.apache.catalina.realm.LockOutRealm"
             < Realm  className = "org.apache.catalina.realm.UserDatabaseRealm" 
                    resourceName = "UserDatabase" /> 
         </ Realm
         # Realm组件,定义对当前容器内的应用程序访问的认证,通过外部资源UserDatabase进行认证 
           < Host  name = "test.com"   appBase = "/web"  unpackWARs = "true"  autoDeploy = "true"
           <!--  定义一个主机,域名为:test.com,应用程序的目录是/web,设置自动部署,自动解压    --> 
             < Alias >www.test.com</ Alias
             <!--    定义一个别名www.test.com,类似apache的ServerAlias --> 
             < Context  path = ""  docBase = "www/"  reloadable = "true"  /> 
             <!--    定义该应用程序,访问路径"",即访问www.test.com即可访问,网页目录为:相对于appBase下的www/,即/web/www,并且当该应用程序下web.xml或者类等有相关变化时,自动重载当前配置,即不用重启tomcat使部署的新应用程序生效  --> 
             < Context  path = "/bbs"  docBase = "/web/bbs"  reloadable = "true"  /> 
             <!--  定义另外一个独立的应用程序(虚拟主机),访问路径为:www.test.com/bbs,该应用程序网页目录为/web/bbs   --> 
             < Valve  className = "org.apache.catalina.valves.AccessLogValve"  directory = "/web/www/logs" 
                    prefix = "www_access."  suffix = ".log" 
                    pattern = "%h %l %u %t &quot;%r&quot; %s %b"  /> 
             <!--   定义一个Valve组件,用来记录tomcat的访问日志,日志存放目录为:/web/www/logs如果定义为相对路径则是相当于$CATALINA_HOME,并非相对于appBase,这个要注意。定义日志文件前缀为www_access.并以.log结尾,pattern定义日志内容格式,具体字段表示可以查看tomcat官方文档   --> 
           </ Host
           < Host  name = "manager.test.com"  appBase = "webapps"  unpackWARs = "true"  autoDeploy = "true"
           <!--   定义一个主机名为man.test.com,应用程序目录是$CATALINA_HOME/webapps,自动解压,自动部署   --> 
             < Valve  className = "org.apache.catalina.valves.RemoteAddrValve"  allow = "172.16.100.*"  /> 
             <!--   定义远程地址访问策略,仅允许172.16.100.*网段访问该主机,其他的将被拒绝访问  --> 
             < Valve  className = "org.apache.catalina.valves.AccessLogValve"  directory = "/web/bbs/logs" 
                    prefix = "bbs_access."  suffix = ".log" 
                    pattern = "%h %l %u %t &quot;%r&quot; %s %b"  /> 
             <!--   定义该主机的访问日志      --> 
           </ Host
         </ Engine
       </ Service
    </ Server >

    1、<Server>元素:
    是整个配置文件的根元素。表示整个Catalina容器。

    属性:
    className:实现了org.apache.catalina.Server接口的类名,标准实现类是org.apache.catalina.core.StandardServer类;
    Port:Tomcat服务器监听用于关闭Tomcat服务器的命令(必须);
    Shutdown:发送到端口上用于关闭Tomcat服务器的命令;

    2、<Connector>元素:
    连接器,负责接收客户的请求,以及向客户端回送响应的消息。

    HTTP连接器:

    属性:
    allowTrace:是否允许HTTP的TRACE方法,默认为false;
    emptySessionPath:如果设置为true,用户的所有路径都将设置为/,默认为false;
    enableLookups:调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址;
    maxPostSize:指定POST方式请求的最大量,没有指定默认为2097152;
    protocol:值必须为HTTP1.1,如果使用AJP处理器,该值必须为AJP/1.3;
    proxyName:如这个连接器正在一个代理配置中被使用,指定这个属性,在request.getServerName()时返回;
    redirectPort:如连接器不支持SSL请求,如收到SSL请求,Catalina容器将会自动重定向指定的端口号,让其进行处理;
    scheme:设置协议的名字,在request.getScheme()时返回,SSL连接器设为”https”,默认为”http”;
    secure:在SSL连接器可将其设置为true,默认为false;
    URIEncoding:用于解码URL的字符编码,没有指定默认值为ISO-8859-1;
    useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的编码来取代URIEncoding,用于解码URI查询参数,默认为false;
    xpoweredBy:为true时,Tomcat使用规范建议的报头表明支持Servlet的规范版本,默认为false;
    acceptCount:当所有的可能处理的线程都正在使用时,在队列中排队请求的最大数目。当队列已满,任何接收到的请求都会被拒绝,默认值为10;
    bufferSize:设由连接器创建输入流缓冲区的大小,以字节为单位。默认情况下,缓存区大的大小为2048字节;
    compressableMimeType:MIME的列表,默认以逗号分隔。默认值是text/html,text/xml,text/plain;
    compression:指定是否对响应的数据进行压缩。off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off;
    connectionTimeout:设置连接的超时值,以毫秒为单位。默认值为60000=60秒;
    disableUploadTimeOut:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false;
    maxHttpHeaderSize:HTTP请求和响应头的最大量,以字节为单位,默认值为4096字节;
    maxKeepAliveRequest:服务器关闭之前,客户端发送的流水线最大数目。默认值为100;
    maxSpareThreads:允许存在空闲线程的最大数目,默认值为50;
    minSpareThreads:设当连接器第一次启协创建线程的数目,确保至少有这么多的空闲线程可用。默认值为4;
    port:服务端套接字监听的TCP端口号,默认值为8080(必须);
    socketBuffer:设Socket输出缓冲区的大小(以字节为单位),-1表示禁止缓冲,默认值为9000字节;
    toNoDelay:为true时,可以提高性能。默认值为true;
    threadPriority:设JVM中请求处理线程优先级。默认值为NORMAL-PRIORITY;

    例如:

    1
    2
    3
    < Connector
    port = "8080"  maxHttpHeaderSize = "8192"  maxThreads = "150"  minSpareThreads = "25"  maxSpareThreads = "75"  enableLookups = "false"
    redirectPort = "8443"  acceptCount = "100"  connectionTimeout = "20000"  disableUploadTimeout = "true"  />

    AJP连接器:
    用于将Apache与Tomcat集成在一起,当Apache接收到动态内容请求时,通过在配置中指定的端口号将请求发送给在此端口号上监听的AJP连接器组件。

    属性:
    backlog:当所有可能的请求处理线程都在使用时,队列中排队的请求最大数目。默认为10,当队列已满,任何请求都将被拒绝;
    maxSpareThread:允许存在空闲线程的最大数目,默认值为50;
    maxThread:最大线程数,默认值为200;
    minSpareThreads:设当连接器第一次启动时创建线程的数目,确保至少有这么多的空闲线程可用,默认值为4;
    port:服务端套接字的TCP端口号,默认值为8089(必须);
    topNoDelay:为true时,可以提高性能,默认值为true;
    soTimeout:超时值;

    例如:

    1
    2
    <!—Define an AJP1.3 Connector on port 8089-->
    < Connector  port = "8089"  enableLookups = "false"  redirectPort = "8443"  protocol = "AJP/1.3"  />

    3、<Engine>元素:
    为特定的Service处理所有的请示。每个Service只能包含一个Engine元素,它负责接收和处理此Service所有的连接器收到的请求,向连接发回响应,并最终显示在客户端。<Engine>至少有一个<Host>元素,必须至少有一个<Host>属性的名字与defaultHost指定的名字相匹配。

    属性:
    className:实现org.apache.catalina.Engine接口,默认实现类为org.apache.catalina.core.StandardEngine类;
    defaultHost:默认主机名,值必须与<Service>的name值相匹配;
    name:指定Engine的逻辑名字(必须);
    jvmRoute:在负载匀衡中使用的标识符,必须唯一;

    例如:

    1
    < Engine  name = "Cataline"  defaultHost = "localhst" >

    4、<Host>元素:
    表示一个虚拟主机,为特定的虚拟主机处理所有请求。

    属性:
    appBase:设定应用程序的基目录,绝对路径或相对于%CATALINA_HOME%的路径名;
    autoDeploy:指示Tomcat运行时,如有新的WEB程序加开appBase指定的目录下,是否为自动布署,默认值为true;
    className:实现了org.apache.catalina.Host接口的类,标准实现类为org.apache.catalina.core.StandardHost类;
    deployOnStartup:Tomcat启动时,是否自动部署appBase属性指定目录下所有的WEB应用程序,默认值为true;
    name:虚拟主机的网络名(必须);

    标准Host实现类org.apahce.catalina.core.StandardHost支持的附加属性:
    deployXML:为false将不会解析WEB应用程序内部的context.xml,默认值为true;
    unPackWARs:虚拟主机指定临时读写使用的目录的路径名,不设,Tomcat会在%CATALINA_HOME%/work目录下提供一个合适的目录;

    例如:

    1
    < Host  name = "localhst"  appBase = "webapps"  unpackWARs = "true"  autoDeploy = "true"  xmlValidation = "false"  xmlNamespaceAware = "false" >

    配置虚拟主机:

    1
    2
    3
    < Hostname = "xxx"  appBase = "/test" >
         < Contentpath = " "  docBase = "www/" />
    </ Hostname >

    5、<context>元素:
    一个WEB应用程序,处理当前WEB应用程序的所有请求,每一个<Context>必须使用唯一的上下文路径。

    属性:
    className:实现了org.apache.catalina.Context接口的类,标准实现类org.apache.catalina.core.StandardContext类;
    cookies:是否将Cookie应用于Session,默认值为true;
    crossContext:是否允许跨域访问,为true时,在程序内调用ServletContext.getContext()方法将返回一个虚拟主机上其它web程序的请求调度器;默认值为false,调 径用getContext()返回为null;
    docBase:绝对路径或相对于Host的appBase 属性的相对路径;
    privileged:为true,允许Web应用程序使用容器的Servlet;
    path:指定上下文路径。一个虚拟主机中,上下文路径必须唯一;
    reloadable:为true,Tomcat运行时,如果WEB-INF/classes和WEB-INF/lib目录中有改变,Tomcat会自动重新加载该WEB应用程序。虽方便,但开销也大,默认值为false,我们在调用可以打开,发布后再关闭;
    cacheMaxSize:静态资源缓存最大值,以KB为单位,默认值为10240KB;
    cachingAllowed:是否允许静态资源缓存,默认为true;
    caseSensitive:默认为true,资源文件名大小写敏感,如果为false大小写不敏感;
    unpackWAR:默认为true;
    workDir:为WEB应用程序内部的Servlet指定临时读写的目录路径名。如没有设置,则Tomcat会在%CATALINA_HOME%/work目录下提供一个合适的目录;

    一个 server 有一个 service,一个 service 里有多个 connector 和一个 engine,不同的 connector 除了端口可能不同,协议也可能不同。多个connector 对应一个 engine。engine 代表我们应用程序的容器。一个 engine 中有一个到多个 host,一个host 代表我们的一个虚拟主机。host 里又有一个到多个 context,一个 context 代表了一个应用程序的虚拟子站点。

    四、tomcat-users.xml

    关于用户角色、管理员的信息都在这个配置文件中。登录用户默认是注释掉的,把 <!–  –>去掉才能生效。改文件已经在《Tomcat Manager用户配置详解》文章中,做了详细的说明与配置,这里就不在重复了。

    展开全文
  • 注解代替xml配置文件 一、Servlet3.0 新特性 概述 Servlet3.0的主要新特性如下三部分: 使用@WebServlet、@WebFilter、@WebListener三个注解来替代web.xml文件中的Servlet、Filter、Listener的配置; Servlet异步...

    注解代替xml配置文件

    一、Servlet3.0 新特性 概述

    Servlet3.0的主要新特性如下三部分:

    • 使用@WebServlet@WebFilter@WebListener三个注解来替代web.xml文件中的Servlet、Filter、Listener的配置;
    • Servlet异步处理:当Servlet处理比较费时的问题时,这会让客户感觉到很卡。当使用异常处理时可以把已经处理好的内容先一步响应给客户端浏览器,然后使用另一个线程来完成费时的操作,也就是把内容一部分一部分的显示出来;
    • 上传组件:不用再使用fileupload等第三方的上传组件,使用Servlet3.0的上传组件会更方便。

    这篇文章我们介绍一下,如何用注解来替代配置文件

    二、注解替代xml

    ① Servlet注解

    我们先来回忆一下,Servlet在web.xml中是怎么配置的。
    我们给出一个普通的Servlet配置:

    <servlet>
    	<servlet-name>AServlet</servlet-name>
    	<servlet-class>com.veeja.web.servlet.AServlet</servlet-class>
    
    	<init-param>
    		<param-name>p1</param-name>
    		<param-value>v1</param-value>
    	</init-param>
    	<init-param>
    		<param-name>p2</param-name>
    		<param-value>v2</param-value>
    	</init-param>
    	<load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    	<servlet-name>AServlet</servlet-name>
    	<url-pattern>/AServlet</url-pattern>
    </servlet-mapping>
    

    上面我们都配置了<servlet-name><servlet-class><url-pattern>这三项最基本的配置,用这三项将servlet的类与请求的URL绑定在一起。我们还设置了两个初始化参数,p1/p2,也设置了启动的优先级<load-on-startup>
    我们把这个Servlet写出来,内容很简单,在控制台输出"hello servlet3.0",并且在前台显示"hahahahaha"。

    public class AServlet extends HttpServlet {
    	public void doGet(HttpServletRequest req,
    			HttpServletResponse resp) throws ServletException,
    			IOException {
    		System.out.println("hello servlet3.0");
    		resp.getWriter().print("hahahahaha");
    	}
    }
    

    那么我们要用注解来代替这些配置,首先是通过<servlet-name><servlet-class><url-pattern>这三项绑定在一起,我们完全可以在这个servlet上加一个@WebServlet的注解,添加一个urlPatterns属性,就直接完成了类与URL的绑定,也就是:

    @WebServlet(urlPatterns = { "/AServlet" })
    public class AServlet extends HttpServlet {
    	public void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		System.out.println("hello servlet3.0");
    		resp.getWriter().print("hahahahaha");
    	}
    }
    

    我们这样先发布到tomcat下试一试,在网页中直接请求这个Servlet:
    在这里插入图片描述
    我们可以看到,这样是完全可以的。这样,注解的优点就体现的很明显了,就是配置信息很少,一套xml配置只需要一条WebServlet注解就可以完成了。但是这样也有一个很大的缺点,那就是如果你想修改配置的话,就需要修改源代码,这一点上不太方便。

    另外,还有一些其他的配置选项,比如初始化参数<init-param>,启动的优先级<load-on-startup>,这些要怎么样配置呢?

    <init-param>使用initParams来代替,它的值需要给出一个注解类@WebInitParam,这个注解类需要的是name和value。我们可以演示一下,将上面的p1/p1添加进入注解:

    @WebServlet(
    		urlPatterns = { "/AServlet" }, 
    		initParams = {
    			@WebInitParam(name = "p1", value = "v1"),
    			@WebInitParam(name = "p2", value = "v2"), 
    		}
    )
    public class AServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		System.out.println("hello servlet3.0");
    		resp.getWriter().print("hahahahaha");
    	}
    }
    

    <load-on-startup>需要我们使用loadOnStartup属性,值就设置成我们需要的值即可,也就是:

    @WebServlet(
    		urlPatterns = { "/AServlet" }, 
    		initParams = {
    			@WebInitParam(name = "p1", value = "v1"),
    			@WebInitParam(name = "p2", value = "v2"), 
    		},
    		loadOnStartup = 1
    )
    public class AServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		System.out.println("hello servlet3.0");
    		resp.getWriter().print("hahahahaha");
    	}
    }
    

    这样我们就完成了使用注解来代替配置文件。

    ② Filter和Listener注解

    Filter的注解跟Servlet很类似,我们直接给出代码供参考:

    @WebFilter(
    	urlPatterns="/*"
    )
    public class AFilter implements Filter {
    	...
    	...
    }
    

    Listener的注解,只需要给出注解,不需要写其他的内容:

    @WebListener
    public class AListener implements ServletContextListener {
    
    	public void contextDestroyed(ServletContextEvent arg0) {
    		System.out.println("Tomcat销毁了!");
    	}
    
    	public void contextInitialized(ServletContextEvent arg0) {
    		System.out.println("Tomcat出生了!");
    	}
    }
    

    零、前置要求

    要想使用Servlet3.0,有两个要求,首先在MyEclipse上,版本需要10.0及其以上版本,而且Tomcat,需要7.0及其以上版本。

    在创建项目的时候,需要选择JavaEE 6.0,如下图所示:
    在这里插入图片描述
    创建完以后,打开web.xml,可以发现3.0的字样,如下图所示:
    在这里插入图片描述


    END.

    展开全文
  • tomcat常用配置注释

    千次阅读 2018-04-28 15:19:50
    指定Tomcat容器的URL编码格式。 disableUploadTimeout="true" 上传时是否使用超时机制 enableLookups="false"--是否反查域名,默认值为true。为了提高处理能力,应设置为false com...
    maxHttpHeaderSize="8192"
     
    http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。 
    
    URIEncoding="UTF-8" 指定Tomcat容器的URL编码格式。 
    disableUploadTimeout="true" 上传时是否使用超时机制 
    enableLookups="false"--是否反查域名,默认值为true。为了提高处理能力,应设置为false 
    compression="on"   打开压缩功能 
    compressionMinSize="10240" 启用压缩的输出内容大小,默认为2KB 
    noCompressionUserAgents="gozilla, traviata"   对于以下的浏览器,不启用压缩 
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩 


    tomcat配置示例:


    配置示例 
    <Connector port="8080" 
    redirectPort="8443"
    maxThreads="150" 
    minSpareThreads="25" 
    maxSpareThreads="75" 
    acceptCount="100" 
    connectionTimeout="20000" 
    protocol="HTTP/1.1" 


    maxHttpHeaderSize="8192" 
    URIEncoding="UTF-8" 
    disableUploadTimeout="true" 
    enableLookups="false" 
    compression="on" 
    compressionMinSize="10240" 
    noCompressionUserAgents="gozilla, traviata" 
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"> 
    ... 
    </Connector>
    展开全文
  • 如果你在eclipse上自动把web项目部署到tomcat后,写一个简单的servlet,但是在webapps下面的项目里的web.xml并没有servlet的配置,这时候在外部启动tomcat启动不成功,把servlet正确配置后,tomcat就启动成功了...
  • tomcat8 server.xml 标签connector 配置说明

    万次阅读 2016-08-11 17:35:45
    介绍 每个connector标签表示一个链接组建,它...可以一个或多个connector标签,每个connector作为tomcat服务的一部分,每个connector使用相关引擎来执行请求处理和创建响应。 属性 公用属性 所有类型connector都支
  • 而且用java注解的方式配置项目,不再使用xml的方式,因为网上这方面教程比较少,所以在此记录一个基本的框架的搭建,包括测试类的写法! 框架:spring+springMVC+hibernate 构建工具:gradle 开发工具:eclipse ...
  • 嵌入式tomcat的不使用web.xml原理分析

    千次阅读 2019-07-20 16:21:22
    前面的章节讲了嵌入式tomcat使用web.xml启动,这章说说不使用web.xml启动tomcat。有了这个就明白Spring Boot是如何在没有web.xml的的情况下实现web能力的,以后的tomcat容器应用就可以实现jar运行,十分方便。 1. ...
  • Servlet3.0作为J2EE6.0规范的一部分,随J2EE6.0一起发布,并且Tomcat7.0已经...在Eclipse中不再需要web.xml配置servlet,而通过注解的方式找寻servlet。 1) Eclipse中创建Web项目    我们在tomcat7.0环境
  • 文章目录servlet3新特性演示依赖如下实现ServletContainerInitializer启动配置tomcat7:run启动启动springmvc启动配置类spring对上面配置类的处理重点 servlet3新特性演示 依赖如下 <dependencies> <...
  • 环境: 1、springboot2 jpa tomcat8 2、启动方式:tomcat8启动 3、没有xml文件和其他配置文件,...数据源的相关配置全部要放到tomcat的context.xml中。 如果可以,最好使用JNDI 愿意有偿酬谢,我QQ529629886
  • 主要介绍了web.xml中如何设置配置文件的加载路径实例详解的相关资料,需要的朋友可以参考下
  • SpringBoot是基于我们spring框架的,springboot是一个快速整合的第三方框架,简化了xml配置完全采用注解化,内置了我们的服务器(比如说我们的:tomcat(阿帕奇公司的,自带的),jetty),这样我们就不需要使用外部的...
  • # 访问顺序为1—>2—>3—>4,其中2和3的值必须...还有,web.xml 的 / 表示的是 http://localhost:8080/ + 工程名 而.jsp页面的action,加了/表示绝对路径 http://localhost:8080/ ,没有加 / 表示的是相对路径
  • tomcat 7或以上较新版本中多了...为此只需要在servlet上写上注解就不在需要配置web.xml,如果两个都配置则会产生冲突导致无法启动tomcat 解决方法就是保留其中一种发布方式,要么使用注解要么使用web.xml ...
  • Servlet配置web.xml后导致无法启动Tomcat

    千次阅读 2017-11-19 18:08:35
    然后又配置了web.xml中的标签,导致了无法启动Tomcat,原因是因为较新的版本有了新的一项功能,叫注解,如图所示,注解即可以不用再去配置web.xml,不然就会冲突,导致无法启动Tomcat,解决方案是去掉注解或者去掉...
  • 原因是在web.xml配置了<servlet>和<servlet map>: 而新版Servlet中有自动注解了,不需要重复配置: 二者删除其一即可。 转自:https://blog.csdn.net/qq_40522155/article/details/78575742 ...
  • 1.注解和web.xml中的serlvet配置重复了 只需要保留有一个就可以了
  • Web.xml配置监听器Listener导致Tomcat无法启动 1.在pom.xml里导入 org.springframework spring-web 5.0.5.RELEASE 版本看你个人的Spring版本,要一致 2.File->Project Structure->Artfacts 查看jar包是否...
  • ...  at org.apache.catalina.deploy.WebXml.addServletMapping(WebXml.java:293)  at org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet...原因:注解的名称与web.xml配置的 名称一样
  • ssm项目搭建(tomcat配置)详解

    千次阅读 2019-12-05 10:50:25
    ssm项目搭建(tomcat配置)详解 一、 技术准备 为了完成这个项目,需要掌握如下技术: Java基础知识 前端:HTML, CSS, JAVASCRIPT, JQUERY J2EE:Tomcat, Servlet, JSP, Filter 框架:Spring, Spring MVC, MyBatis,...
  • springboot是如何在没有web.xml的情况下在外部tomcat启动的 ...由于servlet的规范是要配置web.xml的,包括Struts2和spring都是要在web.xml配置的,有一天在服务器上看编译后的目标文件中居然没有web.xm
  •  这是最常用的方式,Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。如果你想要修改这个默认目录,可以在conf下的server.xml文件里修改Host标签里的appBase值。  这个...
  • 目前的Spring 版本是支持 xml注解和javaConfig配置的。当然这三个也能混合使用。 我们百度一下 spring mvc 搭建。结果基本上都是xml注解的混合使用。 下面我来分享一下我对springMVC的个人理解。 第一步我们先...
  • WebContent/WEB-INF/web.xml配置文件 配置DispatcherServlet(核心控制器) ①先在web.xml配置前端控制器org.springframework.web.servlet.DispatcherServlet ②该类成功加载后会创建自己的容器(SpringMVC容器)...
  • SpringBoot(一)——注解配置

    千次阅读 2019-05-12 17:11:31
    为文章目录一、简介1、概述2、特性3、四大核心二、搭建环境三、入门小程序--HelloWorld四、配置文件1、YML文件2、YML语法<1>、基本语法<2>、值的写法(1)、字面量(数字、字符串、布尔)(2)、对象、Map(3)...
  • Filter过滤器的例子与注解配置

    千次阅读 2020-08-04 10:48:59
    注解配置 过滤器放行 Filter的生命周期 Filter的拦截路径 Filter的拦截方式 Filter的过滤器链 概念 当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能 作用 一般用于完成通过...
  • Java知识体系最强总结(2021版)

    万次阅读 多人点赞 2019-12-18 10:09:56
    更新于2021-08-13 22:55:12 欢迎关注微信公众号【技术人成长之路...https://thinkwon.blog.csdn.net/article/details/100128361 18 Java语法糖 https://thinkwon.blog.csdn.net/article/details/100103689 19 Java注解 ...
  • Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。 将来我们自定义一个类,实现Servlet接口,复写方法。 一、XML执行原理 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问...
  • @WebServlet("/TestServlet"),注释的作用是生成文档,跟踪代码依赖性,实现代替配置功能,所以这里推测注解代替了配置的功能,那么为什么在Tomcat7.0之后才不用配置呢?后来查资料看到Tomcat7.0完全支持Servlet3.0...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,474
精华内容 25,389
关键字:

tomcat注解配置xml